Assembly Fibonacci在GAS汇编语言中不起作用

Assembly Fibonacci在GAS汇编语言中不起作用,assembly,x86,Assembly,X86,执行此代码后,我得到一个无限循环,只打印零: (我仔细检查了一下,但还是找不出毛病) 为什么子代码是push已经递减堆栈指针,因此在此之后,局部变量将位于-12(%ebp)和-16(%ebp),而不是-4(%ebp)和-8(%ebp) 除了将参数与2进行比较外,您从不减少或执行任何操作,因此函数将永远运行。感谢您指出这些错误。我现在修复了它,但是现在,我只得到0 printed.mov$2,%eax.L2:cmpl%eax,8(%ebp)jg.L5 jmp.L3.L5:(…)addl$1,%ea

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

(我仔细检查了一下,但还是找不出毛病)

为什么子代码是
push
已经递减堆栈指针,因此在此之后,局部变量将位于
-12(%ebp)
-16(%ebp)
,而不是
-4(%ebp)
-8(%ebp)


除了将参数与2进行比较外,您从不减少或执行任何操作,因此函数将永远运行。

感谢您指出这些错误。我现在修复了它,但是现在,我只得到0 printed.mov$2,%eax.L2:cmpl%eax,8(%ebp)jg.L5 jmp.L3.L5:(…)addl$1,%eax
.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
sub $8, %esp
pushl $0
pushl $1
.L2:
 cmpl $2, 8(%ebp)
 jg .L5
 jmp .L3