Friday, August 25, 2006

Bin to hex converter in 16-bit DOS assembly

Just a quick code like putting your keyboard where your brain is. There should be another way of doing this. I hate this code.



start:
xor al, al
xor bl, bl
xor cl, cl
mov dl, 4 ; use dl as counter

input:
mov ah, 00
int 16h
cmp ah, 1ch
je exit
cmp al, '0'
jb input
cmp al, '1'
ja input

convert:
mov cl, dl
dec cl ; dl - 1
sub al, 30h ; get original value
shl al, cl ; place in the appropriate bit position
or bl, al ; save in bl
dec dl ; prepare for the next bit
jnz input ; must be 4 bits
cmp bl, 9
ja letter
jbe number

letter:
add bl, 37h ; because 'A' - 37h is 0Ah
jmp here

number:
add bl, 30h ; because '0' - 30h is 00h

here:
call display
jmp start

display:
mov ah, 02h
mov dl, bl
int 21h
ret

exit:
int 20h

Try this out, get the assembler here.

No comments: