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

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

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

Восстановить пароль

Купить рекламу на форуме - 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,834
По умолчанию

Цитата:
Сообщение от 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,834
По умолчанию

Цитата:
Сообщение от 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