; receiving the data in 'dx' ; For the examples we'll assume that we're called with dx=0x1234 print_hex: pusha mov cx, 0 ; our index variable ; Strategy: get the last char of 'dx', then convert to ASCII ; ASCII values: '0' (ASCII 0x30) to '9' (0x39), so just add 0x30 to byte N. ; Then, move the ASCII byte to the correct position on the resulting string loop: cmp cx, 4 ; loop 4 times je end ; 1. convert last char of 'dx' to ascii mov ax, dx ; we will use 'ax' as our working register and ax, 0x000f ; 0x1234 -> 0x0004 by masking first three to zeros add ax, 0x30 ; add 0x30 to N to convert it to ASCII "N" ; 2. get the correct position of the string to place our ASCII char ; bx <- base address + string length - index of char mov bx, HEX_OUT + 5 ; base + length sub bx, cx ; our index variable or [bx], ax ; copy the ASCII char on 'ax' to the position pointed by 'bx' ror dx, 4 ; 0x1234 -> 0x4123 -> 0x3412 -> 0x2341 -> 0x1234 ; increment index and loop add cx, 1 jmp loop end: ; prepare the parameter and call the function ; remember that print receives parameters in 'bx' mov bx, HEX_OUT call print popa ret HEX_OUT: db '0x0000',0 ; reserve memory for our new string