-2
こんにちは私は0と9の間の2つの数値を合計するために練習を書こうと思っていますが、問題はそのあと15までの結果しか得られないときは0に戻ります結果は17になります。2つの数値を合計するプログラムを書く
私は間違っていますか?
#make_COM#
; COM file is loaded at CS:0100h
ORG 100h
;*******************************
;* Programa: CONDIC4.ASM *
;*******************************
.MODEL small
.STACK 512d
.DATA
msg1 DB 'Decimal 1 (0 to 9): ', 024h
msg2 DB 0Dh, 0Ah, 'Decimal 2 (0 to 9): ', 024h
msg3 DB 0Dh, 0Ah, 'Sum = ', 024h
msg4 DB 0Dh, 0Ah, 'Invalid', 024h
.CODE
LEA DX, msg1
CALL write
CALL read
MOV BH, AL
LEA DX, msg2
CALL write
CALL read
MOV BL, AL
LEA DX, msg3
CALL write
XCHG AX, BX
ADD AL, AH
SUB AH, AH
AAA
MOV DX, AX
MOV AH, 0Eh
CMP DH, 0h
JE not_zero
OR DH, 30h
MOV AL, DH
INT 010h
not_zero:
OR DL, 30h
MOV AL, DL
INT 010h
INT 020h
write PROC NEAR
MOV AH, 09h
INT 021h
RET
write ENDP
read PROC NEAR
MOV AH, 01h
INT 021h
CMP AL, 030h
JL erro
CMP AL, 03Ah
JGE erro
SUB AL, 030h
RET
erro:
LEA DX, msg4
CALL write
INT 020h
RET
read ENDP
あなたのコードをコメントしてください。デバッガを使用する方法を学び、プログラムをシングルステップ実行し、エラーを自分で見つけることができます。 – Jester
私は単線デバッグですが、AAAコマンドを実行するとエラーが発生するのを理解できません。 – Aman
「AAA」の入力と出力として表示されるエラーを説明してください。予想される動作が何であるかは、命令セットリファレンスを参照してください。 _ "AAA命令は、ADDに従うときにのみ有効です。" _に注意してください。その間に 'SUB 'を置くと、必要なフラグが破棄されます。 – Jester