Печать шестнадцатеричных значений в сборке x86
Мне нужно сделать процедуру, которая преобразует адрес памяти в строку байтов. Затем эта строка будет входом для функции, которая печатает строки с нулевым символом в конце (что я уже смог сделать). Например, если у меня есть адрес 0x1bf9, мне нужно вывести текст «1bf9» на экран. Книга еще не перешла в 32-битный режим, но намекнула, что она нам тоже понадобится. Это то, что я до сих пор:
TABLE:
db "0123456789ABCDEF", 0
STRING:
db 0
hex_to_char:
lea bx, TABLE
mov ax, dx
mov ah, al ;make al and ah equal so we can isolate each half of the byte
shr ah, 4 ;ah now has the high nibble
and al, 0x0F ;al now has the low nibble
xlat ;lookup al's contents in our table
xchg ah, al ;flip around the bytes so now we can get the higher nibble
xlat ;look up what we just flipped
inc STRING
mov [STRING], ah ;append the new character to a string of bytes
inc STRING
mov [STRING], al ;append the new character to the string of bytes
ret