STP指令占用的内存

时间:2015-06-01 07:56:40

标签: assembly arm64

假设以下说明:

stp x29, x30, [sp, -32]! 

假设堆栈指针位于地址0,那么存储了x29x30的地址:

  • 选项1:[sp-16][sp-32]
  • 选项2:[sp-32][sp-40]

我知道堆栈会向低地址增长,但每当存储时我们会占用增长的地址,因此我认为“选项1”是正确答案。

你觉得怎么样?

1 个答案:

答案 0 :(得分:1)

无论寻址模式如何,超过1个字节的存储器访问始终启动在给定的基址并提升,因此您的"选项2"基地址两侧的一部分显然是不对的。还要注意,初始堆栈指针0将无效,因为您试图将存储在下面 - 地址计算的结果是下溢或溢出在架构上是未知的,所以虽然有些硬件可能会产生预期的地址,你绝对不应该依赖它。

在这种情况下,如果例如初始sp为0x1000,那么您将第一个寄存器(x29)的字节存储到地址0x0fe0..0xfe7(在适当的当前字节顺序),第二个字节(x30)存储到0xfe8..0xfef,最后0xfe0写回sp