在armv8架构中将半字值存储到堆栈存储器时出现BUS错误?

时间:2016-09-22 05:41:17

标签: memory-alignment arm64 bus-error

我有两个寄存器w1和w2,我想存储在堆栈中。我想将完整的单词w1和w2的一半存储到堆栈中。这是我的实施:

STR w1, [sp, #-8]!
STRH w2, [sp, #-8]!

编译时,第一条指令运行正常,但第二条指令抛出了总线错误。我知道这是一些对齐问题,但我无法正确理解为什么会发生这种情况?

我正在编译ARMv8(64位)架构。

1 个答案:

答案 0 :(得分:1)

根据ARMv8指令集概述,以及其他文档," ...如果SP用作基址寄存器,那么在添加任何偏移量之前堆栈指针的值必须是四字(16字节)对齐,否则将生成堆栈对齐异常。"

我能够复制你的错误。因此SP mod 16必须为0.

Bus error (core dumped)