臂组件 - 多个推/弹顺序和SP

时间:2013-07-20 16:40:26

标签: stack arm push pop

我已经看到了在同一行中推送/弹出多个寄存器的注释,例如:

push    {fp, lr}

我无法找出谁先被推 - fp或lr?

另一个问题 - SP是指向堆栈中的最后一个占用地址还是第一个空闲地址?

谢谢!

1 个答案:

答案 0 :(得分:2)

来自ARM ARM:

  

寄存器按顺序存储,编号最小的寄存器存储到最低存储器地址(start_address),最高编号寄存器存储到最高存储器地址(end_address)

在ARM上,堆栈指针通常指向堆栈上的最后一个占用地址。例如,在设置初始堆栈指针时,通常使用地址超过堆栈末尾的地址进行初始化。

PUSH只是使用STMDB作为基址寄存器的sp的同义词。 DB表示'递减之前'寻址模式。