	assume	cs:cseg,ds:dseg,ss:sseg

cseg	segment
start:
	mov	ax,dseg
	mov	ds,ax
	;-
	mov	dx,offset msg
	mov	ah,09h
	int	21h
	;-
	mov dx,offset buff
	mov ah,0Ah			; buffered input (check: http://www.ctyme.com/intr/rb-2563.htm)
	int 21h
	;-
	mov	dx,offset CRLF
	mov	ah,09h
	int	21h
	;-
	; now [buff+1] = number length *i.e (1234) = 4*
	; and [buff+2] = offset of actual number
	mov si,offset buff	; si = [buff]
	add si,2			; si = [buff+2]
	mov bl,5
@@:
	cmp byte ptr [si],0Dh
	je	@F
	sub [si],30h
	xor ax,ax
	mov al,[si]
	mul	bl
	mov dx,offset bin
	add dx,ax
	mov ah,09h
	int 21h
	inc	si
	jmp	@B
@@:
	;-
	mov	ax, 4C00h
	int	21h
cseg	ends

dseg	segment	byte
msg		db	'enter a number: ','$'
CRLF	db	0Dh,0Ah,'$'
buff	db	6,7 dup (0)	; offset	size		desc
						; ------	----		----
						; 00h		byte		max char buffer *can hold* in other words capacity (including CarriageReturn)
						; 01h		byte		actual (n) chars read (excluding CarriageReturn)
						; 02h		n Bytes		actual chars read (including CarriageReturn)
						; --------------------------
						; so here I have:
						; 6,x,nnnnnn
						;
						; ^---- max capacity w/ CR (5 digits + CR)
						;   ^---- actual (n) chars read w/o CR
						;     ^^^^^^---- actual chars read w/ CR
						;   ^^^^^^^^
						;    7 bytes filled with zeros *db	7 dup (0)* (offset 01h byte + 5 digits + CR)
bin		db	'0000','$'	; 0
		db	'0001','$'	; 1
		db	'0010','$'	; 2
		db	'0011','$'	; 3
		db	'0100','$'	; 4
		db	'0101','$'	; 5
		db	'0110','$'	; 6
		db	'0111','$'	; 7
		db	'1000','$'	; 8
		db	'1001','$'	; 9
dseg	ends

sseg	segment	stack
	db	100h dup (?)
sseg	ends

end	start
