我在用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
为了声明数组,我按照此处的说明进行操作:在 x86 程序集中声明数组 https://stackoverflow.com/questions/29545696/declaring-arrays-in-x86-assembly#answer-29546316.
有谁知道为什么会发生这种行为?我在 Mac OSX 上运行此代码gcc
编译器使用GNU GAS
syntax.
正如@MichaelPetch 所指出的,字节大小必须包含在.fill
陈述:
x:.fill 10, 4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)