我有一个程序,它接受用户的2位数输入,但我不明白为什么如果AL <= 9则跳转到JUMP01,否则减去7
INPUT PROC NEAR
MOV AH,01
INT 21H
SUB AL,30H
CMP AL,09
JBE JUMP01
SUB AL,07H
JUMP01:
MOV DL,AL
SHL DX,4
MOV AH,01
INT 21H
SUB AL,30H
CMP AL,09
JBE JUMP02
SUB AL,07H
JUMP02:
ADD DL,AL
RET
INPUT ENDP
答案 0 :(得分:1)
您不必担心,此代码只读取十六进制,假设大写字母,并且不检查键入的任何其他字符。
它首先减去'0',所以如果是数字,你将得到一个结果le 9。
如果没有,它假定你键入'A'..'F',(0x41..0x46),因此减去7以得到正确的结果0x0a..0x0f
答案 1 :(得分:0)
此代码正在读取十六进制中的2位数字。减法的原因是字母A
到F
应该映射到范围10
到15
(十进制)。 A
的ascii代码为65,48
(sub al, 30h
)减少17,并从那里到达10
,它必须进一步减少7
。这也适用于其他字母。