Сборка emu8086: два шестнадцатеричных и двоичных числа добавить суб мул
Я получаю hex как первое число. Я получаю двоичное как второе число. программа не работает, когда я пытаюсь ввести значение за ее пределами. Причина в том, что когда я вношу двоичный код, он преобразуется в шестнадцатеричный формат. Когда я вводю здесь H для суммирования, я перехожу к @ END_1 и пишу код для преобразования двоичного кода в шестнадцатеричный. После этого, если пользователь входит в H, он должен выполнить операцию Hex. Но я не мог обеспечить этот контроль. Из-за этого программа продолжает работать вниз, пока я не введу букву.
Мой код,
.MODEL SMALL
.STACK 100H
.DATA
PROMPT_1 DB 0DH,0AH,'ilk hex veya binary sayi giriniz ( 0000 - FFFF ) : $'
PROMPT_2 DB 0DH,0AH,'ikinci hex veya binary sayi giriniz ( 0000 - FFFF ) : $'
msgCh DB 0DH,0AH,'Seciniz + Ekleme,- Cikarma,* Carpma, X Cikis: $'
PROMPT_3 DB 0DH,0AH,'Toplama Sonucu : $'
PROMPT_4 DB 0DH,0AH, 'Cikarma Sonucu : $'
PROMPT_5 DB 0DH,0AH, 'Carpma Sonucu : $'
ILLEGAL DB 0DH,0AH,'Yanli Karakter. Tekrar Deneyin.$'
COUNT DB ?
VALUE DW ?
HEXSUB DB ?
HEXADD DB ?
HEXMUL DB ?
.CODE
MAIN PROC
MOV AX, @DATA
MOV DS, AX
JMP @START_OPERANT
@START_OPERANT:
LEA DX, msgCh
MOV AH, 9
INT 21H
MOV AH, 1
INT 21H
CMP AL,"+"
JE @START_2
CMP AL,"-"
JE @START_2A
CMP AL,"*"
JE @START_2B
@START_1:
LEA DX, ILLEGAL
MOV AH, 9
INT 21H
@START_2:
LEA DX, PROMPT_1
MOV AH, 9
INT 21H
XOR BX, BX
MOV COUNT, 30H
@START_3:
MOV AH, 1
INT 21H
CMP AL, 0DH
JNE @SKIP_1
CMP COUNT, 30H
JBE @START_1
JMP @END_1
@SKIP_1:
CMP AL,'H'
JE @END_1
CMP AL, "A"
JB @DECIMAL_1
CMP AL, "F"
JA @START_1
ADD AL, 09H
JMP @OK_1
@DECIMAL_1:
CMP AL, 30H
JB @START_1
CMP AL, 39H
JA @START_1
@OK_1:
INC COUNT
AND AL, 0FH
MOV CL, 4
SHL AL, CL
MOV CX, 4
@LOOP_1:
SHL AL, 1
RCL BX, 1
LOOP @LOOP_1
CMP COUNT, 35H
JE @END_1
JMP @START_3
@END_1:
MOV VALUE, BX
LEA DX, PROMPT_2
MOV AH, 9
INT 21H
MOV CX, 9
MOV AH, 1
@LOOP_2:
INT 21H
CMP AL, 0DH
JNE @SKIP_2
CMP CX, 9
JE @START_2
JMP @END_2
@SKIP_2:
AND AL, 0FH
MOV HEXADD,BH
SHL BH, 1
OR BH, AL
LOOP @LOOP_2
@END_2:
MOV CL,HEXADD
MOV SI,CX
LEA DX, PROMPT_3
MOV AH, 9
INT 21H
ADD VALUE,SI
MOV BX,VALUE
JNC @SKIP
MOV AH, 2
MOV DL, 31H
INT 21H
@SKIP:
MOV COUNT, 30H
@LOOP_3:
XOR DL, DL
MOV CX, 4
@LOOP_4:
SHL BX, 1
RCL DL, 1
LOOP @LOOP_4
MOV AH, 2
CMP DL, 9
JBE @NUMERIC_DIGIT
SUB DL, 9
OR DL, 40H
JMP @DISPLAY
@NUMERIC_DIGIT:
OR DL, 30H
@DISPLAY:
INT 21H
INC COUNT
CMP COUNT, 34H
JNE @LOOP_3
@START_1A:
LEA DX, ILLEGAL
MOV AH, 9
INT 21H
@START_2A:
LEA DX, PROMPT_1
MOV AH, 9
INT 21H
XOR BX, BX
MOV COUNT, 30H
@START_3A:
MOV AH, 1
INT 21H
CMP AL, 0DH
JNE @SKIP_1A
CMP COUNT, 30H
JBE @START_1A
JMP @END_1A
@SKIP_1A:
CMP AL,'H'
JE @END_1A
CMP AL, "A"
JB @DECIMAL_1A
CMP AL, "F"
JA @START_1A
ADD AL, 09H
JMP @OK_1A
@DECIMAL_1A:
CMP AL, 30H
JB @START_1A
CMP AL, 39H
JA @START_1A
@OK_1A:
INC COUNT
AND AL, 0FH
MOV CL, 4
SHL AL, CL
MOV CX, 4
@LOOP_1A:
SHL AL, 1
RCL BX, 1
LOOP @LOOP_1A
CMP COUNT, 35H
JE @END_1A
JMP @START_3A
@END_1A:
MOV VALUE, BX
LEA DX, PROMPT_2
MOV AH, 9
INT 21H
MOV CX, 9
MOV AH, 1
@LOOP_2A:
INT 21H
CMP AL, 0DH
JNE @SKIP_2A
CMP CX, 9
JE @START_2A
JMP @EXIT_LOOP_2A
@SKIP_2A:
AND AL, 0FH
MOV HEXSUB,BH
SHL BH, 1
OR BH, AL
LOOP @LOOP_2A
@EXIT_LOOP_2A:
MOV CL,HEXSUB
MOV SI,CX
LEA DX, PROMPT_4
MOV AH, 9
INT 21H
SUB VALUE,SI
MOV BX,VALUE
mov dh, 2
l1: mov ch, 04h
mov cl, 04h
l2: rol bx, cl
mov dl, bl
and dl, 0fH
cmp dl, 09
jbe l4
add dl, 07
l4: add dl, 30H
mov ah, 02
int 21H
dec ch
CMP ch,0
je SON
jnz l2
dec dh
cmp dh, 0
JE SON
mov bx, si
jnz l1
mov ah, 4cH
int 21H
SON:
mov ah, 4cH
int 21H
@START_1B:
LEA DX, ILLEGAL
MOV AH, 9
INT 21H
@START_2B:
LEA DX, PROMPT_1
MOV AH, 9
INT 21H
XOR BX, BX
MOV COUNT, 30H
@START_3B:
MOV AH, 1
INT 21H
CMP AL, 0DH
JNE @SKIP_1B
CMP COUNT, 30H
JBE @START_1B
JMP @END_1B
@SKIP_1B:
CMP AL,'H'
JE @END_1B
CMP AL, "A"
JB @DECIMAL_1B
CMP AL, "F"
JA @START_1B
ADD AL, 09H
JMP @OK_1B
@DECIMAL_1B:
CMP AL, 30H
JB @START_1B
CMP AL, 39H
JA @START_1B
@OK_1B:
INC COUNT
AND AL, 0FH
MOV CL, 4
SHL AL, CL
MOV CX, 4
@LOOP_1B:
SHL AL, 1
RCL BX, 1
LOOP @LOOP_1B
CMP COUNT, 35H
JE @END_1B
JMP @START_3B
@END_1B:
MOV VALUE, BX
LEA DX, PROMPT_2
MOV AH, 9
INT 21H
MOV CX, 9
MOV AH, 1
@LOOP_2B:
INT 21H
CMP AL, 0DH
JNE @SKIP_2B
CMP CX, 9
JE @START_2B
JMP @END_2B
@SKIP_2B:
AND AL, 0FH
MOV HEXMUL,BH
SHL BH, 1
OR BH, AL
LOOP @LOOP_2B
@END_2B:
MOV CL,HEXMUL
MOV SI,CX
LEA DX, PROMPT_5
MOV AH, 9
INT 21H
MOV AX,VALUE
MUL SI
mov BX,AX
mov SI,BX
mov DI,DX
mov dh, 2
lm: mov ch, 04h
mov cl, 04h
ln: rol DI, cl
mov bx,DI
mov dl, bl
and dl, 0fH
cmp dl, 09
jbe lp
add dl, 07
lp: add dl, 30H
mov ah, 02
int 21H
dec ch
CMP ch,0
je AFTER
jnz ln
dec dh
cmp dh, 0
AFTER:
mov dh, 2
lK: mov ch, 04h
mov cl, 04h
lL: rol SI, cl
mov bx,SI
mov dl, bl
and dl, 0fH
cmp dl, 09
jbe lC
add dl, 07
lC: add dl, 30H
mov ah, 02
int 21H
dec ch
CMP ch,0
je FINISHH
jnz lL
dec dh
cmp dh, 0
JE FINISHH
mov SI, si
jnz lK
mov ah, 4cH
int 21H
FINISHH:
mov ah, 4cH
int 21H
MAIN ENDP
END MAIN