在 x86_64 AT&T 中调用 scanf 时出现分段错误

Segmentation error upon calling scanf in x86_64 AT&T

我是 Assembly 的新手,我正在尝试创建一个使用 scanf 从用户接收数字的程序。然后输出 "Result: (the number)" 我在 运行 代码上不断收到分段错误。 这是我现在得到的代码:

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

main:
    movq    [=11=], %rax    
    movq    $mystring, %rdi
    call    printf
    call    inout
    movq    [=11=], %rax
    movq    $resultstring, %rdi
    call    printf
    jmp end

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


end:
    movq    [=11=], %rdi
    call    exit

我怀疑 'inout' 方法有问题。有什么解决方案可以使这个程序正常运行吗?

leaq    -8(%rbp), %rsi

在此指令中,您指的是 %rbp 寄存器,但您忘记实际初始化它!