假设以下说明:
stp x29, x30, [sp, -32]!
假设堆栈指针位于地址0,那么存储了x29
和x30
的地址:
[sp-16]
和[sp-32]
[sp-32]
和[sp-40]
我知道堆栈会向低地址增长,但每当存储时我们会占用增长的地址,因此我认为“选项1”是正确答案。
你觉得怎么样?答案 0 :(得分:1)
无论寻址模式如何,超过1个字节的存储器访问始终启动在给定的基址并提升,因此您的"选项2"基地址两侧的一部分显然是不对的。还要注意,初始堆栈指针0将无效,因为您试图将存储在下面 - 地址计算的结果是下溢或溢出在架构上是未知的,所以虽然有些硬件可能会产生预期的地址,你绝对不应该依赖它。
在这种情况下,如果例如初始sp
为0x1000,那么您将第一个寄存器(x29
)的字节存储到地址0x0fe0..0xfe7(在适当的当前字节顺序),第二个字节(x30
)存储到0xfe8..0xfef,最后0xfe0写回sp
。