.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
答案 0 :(得分:1)
进气部分有许多多余的指示,无法计算你所做的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已经说过的那样,输出将是相反的。这可能不是你的意图。然而,要做到这一点,使用堆栈不是最佳解决方案。最好使用简单的内存缓冲区。