Fibonacci无法使用GAS汇编语言

时间:2011-10-23 13:01:56

标签: assembly x86

执行此代码后,我得到一个无限循环,只打印零:

(我仔细研究过,但我仍然无法找出它的错误)

.section .data
N:
 .int 35

output:
 .asciz "%f"

.section .text
.globl _start

_start:
 nop
 pushl $5
 call fibonacci

.type fibonacci, @function
fibonacci:
 pushl %ebp
 movl %esp, %ebp
 sub $8, %esp
 pushl $0
 pushl $1

.L2:
 cmpl $2, 8(%ebp)
 jg .L5
 jmp .L3

.L5:
 movl -4(%ebp), %ecx
 addl -8(%ebp), %ecx

 pushl %ecx
 pushl $output
 call printf
 movl -8(%ebp), %edx
 movl %edx,-4(%ebp)
 movl %ecx,-8(%ebp)
 jmp .L2

.L3:
 pushl $0
 call exit

1 个答案:

答案 0 :(得分:1)

sub $8, %esp
pushl $0
pushl $1

为什么subpush已经递减了堆栈指针,因此您的局部变量将位于-12(%ebp)-16(%ebp),而不是-4(%ebp)-8(%ebp)

.L2:
 cmpl $2, 8(%ebp)
 jg .L5
 jmp .L3

除了与你的论证进行比较之外,你永远不会减少或做任何其他事情,因此该函数将永远运行。