Ошибка при вычислении выражения (Pascal+Assembler)
Формулировка задачи:
Здравствуйте, помогите написать программу на ассемблере встроенном в паскаль. Задание У=(2А^3-4А^2)/B^2. Необходима версия для знаковых и без знаковых чисел. Сам посидел. разобраться не смог. С виду просто а выдает не понятно что. судя по всему напутал что-то в регистрах. но не понимаю что.
вот код до которого смог дойти сам, в конце выдает ошибку "деление на ноль" как я понял, по причине того что результат не укладывается в байт. как исправить не знаю. да и почему так происходит тоже:
program qq; var A,B:byte; Y: word; Begin reabln (a,b); asm mov al, a imul a mov cx, ax mov al, a imul cx shl ax, 1 mov bx, ax shl cx, 2 xor ax, ax mov al, b imul b mov dx, ax mov ax, bx sub ah, ch sbb al, cl idiv dx mov y, ax ens; writeln (Y); end.
Решение задачи: «Ошибка при вычислении выражения (Pascal+Assembler)»
textual
Листинг программы
mov al,b mul al; AX=b*b mov bx,ax xor cx,cx mov cl,a sub cx,2; CX=a-2 mov al,a mul al; AX=a*a add ax,ax; AX=2*a*a mul cx; dx:ax=(a-2)*2*a*a div bx; ax=(a-2)*2*a*a/(b*b) mov y,ax
Объяснение кода листинга программы
- Переменная
al
содержит значениеb
, а переменнаяah
содержит значениеa
. - Результат умножения
al
наb
сохраняется вax
. - Переменная
bx
содержит значениеa*a
. - Переменная
cx
инициализируется значениемa
. - Результат вычитания
2
изcx
сохраняется вax
. - Переменная
al
снова содержит значениеa
. - Результат умножения
al
наa
сохраняется вax
. - Результат сложения
ax
наax
сохраняется вax
. - Результат умножения
cx
наax
сохраняется вdx:ax
. - Результат деления
ax
наbx
сохраняется вax
. - Переменная
y
инициализируется значениемax
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д