.data
a : .long 6
r : .long 0
out : .string "result %d\n"
.text
.global main
fib:
movl 4(%esp), %eax # get arg
cmpl $1, %eax # if x<=1 fib(x)=x
jbe endf
pushl %ebx # save ebx
decl %eax # eax=n-1
pushl %eax # set arg
call fib # res in eax
mov %eax, %ebx # ebx=fib(n-1)
decl (%esp) # arg -= 1
call fib # res in eax
addl $4, %esp # free arg
addl %ebx, %eax #fib(n)=fib(n-1)+fib(n-2)
popl %ebx # restore ebx
endf:
ret
main:
pushl a #stack [a]
call fib #result in %eax
pushl %eax
pushl $out
addl $12, %esp # free all arguments
xor %eax, %eax # return value
ret
LmRhdGEKICAgICAgICBhIDogLmxvbmcgNgogICAgICAgIHIgOiAubG9uZyAwCiAgICAgICAgb3V0IDogLnN0cmluZyAicmVzdWx0ICVkXG4iCi50ZXh0Ci5nbG9iYWwgbWFpbgpmaWI6CiAgICAgICAgbW92bCA0KCVlc3ApLCAlZWF4ICMgZ2V0IGFyZwogICAgICAgIGNtcGwgJDEsICVlYXggIyBpZiB4PD0xIGZpYih4KT14CiAgICAgICAgamJlIGVuZGYKICAgICAgICBwdXNobCAlZWJ4ICMgc2F2ZSBlYngKICAgICAgICBkZWNsICVlYXggIyBlYXg9bi0xCiAgICAgICAgcHVzaGwgJWVheCAjIHNldCBhcmcKICAgICAgICBjYWxsIGZpYiAjIHJlcyBpbiBlYXgKICAgICAgICBtb3YgJWVheCwgJWVieCAjIGVieD1maWIobi0xKQogICAgICAgIGRlY2wgKCVlc3ApICMgYXJnIC09IDEKICAgICAgICBjYWxsIGZpYiAjIHJlcyBpbiBlYXgKICAgICAgICBhZGRsICQ0LCAlZXNwICMgZnJlZSBhcmcKICAgICAgICBhZGRsICVlYngsICVlYXggI2ZpYihuKT1maWIobi0xKStmaWIobi0yKQogICAgICAgIHBvcGwgJWVieCAjIHJlc3RvcmUgZWJ4CmVuZGY6CiAgICAgICAgcmV0CgptYWluOgogICAgICAgIHB1c2hsIGEgICNzdGFjayBbYV0KICAgICAgICBjYWxsIGZpYiAjcmVzdWx0IGluICVlYXgKICAgICAgICBwdXNobCAlZWF4CiAgICAgICAgcHVzaGwgJG91dAogICAgICAgIGNhbGwgcHJpbnRmCiAgICAgICAgYWRkbCAkMTIsICVlc3AgIyBmcmVlIGFsbCBhcmd1bWVudHMKICAgICAgICB4b3IgJWVheCwgJWVheCAjIHJldHVybiB2YWx1ZQogICAgICAgIHJldAo=