Ошибочка у тебя в коде,
Sashok: "вычесть А" - этого мало, надо еще 10 добавить. То же и для "а".
Накидал немного:
; 16bit
; IN{ SI=ASCIIZ
; OUT{ AX
hex2int{
push bx
push si
xor bx,bx
hex2int_1{
lodsb
test al,al
jz hex2int_exit
cmp al,30h
jc hex2int_exit
cmp al,3ah
jc hex2int_2
and al,0dfh ; reset bit 5 )small2BIG:
cmp al,41h
jc hex2int_exit
cmp al,47h
jnc hex2int_exit
sub al,7
hex2int_2{
sub al,30h
shl bx,4
or bl,al
jmp hex2int_1
hex2int_exit{
mov ax,bx
pop si
pop bx
ret