前回作成したスレッドの親切な人々によって提供された解決策に基づいて、2 桁の数字を追加することができました。
だから今、2つの数字を足したときに問題があるようで、その結果は3桁の数字になります。IS_3DIGIT という名前のジャンプはその可能性を処理しますが、80 + 80、99 + 99、89 + 82 などのいくつかの数値を加算すると、すべて間違った結果になります。56 + 77 がうまく機能します。したがって、私の仮説は、79 より大きい 2 つの数値を足すと間違った結果になるというものです。この問題を解決するにはどうすればよいですか? ところで、99 + 23 や 89 + 43 などの追加は正しい結果をもたらします。
.MODEL SMALL
.STACK 1000
.DATA
MSGA DB 13,10,"Input first number: ","$"
MSGB DB 13,10,"Input second number:","$"
MSGC DB 13,10,"The sum is: ","$"
NUM1 db ?
NUM2 db ?
NUM3 db ?
.CODE
MAIN PROC NEAR
MOV AX, @DATA
MOV DS, AX
; get first number
LEA DX, MSGA
MOV AH, 09h
INT 21h
MOV AH, 01
INT 21H
SUB AL, '0'
MOV BL, AL
MOV AH, 01
INT 21H
SUB AL, '0'
MOV CL, AL
; get second number
LEA DX, MSGB
MOV AH, 09h
INT 21h
MOV AH, 01
INT 21H
SUB AL, '0'
MOV DL, AL
MOV AH, 01
INT 21H
SUB AL, '0'
MOV DH, AL
; add
MOV AL, CL
MOV AH, BL
ADD AL, DH
AAA
ADD AH, DL
MOV NUM1, AL
ADD NUM1, '0'
; if tens digit is less than or equal to 9
CMP AH, 9
JLE NOT_3DIGIT
IS_3DIGIT:
MOV AL, AH ; move value of ah to al
SUB AH, AH ; clear ah
ADD AL, 0 ; al + 0 = al (tens digit)
AAA ; move for addition
ADD AH, 0 ; ah + 0 + 1 = ah + 1 (hundreds digit)
MOV NUM2, AL
MOV NUM3, AH
ADD NUM2, '0'
ADD NUM3, '0'
; output sum
LEA DX, MSGC
MOV AH, 09h
INT 21h
MOV DL, NUM3
MOV AH, 02H
INT 21h
MOV DL, NUM2
MOV AH, 02H
INT 21h
JMP PRINT_LASTDIGIT
NOT_3DIGIT:
MOV NUM2, AH
ADD NUM2, '0'
; output sum
LEA DX, MSGC
MOV AH, 09h
INT 21h
MOV DL, NUM2
MOV AH, 02H
INT 21h
PRINT_LASTDIGIT:
MOV DL, NUM1
MOV AH, 02H
INT 21h
EXIT:
MOV AH, 4Ch
INT 21h
MAIN ENDP
END MAIN