使用 x86 程序集 GNU GAS 尝试在数组索引处分配值时出现错误
Error Raised When Attempting to Assign Value At Index of Array With x86 Assembly GNU GAS
我在 GCC 中使用 x86
GNU 程序集,并试图实现与以下 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 , %rsp
lea x(%rip), %rdi
mov index(%rip), %rsi;
movl , %eax;
movl %eax, (%rdi, %rsi, 4);
leave
ret
为了声明数组,我按照此处的说明进行操作:。
有谁知道为什么会发生这种行为?我正在 运行 使用 GNU GAS
语法在 Mac OSX 上使用 gcc
编译器编译此代码。
正如@MichaelPetch 所指出的,字节大小必须包含在 .fill
语句中:
x:.fill 10, 4
我在 GCC 中使用 x86
GNU 程序集,并试图实现与以下 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 , %rsp
lea x(%rip), %rdi
mov index(%rip), %rsi;
movl , %eax;
movl %eax, (%rdi, %rsi, 4);
leave
ret
为了声明数组,我按照此处的说明进行操作:
有谁知道为什么会发生这种行为?我正在 运行 使用 GNU GAS
语法在 Mac OSX 上使用 gcc
编译器编译此代码。
正如@MichaelPetch 所指出的,字节大小必须包含在 .fill
语句中:
x:.fill 10, 4