Вычисление по формуле - 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

Объяснение кода листинга программы

  1. Значение переменной A копируется в регистр AL: mov AL, A.
  2. Значение переменной 7 копируется в регистр BL: mov BL, 7.
  3. Значение, находящееся в регистре BL, умножается на значение, находящееся в регистре AL, и результат сохраняется в регистре AX (расширенный регистр): mul BL.
  4. Значение переменной B копируется в регистр BL: mov BL, B.
  5. Значение, находящееся в регистре BL, умножается на значение, находящееся в регистре AX, и результат сохраняется в регистре AX: mul BL.
  6. Значение, находящееся в регистре AX, вычитается из значения, находящегося в регистре BX, и результат сохраняется в регистре BX: sub BX, AX.
  7. Значение переменной A копируется в регистр AL: mov AL, A.
  8. Значение, находящееся в регистре AL, умножается на само себя, и результат сохраняется в регистре AX: mul AL.
  9. Значение, находящееся в регистре AX, сдвигается влево на 4 бита: shl AX, 4.
  10. Регистр DX обнуляется: xor DX, DX.
  11. Значение, состоящее из соединения значений, находящихся в регистрах AX и DX, делится на значение переменной B, и результат сохраняется в регистре AX: div BX.
  12. Значение, находящееся в регистре AX, копируется в переменную Y: mov Y, AX.

Оцени полезность:

7   голосов , оценка 4 из 5