汇编语言程序,用于从用户获取2位数输入

时间:2014-11-19 19:01:48

标签: assembly input x86 hex

我有一个程序,它接受用户的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

2 个答案:

答案 0 :(得分:1)

您不必担心,此代码只读取十六进制,假设大写字母,并且不检查键入的任何其他字符。

它首先减去'0',所以如果是数字,你将得到一个结果le 9。

如果没有,它假定你键入'A'..'F',(0x41..0x46),因此减去7以得到正确的结果0x0a..0x0f

答案 1 :(得分:0)

此代码正在读取十六进制中的2位数字。减法的原因是字母AF应该映射到范围1015(十进制)。 A的ascii代码为65,48sub al, 30h)减少17,并从那里到达10,它必须进一步减少7。这也适用于其他字母。