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

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

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

	! argument in ax
printc:
	push	ax
	mov	bx,sp
	mov	ax,1
	push	ax
	push	bx
	push	ax
	call	_write
	pop	bx
	pop	bx
	pop	bx
	pop	bx
	ret