Ошибка при вычислении выражения (Pascal+Assembler)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, помогите написать программу на ассемблере встроенном в паскаль. Задание У=(2А^3-4А^2)/B^2. Необходима версия для знаковых и без знаковых чисел. Сам посидел. разобраться не смог. С виду просто а выдает не понятно что. судя по всему напутал что-то в регистрах. но не понимаю что. вот код до которого смог дойти сам, в конце выдает ошибку "деление на ноль" как я понял, по причине того что результат не укладывается в байт. как исправить не знаю. да и почему так происходит тоже:
Листинг программы
  1. program qq;
  2. var A,B:byte;
  3. Y: word;
  4. Begin
  5. reabln (a,b);
  6. asm
  7. mov al, a
  8. imul a
  9. mov cx, ax
  10. mov al, a
  11. imul cx
  12. shl ax, 1
  13. mov bx, ax
  14. shl cx, 2
  15. xor ax, ax
  16. mov al, b
  17. imul b
  18. mov dx, ax
  19. mov ax, bx
  20. sub ah, ch
  21. sbb al, cl
  22. idiv dx
  23. mov y, ax
  24. ens;
  25. writeln (Y);
  26. end.

Решение задачи: «Ошибка при вычислении выражения (Pascal+Assembler)»

textual
Листинг программы
  1. mov al,b
  2. mul al; AX=b*b
  3. mov bx,ax
  4. xor cx,cx
  5. mov cl,a
  6. sub cx,2; CX=a-2
  7. mov al,a
  8. mul al; AX=a*a
  9. add ax,ax; AX=2*a*a
  10. mul cx; dx:ax=(a-2)*2*a*a
  11. div bx; ax=(a-2)*2*a*a/(b*b)
  12. mov y,ax

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

  1. Переменная al содержит значение b, а переменная ah содержит значение a.
  2. Результат умножения al на b сохраняется в ax.
  3. Переменная bx содержит значение a*a.
  4. Переменная cx инициализируется значением a.
  5. Результат вычитания 2 из cx сохраняется в ax.
  6. Переменная al снова содержит значение a.
  7. Результат умножения al на a сохраняется в ax.
  8. Результат сложения ax на ax сохраняется в ax.
  9. Результат умножения cx на ax сохраняется в dx:ax.
  10. Результат деления ax на bx сохраняется в ax.
  11. Переменная y инициализируется значением ax.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

14   голосов , оценка 4.071 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут