首页 > 解决方案 > 尝试使用 x86 程序集 GNU GAS 在数组索引处分配值时引发错误

问题描述

我正在将x86GNU 程序集与 GCC 一起使用,并尝试实现与以下内容等效的程序集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 $16, %rsp
  lea x(%rip), %rdi
  mov index(%rip), %rsi;
  movl $5, %eax;
  movl %eax, (%rdi, %rsi, 4);
  leave
  ret

为了声明数组,我按照此处的说明进行操作:Declaring Arrays In x86 Assembly

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

标签: macosassemblyx86-64gnu-assembler

解决方案


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

x:.fill 10, 4

推荐阅读