如何解决'mov' 的参考文献太多
我正在尝试编译一个非常简单的程序,但出现了 2 个无法修复的错误:
1.s:13:Error: too many memory references for 'mov'
1.s:15:Error: too many memory references for 'lea'
这是我的代码,希望有人看到我的错误。
.intel_syntax noprefix
.data
message: .asciz "Hello World\n"
.text
.global main
main:
push rbp
mov rbp,rsp
lea rdi,message
call printf
mov rax,0
pop rbp
ret
解决方法
在我的 x86-64 Arch GNU/Linux 系统上,该代码组合 + 链接对我来说很好:gcc -no-pie foo.S
这些错误消息与我使用 gcc -c -m32 foo.S
得到的相符,所以您可能使用的是 32 位系统,其中 -m32
是 GCC 的默认值。如果 { {1}} 有效,您可以组装 + 链接,否则您必须将系统升级到 64 位。
在 32 位模式下,RBP 等不是寄存器名称,因此 GAS 只是将它们视为未知符号名称。当然还有 x86 doesn't allow instructions with two explicit memory operands 喜欢 gcc -m64 -no-pie
。 (并且 mov mem2,mem1
需要一个注册目的地,而 lea
也会在存储的操作数大小不明确时出错。)
(我不得不使用 mov rax,0
因为你写了 -no-pie
而不是 lea rdi,message
来使用 RIP 相对寻址 instead of 32-bit absolute: How to load address of function or label into register)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。