.file "fibs.c" .section .rodata.str1.32,"aMS",@progbits,1 .align 32 .LC0: .string "the %dth Fibonacci number is %d\n" .align 32 .LC1: .string "with tail recursion it's also %d\n" .align 32 .LC2: .string "without recursion it's still %d\n" .text .align 2 .p2align 2,,3 .globl main .type main,@function main: pushl %ebp movl %esp, %ebp pushl %esi pushl %ebx andl $-16, %esp pushl $0 pushl $10 pushl $0 movl 12(%ebp), %eax pushl 4(%eax) call __strtol_internal movl %eax, %esi addl $16, %esp cmpl $1, %esi movl $1, %eax jle .L5 subl $12, %esp leal -1(%esi), %edx pushl %edx call fib1 leal -2(%esi), %edx movl %eax, %ebx movl %edx, (%esp) call fib1 leal (%eax,%ebx), %eax addl $16, %esp .L5: pushl %edx pushl %eax pushl %esi pushl $.LC0 call printf addl $16, %esp cmpl $1, %esi movl $1, %eax jle .L8 pushl %eax pushl $2 pushl $1 leal -1(%esi), %ecx pushl %ecx call fib2 addl $16, %esp .L8: subl $8, %esp pushl %eax pushl $.LC1 call printf addl $16, %esp cmpl $1, %esi movl %esi, %edx movl $1, %ebx movl $1, %ecx jle .L16 .p2align 2,,3 .L13: decl %edx movl %ecx, %esi addl %ebx, %ecx cmpl $1, %edx movl %esi, %ebx jg .L13 .L16: subl $8, %esp pushl %ecx pushl $.LC2 call printf movl $0, (%esp) call exit .Lfe1: .size main,.Lfe1-main .align 2 .p2align 2,,3 .globl fib1 .type fib1,@function fib1: pushl %ebp movl %esp, %ebp pushl %esi movl 8(%ebp), %esi cmpl $1, %esi pushl %ebx movl $1, %eax jle .L32 subl $12, %esp leal -1(%esi), %edx pushl %edx call fib1 leal -2(%esi), %edx movl %eax, %ebx movl %edx, (%esp) call fib1 leal (%eax,%ebx), %eax .L32: leal -8(%ebp), %esp popl %ebx popl %esi leave ret .Lfe2: .size fib1,.Lfe2-fib1 .align 2 .p2align 2,,3 .globl fib2 .type fib2,@function fib2: pushl %ebp movl %esp, %ebp movl 8(%ebp), %ecx pushl %ebx movl 16(%ebp), %edx movl 12(%ebp), %ebx .p2align 2,,3 .L39: cmpl $1, %ecx jle .L40 leal (%edx,%ebx), %eax decl %ecx movl %edx, %ebx movl %eax, %edx jmp .L39 .L40: movl %edx, %eax popl %ebx leave ret .Lfe3: .size fib2,.Lfe3-fib2 .align 2 .p2align 2,,3 .globl fib3 .type fib3,@function fib3: pushl %ebp movl %esp, %ebp movl 8(%ebp), %edx cmpl $1, %edx pushl %ebx movl $1, %ecx movl $1, %ebx jle .L47 .p2align 2,,3 .L45: decl %edx movl %ecx, %eax addl %ebx, %ecx cmpl $1, %edx movl %eax, %ebx jg .L45 .L47: movl %ecx, %eax popl %ebx leave ret .Lfe4: .size fib3,.Lfe4-fib3 .ident "GCC: (GNU) 3.2 20020903 (Red Hat Linux 8.0 3.2-7)"