Уравнение, результат неверен - Assembler

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

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

Расчет уравнения s=2+6(1-e/2-j) Я делаю лабу, тема - изучении эмулятора emu 8086 и как видно из скрина s=0) Помогите понять почему значение переменной s остается равной нулю) Ну или может я что-то не понимаю, тогда объясните в чем я ошибаюсь)
org 100h
 
segment para
assume DS:segc, CS:segc, SS:segc
org 100h
start:
e db 20
j db 2
s db 0
 
mov AL,e
mov CL,1
SAR AL,CL
mov BL,j
sub AL,BL
mov BL,1
sub BL,AL
mov AL,BL
mov CL,2
SAL AL,CL
mov CL,1
SAL BL,CL 
add AL,BL
mov s, AL
mov AX, 4c00h
int 21h  
end start
segc ends
 
ret

Решение задачи: «Уравнение, результат неверен»

textual
Листинг программы
start:
mov AL,e
SAR AL,1; AL=e/2
add AL,j; AL=e/2+j
dec AL; AL=e/2+j-1
mov BL,-6
imul BL; AX=6*(1-e/2-j)
add AX,2
mov s, AX;s=2+6(1-e/2-j)
mov Ah, 4Ch
int 21h  
e db 20
j db 2
s dw ?
end start

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

  1. Переменная «e» содержит значение 20.
  2. Переменная «j» содержит значение 2.
  3. Код выполняет деление переменной «e» на 2 и сохраняет результат в регистре AL.
  4. К результату деления переменной «e» на 2 прибавляется переменная «j», и результат сохраняется в регистре AL.
  5. Результат в регистре AL уменьшается на единицу.
  6. Переменная «s» будет содержать результат вычисления (20/2 + 6*(1-20/2-2)).
  7. На экран выводится сообщение об ошибке.

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


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

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

8   голосов , оценка 4.375 из 5
Похожие ответы