fib_iter.o: file format elf64-x86-64 Disassembly of section .text: 0000000000000000 : #include #include unsigned long long fib_iter(unsigned long long a) { 0: 55 push %rbp 1: 48 89 e5 mov %rsp,%rbp 4: 48 89 7d d8 mov %rdi,-0x28(%rbp) unsigned long long r = 0; 8: 48 c7 45 f8 00 00 00 movq $0x0,-0x8(%rbp) f: 00 unsigned long long minus_one = 1; 10: 48 c7 45 f0 01 00 00 movq $0x1,-0x10(%rbp) 17: 00 unsigned long long minus_two = 0; 18: 48 c7 45 e8 00 00 00 movq $0x0,-0x18(%rbp) 1f: 00 unsigned long long i; if (a == 0) { 20: 48 83 7d d8 00 cmpq $0x0,-0x28(%rbp) 25: 75 0a jne 31 r = 0; 27: 48 c7 45 f8 00 00 00 movq $0x0,-0x8(%rbp) 2e: 00 2f: eb 49 jmp 7a } else if (a == 1) { 31: 48 83 7d d8 01 cmpq $0x1,-0x28(%rbp) 36: 75 0a jne 42 r = 1; 38: 48 c7 45 f8 01 00 00 movq $0x1,-0x8(%rbp) 3f: 00 40: eb 38 jmp 7a } else { for (i = 2; i <= a; i++) { 42: 48 c7 45 e0 02 00 00 movq $0x2,-0x20(%rbp) 49: 00 4a: eb 24 jmp 70 r = minus_one + minus_two; 4c: 48 8b 55 f0 mov -0x10(%rbp),%rdx 50: 48 8b 45 e8 mov -0x18(%rbp),%rax 54: 48 01 d0 add %rdx,%rax 57: 48 89 45 f8 mov %rax,-0x8(%rbp) minus_two = minus_one; 5b: 48 8b 45 f0 mov -0x10(%rbp),%rax 5f: 48 89 45 e8 mov %rax,-0x18(%rbp) minus_one = r; 63: 48 8b 45 f8 mov -0x8(%rbp),%rax 67: 48 89 45 f0 mov %rax,-0x10(%rbp) if (a == 0) { r = 0; } else if (a == 1) { r = 1; } else { for (i = 2; i <= a; i++) { 6b: 48 83 45 e0 01 addq $0x1,-0x20(%rbp) 70: 48 8b 45 e0 mov -0x20(%rbp),%rax 74: 48 3b 45 d8 cmp -0x28(%rbp),%rax 78: 76 d2 jbe 4c minus_two = minus_one; minus_one = r; } } return r; 7a: 48 8b 45 f8 mov -0x8(%rbp),%rax } 7e: 5d pop %rbp 7f: c3 retq 0000000000000080
: int main(int argc, char *argv[]) { 80: 55 push %rbp 81: 48 89 e5 mov %rsp,%rbp 84: 48 83 ec 20 sub $0x20,%rsp 88: 89 7d ec mov %edi,-0x14(%rbp) 8b: 48 89 75 e0 mov %rsi,-0x20(%rbp) unsigned long long a = 0; 8f: 48 c7 45 f8 00 00 00 movq $0x0,-0x8(%rbp) 96: 00 unsigned long long r = 0; 97: 48 c7 45 f0 00 00 00 movq $0x0,-0x10(%rbp) 9e: 00 a = atol(argv[1]); 9f: 48 8b 45 e0 mov -0x20(%rbp),%rax a3: 48 83 c0 08 add $0x8,%rax a7: 48 8b 00 mov (%rax),%rax aa: 48 89 c7 mov %rax,%rdi ad: e8 00 00 00 00 callq b2 b2: 48 89 45 f8 mov %rax,-0x8(%rbp) r = fib_iter(a); b6: 48 8b 45 f8 mov -0x8(%rbp),%rax ba: 48 89 c7 mov %rax,%rdi bd: e8 00 00 00 00 callq c2 c2: 48 89 45 f0 mov %rax,-0x10(%rbp) printf("fib(%llu) = %llu\n",a,r); c6: 48 8b 55 f0 mov -0x10(%rbp),%rdx ca: 48 8b 45 f8 mov -0x8(%rbp),%rax ce: 48 89 c6 mov %rax,%rsi d1: bf 00 00 00 00 mov $0x0,%edi d6: b8 00 00 00 00 mov $0x0,%eax db: e8 00 00 00 00 callq e0 return 0; e0: b8 00 00 00 00 mov $0x0,%eax } e5: c9 leaveq e6: c3 retq