Сложение и вычитание двух чисел с помощью операторов перехода - PullRequest
0 голосов
/ 13 марта 2020

Что должна делать эта программа

Я принимаю два числа в качестве ввода от пользователя и хочу проверить, не равны ли эти два числа нулю. Затем программа должна просто добавить их, но если первая переменная больше второй, то она должна быть вычтена из второй.

В другом случае она не должна выполнять никаких операций и запрашивать у пользователя возможная ошибка.

Вот мой код с добавлением двух чисел.

Я получаю следующие ошибки:

  • При вводе двух нулей , он просто выполняет все инструкции шаг за шагом.
  • И вычитание не выполняется.
DOSSEG
.MODEL SMALL
.STACK 100H
.DATA
VAR1 DB ?
VAR2 DB ?
MSG1 DB  'ADDITION IS : $'
MSG2 DB  'ADDITION IS NOT POSSIBLE : $'
MSG3 DB  'SUBTRACTION IS : $'
MSG4 DB  'SUBTRACTION IS NOT POSSIBLE : $'
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS ,AX

MOV AH ,1
INT 21H
MOV VAR1 ,AL
MOV AH, 1
INT 21H
MOV VAR2 ,AL
CMP VAR2,0
JNE J1
JE J3

J1:
CMP VAR1,0
JNE J2
JE J4
J2:
MOV DX ,OFFSET MSG1
MOV AH,9
INT 21H

MOV DL,VAR2
ADD  DL,VAR1
SUB DL,48
MOV AH,2
INT 21H

MOV  DL,VAR1

JMP L5
JE L8
L5:
MOV DX ,OFFSET MSG3
MOV AH,9
INT 21H
MOV BL,VAR2
SUB DL,BL
ADD DL,48
MOV AH,2
INT 21H
JMP J9
L8:
MOV DX ,OFFSET MSG4
MOV AH,9
INT 21H
JMP J9
J3:
MOV DX ,OFFSET MSG2
MOV AH,9
INT 21H
JMP J9

J4:
MOV DX ,OFFSET MSG2
MOV AH,9
INT 21H
JMP J9

J9:
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
...