使用 x86 程序集 GNU GAS 尝试在数组索引处分配值时出现错误

Error Raised When Attempting to Assign Value At Index of Array With x86 Assembly GNU GAS

我在 GCC 中使用 x86 GNU 程序集,并试图实现与以下 c/c++ 等效的程序集:

int x[10];
x[0] = 5;

但是,当我尝试 运行(使用命令 ./a.out)我下面的汇编代码时(在第一次使用 gcc filename.s 编译之后),错误 Segmentation fault: 11 是打印到控制台:

.data
  x:.fill 10
  index:.int 0

.text
.globl _main
_main:
  pushq %rbp
  movq %rsp, %rbp
  subq , %rsp
  lea x(%rip), %rdi
  mov index(%rip), %rsi;
  movl , %eax;
  movl %eax, (%rdi, %rsi, 4);
  leave
  ret

为了声明数组,我按照此处的说明进行操作:

有谁知道为什么会发生这种行为?我正在 运行 使用 GNU GAS 语法在 Mac OSX 上使用 gcc 编译器编译此代码。

正如@MichaelPetch 所指出的,字节大小必须包含在 .fill 语句中:

x:.fill 10, 4