iglobal
  d_itoa_digits 		db '0123456789ABCDEF', 0
endg

proc	itoa			number, radix, result_buffer, signed
  locals
    temp_buffer 		rb 32+1
  endl
	push	esi edi ebx
	mov	esi, [radix]
	lea	edi, [temp_buffer+32]
	mov	ebx, d_itoa_digits
	std
	xor	al, al
	stosb
	mov	eax, [number]
	cmp	[signed], TRUE
	jnz	@F
	test	eax, 80000000h
	jz	@F
	neg	eax
    @@:
	xor	edx, edx
	idiv	esi
	xchg	eax, edx
	xlatb
	stosb
	xchg	eax, edx
	test	eax, eax
	jnz	@B
	lea	esi, [edi+1]
	mov	edi, [result_buffer]
	cld
	cmp	[signed], TRUE
	jnz	@F
	test	[number], 80000000h
	jz	@F
	mov	al, '-'
	stosb
    @@:
	lodsb
	stosb
	test	al, al
	jnz	@B
	pop	ebx edi esi
	ret
endp