Nat*_*ina 3 assembly memory-alignment bus-error arm64 stack-pointer
我有两个寄存器 w1 和 w2,我想将它们存储在堆栈上。我想将完整的单词w1和w2的一半存储到堆栈中。这是我的实现:
STR w1, [sp, #-8]!
STRH w2, [sp, #-8]!
Run Code Online (Sandbox Code Playgroud)
编译时,第一条指令运行良好,但第二条指令引发总线错误。我知道这是一些对齐问题,但我无法正确理解为什么会发生这种情况?
我正在针对 ARMv8(64 位)架构进行编译。
根据 ARMv8 指令集概述以及其他文档,“...如果 SP 用作基址寄存器,则在添加任何偏移之前堆栈指针的值必须是四字(16 字节)对齐,否则堆栈对齐将产生异常。”
我能够复制你的错误。所以 SP mod 16 必须为 0。
Bus error (core dumped)
Run Code Online (Sandbox Code Playgroud)