[英]Assembly language procedure to take 2-digit input from the user
我有一个过程需要用户输入两位数,但是我不明白为什么如果AL <= 9且要减去7则跳转到JUMP01
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”,所以如果是数字,则结果为9。
如果不是,则假定您键入“ A” ..“ F”,(0x41..0x46),因此减去7得到正确的结果0x0a..0x0f
该代码正在读取十六进制的2位数。 减去的原因是字母A
到F
应该映射到10
到15
的范围(十进制)。 A
的ascii码为65,它减少了48
( sub al, 30h
),剩下17,从那里到10
则必须再减少7
。 这也适用于其他字母。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.