2014-11-19 4 views
0

У меня есть процедура, которая принимает 2-значный ввод от пользователя, но я не понимаю, почему происходит переход на JUMP01, если AL < = 9 и в противном случае 7 вычитаютсяПроцедура языка ввода для ввода 2-значного ввода от пользователя

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

Этот код читает 2-значное число в hexadecimal. Причиной вычитания является то, что буквы A через F должны быть отображены в диапазон 10 по 15 (десятичный). Код ascii A равен 65, который уменьшается на 48 (sub al, 30h), оставляя 17, и чтобы добраться до 10, он должен быть уменьшен еще на 7. Это работает и для других писем.

+0

Thankyou так много. Японял твою точку зрения. – Anonymous

1

Вам не нужно беспокоиться, этот код просто читает шестигранник, предполагают заглавные буквы и не проверяет, о каких-либо других символах типизированных.

Это первый вычитает '0', так что в случае цифры вы будете иметь результат ле 9.

Если нет, то это подразумевает, что вы набрали 'A' .. 'F', (0x41..0x46), и поэтому вычитает 7, чтобы получить правильный результат 0x0a..0x0f

Смежные вопросы