相关疑难解决方法(0)

无法将 .data 中的变量移动到 Mac x86 程序集的注册

我用 AT&T 语法编写了一小段程序集,目前在该.data部分中声明了三个变量。但是,当我尝试将这些变量中的任何一个移动到寄存器时,例如%eaxgcc就会引发错误。代码和错误信息如下:

.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
Run Code Online (Sandbox Code Playgroud)

引发的错误是:

call_function.s:14:3: 错误:64 位模式不支持 32 位绝对寻址

movl x, %eax;

^

我还尝试通过首先$在 前面添加字符来移动值x,但是,clang引发了错误:

clang:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)

有谁知道如何x成功地将存储的值移动到%eax?我在 Mac OSX 上使用 x86 程序集并使用gcc.

macos x86 assembly x86-64 att

2
推荐指数
1
解决办法
816
查看次数

标签 统计

assembly ×1

att ×1

macos ×1

x86 ×1

x86-64 ×1