Drucken von Hex-Werten in einer x86-Assembly

Ich muss eine Routine machen, die eine Speicheradresse in eine Zeichenfolge von Bytes konvertiert. Diese Zeichenfolge wäre dann die Eingabe für eine Funktion, die nullterminierte Zeichenfolgen ausgibt (die ich bereits erstellen konnte). Wenn ich zum Beispiel eine Adresse 0x1bf9 habe, muss ich den Text "1bf9" auf dem Bildschirm drucken. Das Buch ist noch nicht in den 32-Bit-Modus übergegangen, aber es deutet darauf hin, dass wir es auch dafür brauchen würden. Das habe ich bisher:

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

Antworten auf die Frage(2)

Ihre Antwort auf die Frage