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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2014, 14:08   #1
Vitlii
 
Регистрация: 03.03.2014
Сообщений: 6
По умолчанию Не могу найти ошибку

Код:
Program Prim;
label m, m1, m2, ex;
var A, B, C : integer; 	

begin
  write('A, B?:'); read(A, B);
  asm 			


	mov	si, A		
	add	si, 3
	jne	m
  end; 			
  writeln(A+3=0);
  asm 			
	jmp	ex		


m:mov di,b
  cmp b,0		
	jnz	m1		
  end; 			
  writeln(B=0);
  asm 			
	jmp	ex		


m1:	mov ax,a
    imul b	
	add ax, 2
	
	jge	m2 		
	neg	ax		


m2:	cwd			
	idiv	di		
	mov	bp, ax	
	add	ax, A
	imul B
	add	ax, A
	imul B
	add	ax, A
	imul B
	mov	ax, B		
	imul	ax		
	imul	B
	cwd			
	idiv si
	add	ax, bp
	mov	C, ax		
  end; 			
  writeln('Result: ', (abs(3*A*B-sqr(B)*B)) div (A+3)+abs(A*B-2) div (B),
                ', C = ', C);
ex:
end.

Последний раз редактировалось Stilet; 23.10.2014 в 14:18.
Vitlii вне форума Ответить с цитированием
Старый 23.10.2014, 14:20   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Какого рода ошибка?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2014, 12:32   #3
Son Of Pain
Участник клуба
 
Регистрация: 23.12.2010
Сообщений: 1,129
По умолчанию

Нельзя так дерзко менять регистр bp внутри функции, он используется как указатель на фрейм в стеке.
Son Of Pain вне форума Ответить с цитированием
Старый 24.10.2014, 12:50   #4
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от Son Of Pain Посмотреть сообщение
Нельзя так дерзко менять регистр bp внутри функции
Зависит от компилятора. Не помню, сохраняет ли Borland Pascal регистры, используемые из ассемблера. Delphi сохраняет.
Vapaamies вне форума Ответить с цитированием
Старый 24.10.2014, 18:41   #5
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Цитата:
Сообщение от Vapaamies Посмотреть сообщение
Delphi сохраняет.
Да ну? Это какая версия сохраняет?
Somebody вне форума Ответить с цитированием
Старый 24.10.2014, 21:31   #6
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,774
По умолчанию

Цитата:
Сообщение от Somebody Посмотреть сообщение
Это какая версия сохраняет?
При программировании ассемблерных вставок посреди паскалевского кода пару раз натыкался на сохранение некоторых регистров, из-за чего фактическое поведение отличалось от предполагаемого. Детали позабыл, сейчас воспроизвести в точности не смог. Delphi 6.

В обособленных ассемблерных процедурах ничего не сохраняет, только стековый кадр создает.
Vapaamies вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не могу найти ошибку valadorn Общие вопросы C/C++ 3 17.02.2013 19:00
Не могу найти ошибку alexei1993 Помощь студентам 1 23.12.2012 17:50
не могу найти ошибку sasha0705 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 10.12.2012 20:33
не могу найти ошибку *mk* Общие вопросы C/C++ 1 02.12.2011 13:40
Не могу найти ошибку ToDayGoodDay JavaScript, Ajax 1 15.08.2011 09:43