我对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
寄存器,但是您忘记了对其进行初始化!