Reputation: 5
I have a procedure which takes a 2-digit input from the user but I don't understand why a jump is made to JUMP01 if AL <= 9 and otherwise 7 is subtracted
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
Upvotes: 0
Views: 4088
Reputation: 58762
This code is reading a 2 digit number in hexadecimal. The reason for the subtraction is that the letters A
through F
should be mapped to the range 10
through 15
(decimal). The ascii code of A
is 65 which is reduced by 48
(the sub al, 30h
) leaving 17, and to get to 10
from there it has to be reduced by a further 7
. This works for the other letters too.
Upvotes: 0
Reputation: 4467
You don't need to worry, this code just reads hex,assumes capital Letters and does not check about any other chars typed.
It first subtracts '0', so in case of a digit you will have a result le 9.
If not, it assumes you typed 'A'..'F', (0x41..0x46),and therefore subtracts 7 to get the correct result 0x0a..0x0f
Upvotes: 1