怎么输入一个十六进制数

如何输入一个十六进制数?
目前只知道用0AH号功能将其当做字符串输入,但是要对其进行运算就很麻烦,如何直接输入一个十六进制数(不超过四位)?

------解决方案--------------------
无论你输入的是什么,cpu都把他转换成二进制存在内存中。我这里有一个早以前我的一个练习。你烟酒一下

Assembly code
assume    cs:code,ds:data,ss:stack
data    segment
msg1    db    'Choice digit type:[1]Hex [2]Dec [3]Oct [4]Bin:$'
msg2    db    'Input switch type:[1]Hex [2]Dec [3]Oct [4]Bin:$'
msg3    db    'Input :$'
msg4    db    'Result:$'
var1    db    0
var2    db    0
buff    db    16 dup (0)
error    db    'Invalid number or Out of compass !$'
tab1    dw    10000,1000,100,10,1
tab2    dw    4096,512,64,8,1
tab3    dw    8000h,4000h,2000h,1000h,800h,400h,200h,100h,80h,
        40h,20h,10h,8h,4h,2h,1h
sum    dw    0
data    ends
stack    segment stack
    dw 128 dup (0)
stack    ends
code    segment
start:
    mov ax,data
    mov ds,ax
;------------------------------------------------;
    mov dx,offset msg1
    mov ah,9
    int 21h
    mov ah,1
    int 21h
    cmp al,0dh
    jz _err
    cmp al,'1'
    jb _err
    cmp al,'4'
    ja _err
    mov var1,al    
    call crlf
;------------------------------------------------;
    mov dx,offset msg2
    mov ah,9
    int 21h
    mov ah,1
    int 21h
    cmp al,0dh
    jz _err
    cmp al,'1'
    jb _err
    cmp al,'4'
    ja _err    
    mov var2,al
    call crlf
;------------------------------------------------;
    mov dx,offset msg3
    mov ah,9
    int 21h
;
    cmp var1,31h
    jz inhex
    cmp var1,32h
    jz indec
    cmp var1,33h
    jz inoct
    cmp var1,34h
    jz inbin
    jmp _err
;------------------------------------------------;
;
;check hex-input
;
inhex:    
    mov cx,4
    mov di,offset buff
_inhex:
    mov ah,1
    int 21h
    cmp al,0dh
    jz none
    cmp al,'0'
    jb _err
    cmp al,'9'
    ja d
;    sub al,30h
    jmp jx1
d:    
    cmp al,'A'
    jb _err
    cmp al,'F'
    ja x
;    sub al,37h
    jmp jx1
x:    
    cmp al,'a'
    jb _err
    cmp al,'f'
    ja _err
;    sub al,57h
jx1:    
    mov [di],al
    inc di
    dec cx
    jcxz ol1
    jmp _inhex
ol1:
    jmp a2h
;------------------------------------------------;
;
;check dec-input
;
indec:    
    mov si,0
    mov cx,5
    mov di,offset buff
_indec:
    mov ah,1
    int 21h
    cmp al,0dh
    jz ol2
    cmp al,'0'
    jb _err
    cmp al,'9'
    ja _err
    sub al,30h
    mov [di],al
    inc di
    inc si
    dec cx
    jcxz ol2
    jmp _indec
ol2:
    jmp d2h
;------------------------------------------------;
;check oct-input
;
inoct:    
    mov si,0
    mov cx,5
    mov di,offset buff
_inoct:
    mov ah,1
    int 21h
    cmp al,0dh
    jz ol3
    cmp al,'0'
    jb _err
    cmp al,'8'
    ja _err
    sub al,30h
    mov [di],al
    inc di
    inc si
    dec cx
    jcxz ol3
    jmp _inoct
ol3:
    jmp o2h
;------------------------------------------------;
;check bin-input
;
inbin:    
    mov si,0
    mov cx,16
    mov di,offset buff
_inbin:
    mov ah,1
    int 21h
    cmp al,0dh
    jz ol4
    cmp al,'0'
    jb _err
    cmp al,'1'
    ja _err
    sub al,30h
    mov [di],al
    inc di
    inc si
    dec cx
    jcxz ol4
    jmp _inbin
ol4:
    jmp b2h    
;------------------------------------------------;
a2h:
    mov cx,12
    mov si,offset buff
    xor dx,dx
load:    
    mov al,[si]
    cmp al,0
    jz ok1
    inc si
    cmp al,40h
    jb sz
    cmp al,47h
    jb zd
    cmp al,67h
    jb zx
sz:    
    sub al,30h
    mov ah,0
    shl ax,cl
    add dx,ax
    sub cx,4
    jmp a2hjx
zd:
    sub al,37h
    mov ah,0
    shl ax,cl
    add dx,ax
    sub cx,4
    jmp a2hjx
zx:    
    sub al,57h
    mov ah,0
    shl ax,cl
    add dx,ax
    sub cx,4
a2hjx:    
    cmp cx,0fffch
    jz ok1
    jmp load
ok1:    push dx
    jmp show
;------------------------------------------------;
d2h:        
    mov bx,offset buff
    add bx,si
    dec bx
    mov di,offset tab1
    add di,8
    mov cx,si    
shijia:    
    mov al,[bx]
    xor ah,ah
    mul word ptr [di]
    add sum,ax
    jc _err
    sub di,2
    dec bx
    loop shijia
    push word ptr sum
    jmp show
;------------------------------------------------;
o2h:
    mov bx,offset buff
    add bx,si
    dec bx
    mov di,offset tab2
    add di,8
    mov cx,si
bajia:    
    mov al,[bx]
    xor ah,ah
    mul word ptr [di]
    add sum,ax
    jc _err
    sub di,2
    dec bx
    loop bajia
    push word ptr sum
    jmp show
;------------------------------------------------;
b2h:
    mov bx,offset buff
    add bx,si
    dec bx
    mov di,offset tab3
    add di,30
    mov cx,si
erjia:
    mov al,[bx]
    xor ah,ah
    mul word ptr [di]
    add sum,ax
    jc _err
    sub di,2
    dec bx
    loop erjia
    push word ptr sum
    jmp show
;------------------------------------------------;
show:    call crlf
    mov dx,offset msg4
    mov ah,9
    int 21h
    cmp var2,31h
    jz _hex
    cmp var2,32h
    jz _dec
    cmp var2,33h
    jz _oct
    cmp var2,34h
    jz _bin
_hex:    
    pop dx
    call disphex
    jmp over
_dec:    
    pop dx
    call dispdec
    jmp over
_oct:    
    pop dx
    call dispoct
    jmp over
_bin:
    pop dx
    call dispbin
    jmp over
    
;------------------------------------------------;
none:    
    cmp si,0
    jz over
_err:    call crlf
    mov dx,offset error
    mov ah,9
    int 21h

over:    mov ah,4ch
    int 21h
;
crlf    proc
    mov ah,2
    mov dl,0dh
    int 21h
    mov dl,0ah
    int 21h
    ret
crlf    endp
;
err    proc
    mov dx,offset error
    mov ah,9
    int 21h
    ret
err    endp
;
disp    proc
    mov dx,offset msg4
    mov ah,9
    int 21h
    ret
disp    endp
;
;input:dx
disphex    proc uses dx
    mov cx,4
d1:    push cx
    mov cl,4
    rol dx,cl
    push dx
    and dx,0fh
    cmp dl,10
    jb d10
    add dl,37h
    mov ah,2
    int 21h
    jmp jx2
d10:    add dl,30h
    mov ah,2
    int 21h
jx2:    pop dx
    pop cx
    loop d1
    mov dl,'H'
    mov ah,2
    int 21h
    call crlf
    ret
disphex    endp
;
;input:dx
dispdec    proc uses dx
    mov ax,dx
    xor dx,dx
    mov bx,10
    mov cx,0
d2:    cmp ax,10
    jb ok2
    div bx
    add dl,30h
    push dx
    xor dx,dx
    inc cx
    jmp d2
ok2:    add al,30h
    push ax
    inc cx<F12>
d3:    pop dx
    mov ah,2
    int 21h
    loop d3
    mov dl,'D'
    mov ah,2
    int 21h
    call crlf
    ret
dispdec    endp
;
;input:dx
dispoct    proc uses dx
    mov bx,8
    mov cx,0
    mov ax,dx
    xor dx,dx
d3:    cmp ax,8
    jb ok3
    div bx
    add dl,30h
    push dx
    xor dx,dx
    inc cx
    jmp d3
ok3:    add al,30h
    push ax
    inc cx
d4:    pop dx
    mov ah,2
    int 21h
    loop d4
    mov dl,'Q'
    mov ah,2
    int 21h
    call crlf
    ret
dispoct    endp
;
;input:dx
dispbin    proc 
    mov cx,16
    mov ax,dx
    xor dx,dx
d5:    rol ax,1
    adc dl,0
    push ax
    add dl,30h
    mov ah,2
    int 21h
    xor dx,dx
    pop ax
    loop d5
    mov dl,'B'
    mov ah,2
    int 21h
    ret
dispbin    endp
;
code    ends
end    start