.sect .text; .sect .rom; .sect .data; .sect .bss
.sect .text
.define	printc,printd,prints

	! argument in eax
	! uses ebx
prints:
	xchg	eax,ebx
1:
	movb	al,(ebx)
	inc	ebx
	testb	al,al
	jz	2f
	call	printc
	jmp	1b
2:
	ret

	! argument in eax
	! uses ecx and edx
printd:
	xor	edx,edx
	mov	ecx,10
	div	ecx
	test	eax,eax
	jz	1f
	push	edx
	call	printd
	pop	edx
1:
	xchg	eax,edx
	addb	al,'0'

	! argument in eax
printc:
	push	eax
	mov	ebx,esp
	mov	eax,1
	push	eax
	push	ebx
	push	eax
	call	__write
	pop	ebx
	pop	ebx
	pop	ebx
	pop	ebx
	ret