我对Assembly很陌生,我正在尝试创建一个使用scanf从用户那里接收号码的程序。然后输出“结果:(数字)”
运行代码时,我不断收到分段错误。
这是我现在得到的代码:

.global main
mystring: .asciz"input\n"
formatstring: .asciz" %d"
resultstring: .asciz "Result: %ld\n"

main:
    movq    $0, %rax
    movq    $mystring, %rdi
    call    printf
    call    inout
    movq    $0, %rax
    movq    $resultstring, %rdi
    call    printf
    jmp end

inout:
    pushq   %rbp
    subq    $8, %rsp
    leaq    -8(%rbp), %rsi
    movq    $formatstring, %rdi
    movq    $0, %rax
    call    scanf
    popq    %rbp
    ret


end:
    movq    $0, %rdi
    call    exit


我怀疑inout方法有问题。有什么解决方案可以使该程序正常工作?

最佳答案

leaq    -8(%rbp), %rsi



在此指令中,您指的是%rbp寄存器,但是您忘记了对其进行初始化!

07-24 13:30