S
konvertierungen dieser art kann man auch mit substitution realisieren (mit hilfe von xlatb). ist der wertebereich recht gering (wie bei konvertierungen von zahlen zu chars) spricht auch nichts dagegen die substititionstabelle im codesegment zu integrieren. der vorteil dieser methode ist der geringe rechenaufwand. hier ein beispiel um ein beliebiges byte als char in hexdarstellung (also "00" bis "FF") zu konvertieren.
mov bx, $+0x10
mov ah, al
shr ah, 0x04
and al, 0x0F
xlatb
xchg al, ah
xlatb
jmp $+0x12
db 0x30
db 0x31
db 0x32
db 0x33
db 0x34
db 0x35
db 0x36
db 0x37
db 0x38
db 0x39
db 0x41
db 0x42
db 0x43
db 0x44
db 0x45
db 0x46
wie man sehen kann definiere ich die zeichen "0" bis "F" mittels db im codesegment. man beachte das '$', welches eine nasm/yasm erweiterung ist. der assembler ersetzt dieses mit der aktuellen adresse im codesegment.
das umzuwandelnde byte wird in al erwartet, das ergebnis ist in ax.
edit: oh ja, der code kommt aus einem kleinen testprojekt von mir, welches im realmode des prozessors ausgeführt wird. daher das 16 bit bx register. im 32/64bit mode erwartet xlatb die adresse der substitutionstabelle entsprechend in ebx, bzw. rbx.