【发布时间】:2021-06-26 20:50:06
【问题描述】:
我正在尝试编译一个非常简单的程序,但出现了 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
【问题讨论】:
-
rpb是rbp的拼写错误,但这应该只是作为该符号名称的存储区。你确定你是在 64 位模式下组装的吗?在 32 位模式下,rdi和rsp只是符号名称,而不是寄存器。gcc -c foo.s在我的 x86-64 GNU/Linux 桌面上没有给出任何错误。 -
(因为那个错字,代码当然不会链接,如果你不打算使用像
lea rdi, [RIP + message]这样的 RIP 相对寻址,lea毫无意义。还有你的代码位于 .data 部分,而不是 .text。) -
@PeterCordes 我纠正了那个错字并添加了 .text 部分,但它是一样的
-
是的,就像我说的,错字没有解释错误信息。您可能正在 32 位模式下组装,例如
gcc -m32,这只是 32 位系统上的默认设置。
标签: assembly gcc x86-64 gnu-assembler intel-syntax