Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > Найти значение выражения в ассемблере


Автор: Trakker 29.10.2016, 09:58
Y=2А/C+B/A
пробовал так не компилируется(дали задание но ничего про регистры не рассказали, ошибка в них как я думаю)
program sum_bz;сумма для без знаковых
var A,C,Y:byte;
B:word;
writeln('vv A,B i C');
readln(A,B,C);
asm
mov Al,A
xor AH,AH
shl Al,1
div C
mov BX,B
div A
ADD AL,BX
mov Y,AL
end;
writeln('y=',Y);
end.
-----------------------------------
попробовал если заносить в BX А, уже запускалось, но считалось не правильно(не могу привести тот пример забыл сохранить).Подскажи где тут ошибка, и как делать этого же выражение для знаковых пожалуйста

Автор: _zorn_ 29.10.2016, 16:38
Это паскаль, а не асемблер.
Хоть и большая часть программы на ассемблере. Т.е. компилировать нужно паскалем/делфи и производными.
Турбопаскаль возьми.
Асмовый код не смотрел, так что не знаю правильный он или нет.

Автор: Trakker 29.10.2016, 19:33
Цитата(_zorn_ @ 29.10.2016,  16:38)
Это паскаль, а не асемблер.
Хоть и большая часть программы на ассемблере. Т.е. компилировать нужно паскалем/делфи и производными.
Турбопаскаль возьми.
Асмовый код не смотрел, так что не знаю правильный он или нет.

Да, асм это вставка я все таки сделал для без знаковых
asm
mov al,a
xor ah,ah
shl ax,1
div c
mov bl,al
mov ax,b
div a
add al,bl
mov y,al
end;

 как сделать для знаковых?
Да, я пользуюсь турбопаскалем через досбокс

Автор: _zorn_ 30.10.2016, 13:19
Знаковые/беззнаковые отличаются одним старшим битом. В вашем случае обзовите то что хотите вывести знаковым типом и все срастется скорей всего.
Хотя не факт. Потому что старший бит он и в африке старший.
А у вас al,ah,ax и т.п. А знак находится тут eax & 0x80000000
Для x86 конечно...

PS для справки
eax = 0x12345678
ax = 0x5678
ah = 0x56
al = 0x78

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)