macos - 尝试使用 x86 程序集 GNU GAS 在数组索引处分配值时引发错误
问题描述
我正在将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。
有谁知道为什么会发生这种行为?我正在使用语法的gcc
编译器在 Mac OSX 上运行此代码。GNU GAS
解决方案
正如@MichaelPetch 所指出的,字节大小必须包含在.fill
语句中:
x:.fill 10, 4
推荐阅读
- stm32 - 如何在 STM32F103C8T6 中使用 HAL_UART_Transmit() 配置传输数据的波特率?
- php - Route 使用 Slug,但功能需要 id
- r - 使用 mfrow 时调整条形图的大小/宽度
- android - 广播没有被 AlarmManager 调用
- python - 从数据框中提取特征并将其转换为其他数据框?
- python - 如何使用 python 将表单发布到 aspx 站点
- geometry - 计算适合另一个圆的圆周的圆的数量
- sql - 计算单利的 SQL 函数
- c# - 异常 无法更改关系,因为删除时一个或多个外键属性不可为空
- ruby-on-rails - 使用 axlsx-rails 将 xlsx 文件导出为邮件中的链接