我写这段代码来打印一个十进制整数作为用户输入,但我不明白哪一步错了?
I wrote this code to print an integer in decimal taken as user input, but I can't understand what step is wrong?
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB " Enter first number : ",0Ah,0Dh,'$'
MSG2 DB " The number is: ",0ah,0dh,'$'
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,09H
INT 21H
L1:
MOV AH,01H
INT 21H
XOR AH,AH
CMP AL,13
JE L2
MOV DX,0H
MOV DX,AX
ADD DX,30H
PUSH DX
JMP L1
L2:
LEA DX,MSG2
MOV AH,09H
INT 21H
L3: POP DX
MOV AH,02H
INT 21H
LOOP L3
MOV AH,4CH
INT 21H
END MAIN
MAIN ENDP
摄入部分有很多多余的指令,无法计算您执行的PUSH
个数。
L1:
MOV AH,01H
INT 21H
XOR AH,AH <<< Superfluous
CMP AL,13
JE L2
MOV DX,0H <<< Superfluous
MOV DX,AX <<< Superfluous
ADD DX,30H <<< Superfluous
PUSH DX
JMP L1
这是一个更好的版本:
XOR CX,CX <<< This you need
L1:
MOV AH,01H
INT 21H <<< gives AL
CMP AL,13
JE L2
PUSH AX <<< AL is already a character! No need to add 30H.
INC CX <<< This you need
JMP L1
要使用 LOOP
指令,您需要预先设置 CX 寄存器(见上文)。如果没有输入数字,CX 将为零,因此您必须对其进行测试:
JCXZ L4
L3:
POP DX <<< DL is a character
MOV AH,02H
INT 21H
LOOP L3
L4:
MOV AH,4CH
INT 21H
正如@Tommylee2k 已经指出的那样,输出将是相反的。这可能不是您的意图。然而,要做到这一点,使用堆栈并不是最佳解决方案。最好使用简单的内存缓冲区。
.MODEL SMALL
.STACK 100H
.DATA
MSG1 DB " Enter first number : ",0Ah,0Dh,'$'
MSG2 DB " The number is: ",0ah,0dh,'$'
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
LEA DX,MSG1
MOV AH,09H
INT 21H
L1:
MOV AH,01H
INT 21H
XOR AH,AH
CMP AL,13
JE L2
MOV DX,0H
MOV DX,AX
ADD DX,30H
PUSH DX
JMP L1
L2:
LEA DX,MSG2
MOV AH,09H
INT 21H
L3: POP DX
MOV AH,02H
INT 21H
LOOP L3
MOV AH,4CH
INT 21H
END MAIN
MAIN ENDP
摄入部分有很多多余的指令,无法计算您执行的PUSH
个数。
L1: MOV AH,01H INT 21H XOR AH,AH <<< Superfluous CMP AL,13 JE L2 MOV DX,0H <<< Superfluous MOV DX,AX <<< Superfluous ADD DX,30H <<< Superfluous PUSH DX JMP L1
这是一个更好的版本:
XOR CX,CX <<< This you need
L1:
MOV AH,01H
INT 21H <<< gives AL
CMP AL,13
JE L2
PUSH AX <<< AL is already a character! No need to add 30H.
INC CX <<< This you need
JMP L1
要使用 LOOP
指令,您需要预先设置 CX 寄存器(见上文)。如果没有输入数字,CX 将为零,因此您必须对其进行测试:
JCXZ L4
L3:
POP DX <<< DL is a character
MOV AH,02H
INT 21H
LOOP L3
L4:
MOV AH,4CH
INT 21H
正如@Tommylee2k 已经指出的那样,输出将是相反的。这可能不是您的意图。然而,要做到这一点,使用堆栈并不是最佳解决方案。最好使用简单的内存缓冲区。