尝试使用x86 Assembly GNU GAS在数组的索引处分配值时引发错误

时间:2018-07-10 00:41:14

标签: macos assembly x86-64 gas

我正在将x86 GNU汇编与GCC配合使用,并试图实现等效于以下c/c++的Assembly:

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

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

.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语法的GNU GAS编译器在Mac OSX上运行此代码。

1 个答案:

答案 0 :(得分:1)

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

x:.fill 10, 4