extern io_get_udec, io_print_udec
section .bss
prev resd 1
prevprev resd 1
count resd 1
system resd 1
section .text
global weirdFunc
weirdFunc:
push ebp
mov ebp, esp
mov ebx, dword [ebp + 8]
mov esi, dword [ebp + 12]
mov edi, dword [ebp + 16]
sub esp, 12
mov dword [ebp - 4], edi
mov dword [ebp - 8], 0
mov dword [ebp - 12], 1
.Loop1
cmp dword [ebp - 4], 0
je .Loop2
add dword [ebp - 8], 1
mov eax, [ebp - 4]
xor edx, edx
div ebx
mov dword [ebp - 4], eax
jmp .Loop1
.Loop2:
cmp dword [ebp - 8], 0
je .Ans
sub dword [ebp - 8], 1
mov eax, dword [ebp - 12]
mul ebx
mov dword [ebp - 12], eax
jmp .Loop2
.Ans:
mov eax, dword [ebp - 12]
mul esi
mov esi, eax
add esi, edi
mov eax, esi
add esp, 12
leave
ret
global main
main:
call io_get_udec
mov dword [system], eax
call io_get_udec
mov dword [count], eax
call io_get_udec
xor edx, edx
mov ecx, 2011
div ecx
mov dword [prevprev], edx
push dword [prevprev]
push dword [prevprev]
push dword [system]
call weirdFunc
add esp, 12
xor edx, edx
div ecx
mov dword [prev], edx
sub dword [count], 1
.LoopMain:
cmp dword [count], 0
je .Fin
sub dword [count], 1
mov eax, dword [prev]
mov dword [prevprev], eax
push dword [prevprev]
push dword [prev]
push dword [system]
call weirdFunc
add esp, 12
xor edx, edx
div ecx
mov dword [prev], edx
jmp .LoopMain
.Fin:
call io_print_udec
xor eax, eax
ret