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

2023-12-09

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

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

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

我正在针对 ARMv8(64 位)架构进行编译。


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

我能够复制您的错误。所以 SP mod 16 必须为 0。

Bus error (core dumped)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在armv8架构中将半字值存储到堆栈内存中时出现总线错误? 的相关文章

随机推荐