Ошибка при вычислении выражения (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.