Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.04.2010, 19:14   #1
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию работа с циклами

создал программу в которой дана функция y = (a+b)/c-d*e в этой функции циклически изменяется элемент е (+2 за цикл) нужно сделать чтобы выводилось в одном массиве номер итерации значение е и результат вычисления функции номер итерации и значение е выводятся нормально но вот функция не изменяется не пойму почему объясните пожалуйста что не так вот код
Код:
#include <conio.h>
#include <stdio.h>

struct Npar {
	short value,number;
};

void main(){
	int const n=10;
	Npar argMas[11],fMas[11];
	int a=6,b=2,c=2,d=3,e=2,y,step=2;
	int i,delenie, umnogenie;
	__asm{
		push	eax
		push	ebx
		push	ecx
		push	edx


		mov		ecx,n
		mov		ebx,e
label1:	
		mov		eax,a		;вычисляем формулу
		add	    eax,b
		mov         edx,0
		idiv	c
		mov delenie,eax
        mov eax,d
        imul ebx  заменил е на регистр ebx все работает как надо 
		mov umnogenie,eax
		mov eax,delenie
		sub eax,umnogenie         ;EAX:=(a+b)/c-d*e

		mov		edx,n
		sub		edx,ecx		;EDX:=номеру текущего элемента
		

		mov		argMas[(edx*4)+0],ebx
		mov		argMas[(edx*4)+2],edx
		mov		fMas[(edx*4)+0],eax
		mov		fMas[(edx*4)+2],edx

		add		ebx,step		;увеличиваем e на step
		loop	label1

		pop		edx
		pop		ecx
		pop		ebx
		pop		eax

	}
	for (i=0;i<n;i++){
		printf("%3d %3d %5d\n",argMas[i].number,argMas[i].value,fMas[i].value);
	}
	
	_getch();
}

Последний раз редактировалось серг; 22.04.2010 в 19:55.
серг вне форума Ответить с цитированием
Старый 22.04.2010, 19:25   #2
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Может быть так ?
Код:
struct Npar {
	long value,number;
};
....
		mov		argMas[(edx*8)+0],ebx
		mov		argMas[(edx*8)+4],edx
		mov		fMas[(edx*8)+0],eax
		mov		fMas[(edx*8)+4],edx
,
или
Код:
		mov		argMas[(edx*4)+0],bx
		mov		argMas[(edx*4)+2],dx
		mov		fMas[(edx*4)+0],ax
		mov		fMas[(edx*4)+2],dx
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 22.04.2010 в 19:27.
Goodwin98 вне форума Ответить с цитированием
Старый 22.04.2010, 19:53   #3
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

все гораздо проще смотри в код исправлено красным )))) тупанул малясь я )))

Последний раз редактировалось серг; 22.04.2010 в 19:58.
серг вне форума Ответить с цитированием
Старый 22.04.2010, 20:34   #4
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Оу.. Ну все равно у вас в short кладется dword
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 22.04.2010, 21:27   #5
серг
Форумчанин
 
Регистрация: 02.11.2009
Сообщений: 179
По умолчанию

в смысле не понял ? точнее понял но как правильно пишу лонг прога вылетает

Последний раз редактировалось серг; 22.04.2010 в 21:34.
серг вне форума Ответить с цитированием
Старый 22.04.2010, 21:34   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Структура обьявлена так
Код:
struct Npar {
	short value,number;
};
т.е. тип short. В этом типе 2 байта.
В коде
Код:
		mov		argMas[(edx*4)+0],ebx
		mov		argMas[(edx*4)+2],edx
		mov		fMas[(edx*4)+0],eax
		mov		fMas[(edx*4)+2],edx
В эту структуру кладется содержимое 32разрядных регистров, т.е. по 4 байта. Значит верхними 2 байтами что-то затирается.
Наверно, поэтому массивы на 11 элементов, а не на 10. Вероятно вылетало
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4

Последний раз редактировалось Goodwin98; 22.04.2010 в 21:39.
Goodwin98 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с циклами DOJ Общие вопросы C/C++ 3 27.08.2009 18:39
Работа с циклами\массивами. Выручайте. S0ft44 Паскаль, Turbo Pascal, PascalABC.NET 2 15.05.2009 20:46
VBA работа с циклами melani Помощь студентам 2 28.03.2009 10:26
Работа с циклами 2. Вопрос SPQR Помощь студентам 5 27.10.2007 11:20
Работа с циклами. Надюха Помощь студентам 3 26.10.2007 09:29