-2
Hallo Ich bin daran, eine Übung zu schreiben, um 2 Zahlen zwischen 0 und 9 zu summieren, das Problem ist, dass, wenn ich nur Ergebnisse bis zu 15 danach haben kann, zurück zu 0 wenn Das Ergebnis ist 17 Es wird angezeigt 1.Schreibe ein Programm, um 2 Zahlen zu summieren
Was mache ich falsch?
#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
Kommentieren Sie Ihren Code, besonders wenn Sie möchten, dass andere Ihnen helfen. Lernen Sie, einen Debugger zu verwenden, damit Sie Ihr Programm einzeln ausführen und den Fehler selbst finden können. – Jester
Ich bin Single-Line-Debugging, aber ich kann nicht verstehen, den Fehler, den ich bekomme, wenn ich AAA-Befehl ausführen – Aman
Beschreiben Sie den Fehler und was Sie sehen als Eingabe und Ausgabe zu 'AAA'. Konsultieren Sie den Befehlssatz Referenz, um zu sehen, was das erwartete Verhalten ist. Achten Sie auf den Teil, in dem es steht _ "Der AAA-Befehl ist nur nützlich, wenn er einem ADD folgt" _. Sie setzen einen "SUB" dazwischen und das zerstört die benötigten Flags. – Jester