;; rax contains the integer ;; rbx contains a pointer to the string buffer itoa: ;; Special case for the number '0' cmp rax, 0 jne .not_zero mov byte [rbx], '0' mov byte [rbx + 1], 0 ret .not_zero: mov rdx, 0 mov rcx, 100000 div rcx add rax, '0' mov [rbx], al mov rax, rdx mov rdx, 0 mov rcx, 10000 div rcx add rax, '0' mov [rbx + 1], al mov rax, rdx mov rdx, 0 mov rcx, 1000 div rcx add rax, '0' mov [rbx + 2], al mov rax, rdx mov rdx, 0 mov rcx, 100 div rcx add rax, '0' mov [rbx + 3], al mov rax, rdx mov rdx, 0 mov rcx, 10 div rcx add rax, '0' mov byte [rbx + 4], al add dl, '0' mov byte [rbx + 5], dl ;; Time to shift everything left ;; End the current string with a null byte mov byte [rbx + 6], 0 .shift_left_loop: cmp byte [rbx], '0' jne .done mov rcx, rbx inc rcx mov rdx, [rcx] and rdx, 255 mov [rbx], dx inc rcx mov rdx, [rcx] and rdx, 255 mov [rbx + 1], dx inc rcx mov rdx, [rcx] and rdx, 255 mov [rbx + 2], dx inc rcx mov rdx, [rcx] and rdx, 255 mov [rbx + 3], dx inc rcx mov rdx, [rcx] and rdx, 255 mov [rbx + 4], dx inc rcx mov rdx, [rcx] and rdx, 255 mov [rbx + 5], dx jmp .shift_left_loop .done: ret