在 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
寄存器,但您忘记实际初始化它!
我是 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
寄存器,但您忘记实际初始化它!