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