Вычисление по формуле - Assembler (223023)
Формулировка задачи:
Здравствуйте, я написал программу вычисления по формуле:
Но дело в том, что программа всегда выводит 'Y=0' независимо от того, какие данные А и В я ввожу.
Подскажите, пожалуйста, в какой строке кода обнуляется АХ.
Вот, что я написал:
program sfgjafnh;
var a,b:byte;
y:word;
begin
writeln('vvedite A,B');
readln(A,B);
asm
mov AL,A
mov BL,7
mul BL
mov BL,B
mul BL
sub BX,AX
mov AL,A
mul AL
shl AX,4
xor DX,DX
div BX
mov Y,AX
end;
writeln('Y=' ,Y);
readln;
end.Решение задачи: «Вычисление по формуле»
textual
Листинг программы
mov AL,A ;al=A mov BL,7 ;bl=7 mul BL ;ax=7*A mov BL,B ;bl=B mul BL ;ax=al*B - уже непонятно что sub BX,AX ;а тут уже нет смысла читать - ведь ранее пошло не так mov AL,A mul AL shl AX,4 xor DX,DX div BX mov Y,AX
Объяснение кода листинга программы
- Значение переменной A копируется в регистр AL:
mov AL, A. - Значение переменной 7 копируется в регистр BL:
mov BL, 7. - Значение, находящееся в регистре BL, умножается на значение, находящееся в регистре AL, и результат сохраняется в регистре AX (расширенный регистр):
mul BL. - Значение переменной B копируется в регистр BL:
mov BL, B. - Значение, находящееся в регистре BL, умножается на значение, находящееся в регистре AX, и результат сохраняется в регистре AX:
mul BL. - Значение, находящееся в регистре AX, вычитается из значения, находящегося в регистре BX, и результат сохраняется в регистре BX:
sub BX, AX. - Значение переменной A копируется в регистр AL:
mov AL, A. - Значение, находящееся в регистре AL, умножается на само себя, и результат сохраняется в регистре AX:
mul AL. - Значение, находящееся в регистре AX, сдвигается влево на 4 бита:
shl AX, 4. - Регистр DX обнуляется:
xor DX, DX. - Значение, состоящее из соединения значений, находящихся в регистрах AX и DX, делится на значение переменной B, и результат сохраняется в регистре AX:
div BX. - Значение, находящееся в регистре AX, копируется в переменную Y:
mov Y, AX.