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
c2VjdGlvbiAudGV4dApnbG9iYWwgX3N0YXJ0CgolZGVmaW5lCQlzdGRpbgkJMAolZGVmaW5lCQlzdGRvdXQJCTEKJWRlZmluZQkJc3lzX3JlYWQJMwolZGVmaW5lCQlzeXNfd3JpdGUJNAolZGVmaW5lCQlzeXNfZXhpdAkxCgpfc3RhcnQ6CgkKCW1vdgllYXgsIHN5c19yZWFkCQk7IHJlYWQgQQoJbW92CWVieCwgc3RkaW4KCW1vdgllY3gsIF9hYnVmZgoJbW92CWVkeCwgNQkJCTsgQSxCIDw9IDIwMCAoc28gd2UgbmVlZCAzIGJ5dGVzICsgMSBmb3IgTEYgPSA0KQoJaW50CTgwaAoKCQlwdXNoZmQKCQlwdXNoCWVheAoJCXB1c2gJZWJ4CgkJcHVzaAllY3gKCQlwdXNoCWVkeAoJCXB1c2gJZXNpCgoJCXhvcgllc2ksIGVzaQoJCXhvcgllYngsIGVieAoJCW1vdglibCwgMTAKCi5fYV9zdGk6CgkJeG9yCWF4LCBheAoJCW1vdglhbCwgW19hYnVmZitlc2ldCgkJY21wCWFsLCAxMwoJCWplCS5fYV9lbmQKCgkJaW5jCWVzaQoJCXN1YglhbCwgIjAiCgkJbW92CWNsLCBhbAoKCQltb3YJYWwsIFtfYV0KCQltdWwJYmwKCQlhZGQJYWwsIGNsCgkJbW92CVtfYV0sIGFsCgoJCWptcAkuX2Ffc3RpCgouX2FfZW5kOgoKCQlwb3AJZXNpCgkJcG9wCWVkeAoJCXBvcAllY3gKCQlwb3AJZWJ4CgkJcG9wCWVheAoJCXBvcGZkCgoKCW1vdgllYXgsIHN5c19yZWFkCQk7IHJlYWQgQgoJbW92CWVieCwgc3RkaW4KCW1vdgllY3gsIF9iYnVmZgoJbW92CWVkeCwgNQoJaW50CTgwaAoKCQlwdXNoZmQKCQlwdXNoCWVheAoJCXB1c2gJZWJ4CgkJcHVzaAllY3gKCQlwdXNoCWVkeAoJCXB1c2gJZXNpCgoJCXhvcgllc2ksIGVzaQoJCXhvcgllYngsIGVieAoJCW1vdglibCwgMTAKCi5fYl9zdGk6CgkJeG9yCWF4LCBheAoJCW1vdglhbCwgW19iYnVmZitlc2ldCgkJY21wCWFsLCAxMwoJCWplCS5fYl9lbmQKCgkJaW5jCWVzaQoJCXN1YglhbCwgIjAiCgkJbW92CWNsLCBhbAoKCQltb3YJYWwsIFtfYl0KCQltdWwJYmwKCQlhZGQJYWwsIGNsCgkJbW92CVtfYl0sIGFsCgoJCWptcAkuX2Jfc3RpCgouX2JfZW5kOgoKCQlwb3AJZXNpCgkJcG9wCWVkeAoJCXBvcAllY3gKCQlwb3AJZWJ4CgkJcG9wCWVheAoJCXBvcGZkCgoKCXhvcglheCwgYXgJCQk7IDAgdG8gcmVnaXN0ZXIKCXhvcglieCwgYngJCQk7IDAgdG8gcmVnaXN0ZXIKCW1vdglhbCwgW19hXQoJbW92CWJsLCBbX2JdCglhZGQJYXgsIGJ4CQkJOyBheCA9IEEgKyBCCgoJY2FsbAlfcHJfYXgKCWNhbGwJX3ByX2xmCgoJbW92CWVheCwgc3lzX2V4aXQJCTsgc3lzX2V4aXQKCW1vdgllYngsIDAJCQk7IGV4aXQgY29kZQoJaW50CTgwaAoKX3ByX2F4OgoJcHVzaGZkCglwdXNoCWVheAoJcHVzaAllYngKCXB1c2gJZWR4CglwdXNoCWVzaQoKCXhvcgllc2ksIGVzaQoJbW92CWJ4LCAxMAkJOyBwcnpleiAxMCBixJlkemllbXkgZHppZWxpxIcKCi5fZGl2X21vcmU6Cgl4b3IJZHgsIGR4CglkaXYJYngKCWFkZAlkbCwgIjAiCQkJOyBhZGQgIjAiCgltb3YJW19yYnVmZitlc2ldLCBkbAoJaW5jCWVzaQoJeG9yCWRsLCBkbAoJY21wCWF4LCBkeAoJam5lCS5fZGl2X21vcmUKCgl4b3IJZWN4LCBlY3gKCi5fcmV2ZXJzZToKCWRlYwllc2kKCW1vdglhbCwgW19yYnVmZitlc2ldCgltb3YJW19wcmJ1ZmYrZWN4XSwgYWwKCWluYwllY3gKCWNtcAllc2ksIDAKCWpuegkuX3JldmVyc2UKCgltb3YJZXNpLCBlY3gKCgltb3YJZWF4LCBzeXNfd3JpdGUKCW1vdgllYngsIHN0ZG91dAoJbW92CWVjeCwgX3ByYnVmZgoJbW92CWVkeCwgZXNpCglpbnQJODBoCgoJcG9wCWVzaQoJcG9wCWVkeAoJcG9wCWVieAoJcG9wCWVheAoJcG9wZmQKCglyZXQKCl9wcl9sZjoKCXB1c2hmZAoJcHVzaAllYXgKCXB1c2gJZWRpCglwdXNoCWVzaQoJcHVzaAllZHgKCgltb3YJZWF4LCBzeXNfd3JpdGUKCW1vdgllYngsIHN0ZG91dAoJbW92CWVjeCwgX2xmCgltb3YJZWR4LCAxCglpbnQJODBoCgoJcG9wCWVkeAoJcG9wCWVzaQoJcG9wCWVkaQoJcG9wCWVheAoJcG9wZmQKCglyZXQKCnNlY3Rpb24gLmRhdGEKCV9hYnVmZgkJdGltZXMJNQlkYgkwCglfYmJ1ZmYJCXRpbWVzCTUJZGIJMAoJX3JidWZmCQl0aW1lcwk0CWRiCTAKCV9wcmJ1ZmYJCXRpbWVzCTQJZGIJMAoJX2xmCWRiCTEwCglfYQlkYgkwCglfYglkYgkwCglfbGVuCWRiCTAK