我错过了什么?分段故障(核心已转储)

时间:2020-10-29 09:39:34

标签: assembly segmentation-fault att

我正在学习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

0 个答案:

没有答案