org 100h

start:
	mov	ah, 9
	mov dx, info
	int 21h
	

	xor	bx, bx	;miejsce na liczbę
l_pentla:
	
	;call	far _we_z	;pobierz znak z klawiatury
	mov ah, 01h
	int	21h
	
	cmp		al, 0dh		;czy Enter?
	je		l_juz			;jesli tak to wychodzimy
	
	cmp	al, 20h		;przepuszczam spacje
	je		l_pentla
	
	cmp	al, '0'		;jesli nie cyfra to błąd
	jb		l_blad
	cmp	al, '9'
	ja		l_blad
	
	and	al, 0fh		;izolujemu wartosc (sub al, '0')
	mov	cl, al
	
	mov	ax, bx
	
	shl	bx, 1			;miejsce na nowa cyfre
	jc		l_blad
	
	shl	ax, 1
	jc		l_blad
	shl	ax, 1
	jc		l_blad
	shl	ax, 1
	jc		l_blad
	
	add	bx, ax		;bx=bx*10- bieżąca liczbę mnożymy przez 10
	jc		l_blad
	
	add	bl, cl			;dadajemy cyfrę
	adc	bh, 0
	jc		l_blad		;jeśli przekroczymy limit, to błąd
	
	jmp	short l_pentla
	
l_juz:
	; wynik w AX
	
wyswietl:
	;mov ax, [liczba]
	xor	dx, dx
	mov	cx, 10000
	div	cx
	or	al, '0'
	;wyswietl AL jako znak
	mov	ax, dx
	xor	dx, dx
	mov cx, 1000
	div	cx, 
	or	al, '0'
	;wyswietl AL  jako znak
	mov	ax, dx
	mov	cl, 100
	div 	cl
	or	al, '0'
	;wyswietl AL jako znak
	mov	al, ah
	xor	ah, ah
	mov cl, 10
	div	cl
	or	ax, '00'
	;wyswietl AL jako znak
	;potem wyświetl AH jako znak
	
	mov ah, 9
	mov dx,  ax
	int 21h
	
	mov ah, 9
	;;mov dx,  ah
	int 21h
	
l_blad:
	mov	ah, 9
	mov dx, info
	int 21h
stop:		
		
		mov	ax, 4C00h	;EXIT
		int	21h			;wywołanie DOS
		
		info db "Czesc.$"
		
		
		
	
	
	