我用 AT&T 语法编写了一小段程序集,目前在该.data
部分中声明了三个变量。但是,当我尝试将这些变量中的任何一个移动到寄存器时,例如%eax
,会引发错误gcc
。代码和错误信息如下:
.data
x:.int 14
y:.int 4
str: .string "some string\n"
.globl _main
_main:
pushq %rbp
movq %rsp, %rbp
subq $16, %rsp
movl x, %eax; #attempting to move the value of x to %eax;
leave
ret
引发的错误是:
call_function.s:14:3:错误:64 位模式不支持 32 位绝对寻址
movl x, %eax;
^
我还尝试通过首先$
在 前面添加字符来移动值x
,但是clang
会引发错误:
clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
有谁知道如何将存储的值x
成功移动到%eax
?我在 Mac OSX 上使用 x86 程序集并使用gcc
.