繁体   English   中英

汇编语言过程,需要用户输入两位数

[英]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位数。 减去的原因是字母AF应该映射到1015的范围(十进制)。 A的ascii码为65,它减少了48sub al, 30h ),剩下17,从那里到10则必须再减少7 这也适用于其他字母。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM