DATAS SEGMENT
;此处输入数据段代码
SIGN DW 0
X1 DW ?
X2 DW ?
Y DW ?
RESULT DW ? ;结果
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
;输入函数
MOV CX,20
INPUT_DIGIT: MOV AH,1
INT 21H
CMP AL,0DH ;判断是否回车
JE NEXT1
CMP AL,'0'
JB INPUT_DIGIT ;小于0重新输入
CMP AL,'9'
JA A_F
JMP SAVE_DIGIT1
LOOP INPUT_DIGIT
A_F: CMP AL,'A'
JB INPUT_DIGIT
CMP AL,'F'
JA INPUT_DIGIT
SAVE_DIGIT1: POP BX ;BX出栈
CMP AL,'9'
JA SAVE_DIGIT2
SUB AL,30H ;0-9时保存
OR BX,AX
MOV X1[DI],BX
MOV CL,4
SHL BX,CL ;使BX左移4位 是为了OR BX,AX
PUSH BX
;在A-F时保存
SAVE_DIGIT2: SUB AL,37H
OR BX,AX
MOV X1[DI],BX
MOV CL,4
SHL BX,CL
PUSH BX
NEXT1: CMP SIGN,1 ;判断是否保存了X1
JE NEXT2 ;之前已经保存了X2=X1,则退出
MOV AX,X1
MOV X2,AX
INC SIGN
NEXT2: MOV AH,4CH
INT 21H
CODES ENDS
END START
Debug调试到CMP AL,'9' 就不会往下执行 JA SAVE_DIGIT2 然后就无法调试了
求解释哪里错了 ,新手不懂啊
------解决方案--------------------
弄个堆栈就行了。