我正在学习AT&T x64 / GNU汇编语法。我正在尝试创建斐波那契函数,但出现错误。我不明白弹出是如何导致错误的。它只是调用恢复的堆栈。
================================================ ===============================================以下代码: 。数据 .text
.fibo: .string "Fibonacci: "
.fibo_ouput: .string "Result of Fibonacci: %d\n"
.user_input: .string "%d"
############################################## ############################################# < / p>
fibonacci_inout:
push %rbp
mov %rsi, %rbp
mov $.fibo, %rdi
xor %rax, %rax
call printf
subq $8, %rsp
mov $.user_input, %rdi
xor %rax, %rax
lea -8(%rbp), %rsi
call scanf
call fibonacci
mov $.fibo_output, %rdi
mov %rax, %rsi
xor %rax, %rax
call printf
mov %rbp, %rsp
pop %rbp # where the error occurs
ret
############################################## ############################################# < / p>
fibonacci:
push %rbp
mov %rsp, %rbp
mov %rax, %rbx
add $2, %rbx
shl $2, %rbx
sub %rbx, %rsp
xor %rcx, %rcx
mov %rcx, (%rsp, %rcx, 4)
inc %rcx
mov %rcx, (%rsp, %rcx, 4)
inc %rcx
add $2, %rax
############################################# ############################################# < / p>
fibonacci_loop:
cmp %rax, %rcx
jge fibonacci_end
mov -4(%rsp, %rcx, 4), %rbx
mov -8(%rsp, %rcx, 8), %rdx
add %rdx, %rbx
mov %rbx, (%rsp, %rcx, 4)
inc %rcx
jmp fibonacci_loop
############################################# ############################################# < / p>
fibonacci_end:
mov %rbp, %rsp
pop %rbp
ret
############################################# ############################################# < / p>
main:
call fibonacci