; value in eax on entry
; pointer to buffer in ebx
; preserves all registers and flags
itoa:
; start by storing all registers
push eax
push ebx
push ecx
pushfd
; set up loop counter
mov ecx, 8
startloop:
; get next 4 bits into LSBs of EAX
rol eax, 4
; store progress
push eax
; mask into a single nibble
and eax, 0Fh
; shift into ASCII digits range
add eax, 30h
; if it's above 39h we need to add another 7 to make it alpha range
cmp eax, 39h
jna digits_range
add eax, 7
digits_range:
; store character
mov [ebx], al
; next buffer location
inc ebx
; restore progress
pop eax
; decrement loop counter
dec ecx
; if we still have work to do, go back and do it
jnz startloop
endloop:
; restore registers
popfd
pop ecx
pop ebx
pop eax
retn