执行此代码后,我得到一个无限循环,只打印零:
(我仔细研究过,但我仍然无法找出它的错误)
.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
答案 0 :(得分:1)
sub $8, %esp
pushl $0
pushl $1
为什么sub
? push
已经递减了堆栈指针,因此您的局部变量将位于-12(%ebp)
和-16(%ebp)
,而不是-4(%ebp)
和-8(%ebp)
。
.L2:
cmpl $2, 8(%ebp)
jg .L5
jmp .L3
除了与你的论证进行比较之外,你永远不会减少或做任何其他事情,因此该函数将永远运行。