#include #include long square_number(long); asm("square_number: \n" " mov %rdi, %rax \n" " add %rax, %rax \n" " ret\n" ); long fibonacci(long); asm("fibonacci:\n" " cmp $0, %rdi\n" " jne not_0\n" " mov $0, %rax\n" " mov $0, %rbx\n" " ret\n" "not_0:\n" " cmp $1, %rdi\n" " jne not_1\n" " mov $1, %rax\n" " mov $0, %rbx\n" " ret\n" "not_1:\n" " dec %rdi\n" " call fibonacci\n" // After this, %rax is fib(n), %rbx is fib(n-1) " mov %rax, %r10\n" " add %rbx, %rax\n" " mov %r10, %rbx\n" " ret\n" ); int main(int argc, char ** argv){ int x = 500; if(argc > 1) x = atoi(argv[1]); x = square_number(x); printf("x = %d\n", x); for(long i = 0; i < 90; i++) printf("fib(%ld) = %ld\n", i, fibonacci(i)); return 0; }