section .text
global _start

%define		stdin		0
%define		stdout		1
%define		sys_read	3
%define		sys_write	4
%define		sys_exit	1

_start:
	
	mov	eax, sys_read		; read A
	mov	ebx, stdin
	mov	ecx, _abuff
	mov	edx, 5			; A,B <= 200 (so we need 3 bytes + 1 for LF = 4)
	int	80h

		pushfd
		push	eax
		push	ebx
		push	ecx
		push	edx
		push	esi

		xor	esi, esi
		xor	ebx, ebx
		mov	bl, 10

._a_sti:
		xor	ax, ax
		mov	al, [_abuff+esi]
		cmp	al, 13
		je	._a_end

		inc	esi
		sub	al, "0"
		mov	cl, al

		mov	al, [_a]
		mul	bl
		add	al, cl
		mov	[_a], al

		jmp	._a_sti

._a_end:

		pop	esi
		pop	edx
		pop	ecx
		pop	ebx
		pop	eax
		popfd


	mov	eax, sys_read		; read B
	mov	ebx, stdin
	mov	ecx, _bbuff
	mov	edx, 5
	int	80h

		pushfd
		push	eax
		push	ebx
		push	ecx
		push	edx
		push	esi

		xor	esi, esi
		xor	ebx, ebx
		mov	bl, 10

._b_sti:
		xor	ax, ax
		mov	al, [_bbuff+esi]
		cmp	al, 13
		je	._b_end

		inc	esi
		sub	al, "0"
		mov	cl, al

		mov	al, [_b]
		mul	bl
		add	al, cl
		mov	[_b], al

		jmp	._b_sti

._b_end:

		pop	esi
		pop	edx
		pop	ecx
		pop	ebx
		pop	eax
		popfd


	xor	ax, ax			; 0 to register
	xor	bx, bx			; 0 to register
	mov	al, [_a]
	mov	bl, [_b]
	add	ax, bx			; ax = A + B

	call	_pr_ax
	call	_pr_lf

	mov	eax, sys_exit		; sys_exit
	mov	ebx, 0			; exit code
	int	80h

_pr_ax:
	pushfd
	push	eax
	push	ebx
	push	edx
	push	esi

	xor	esi, esi
	mov	bx, 10		; przez 10 będziemy dzielić

._div_more:
	xor	dx, dx
	div	bx
	add	dl, "0"			; add "0"
	mov	[_rbuff+esi], dl
	inc	esi
	xor	dl, dl
	cmp	ax, dx
	jne	._div_more

	xor	ecx, ecx

._reverse:
	dec	esi
	mov	al, [_rbuff+esi]
	mov	[_prbuff+ecx], al
	inc	ecx
	cmp	esi, 0
	jnz	._reverse

	mov	esi, ecx

	mov	eax, sys_write
	mov	ebx, stdout
	mov	ecx, _prbuff
	mov	edx, esi
	int	80h

	pop	esi
	pop	edx
	pop	ebx
	pop	eax
	popfd

	ret

_pr_lf:
	pushfd
	push	eax
	push	edi
	push	esi
	push	edx

	mov	eax, sys_write
	mov	ebx, stdout
	mov	ecx, _lf
	mov	edx, 1
	int	80h

	pop	edx
	pop	esi
	pop	edi
	pop	eax
	popfd

	ret

section .data
	_abuff		times	5	db	0
	_bbuff		times	5	db	0
	_rbuff		times	4	db	0
	_prbuff		times	4	db	0
	_lf	db	10
	_a	db	0
	_b	db	0
	_len	db	0
