代码之家  ›  专栏  ›  技术社区  ›  Ajax1234

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

  •  2
  • Ajax1234  · 技术社区  · 8 年前

    我正在使用 x86 GNU与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 .

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

    1 回复  |  直到 8 年前
        1
  •  1
  •   Ajax1234    8 年前

    .fill

    x:.fill 10, 4