我正在将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上运行此代码。
答案 0 :(得分:1)
如@MichaelPetch所指出的,字节大小必须包含在.fill
语句中:
x:.fill 10, 4