Вычислить выражение - Assembler

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

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

Добрый день, помогите с проблемой. Выражение znam=(bbbS-aaaS*9/2) Вот код:
mov al, aaaS
    mov bl, 9
    mul bl
    cwd
    mov bx,2
    div bx
    mov cx, ax
    mov al, bbbS
    cbw
    sub ax, cx
    mov znam, ax
aaaS=200 bbbS=200 Результат после деления получается 900(проверял работу программы), и в последнем действии мне необходимо вычесть 200-900, в итоге программа выдает znam=-956, а должно быть -700. В чем может быть проблема?
После cbw значение переменной bbbs становиться -56, не понимаю, каким образом. К слову, тип данных переменных byte.

Решение задачи: «Вычислить выражение»

textual
Листинг программы
        mov ah,0
    mov al, 44
    mov bl, bbbS
    mul bl          
    div aaaS;
    add al, 1
        cbw
        cwd
        mov word ptr shisl,ax
    mov word ptr shisl+2,dx

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

  1. Переменная ah инициализируется значением 0.
  2. Переменная al инициализируется значением 44.
  3. Переменная bl инициализируется значением bbbS.
  4. Происходит операция умножения: al умножается на bl.
  5. Происходит операция деления: результат предыдущей операции делится на aaaS.
  6. К переменным al прибавляется 1.
  7. Происходит преобразование регистра al в слово (сдвиг вправо на 16 бит).
  8. Происходит преобразование регистра ah в слово (сдвиг вправо на 16 бит).
  9. Данные из регистра ax записываются по адресу shisl.
  10. Данные из регистра dx записываются по адресу shisl+2.

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


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

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

12   голосов , оценка 3.833 из 5