ARM汇编-栈操作指令
ARM汇编-栈操作指令
ARM中栈种类
在ARM中有4种栈,分别是:减栈、增栈、满栈、空栈
- 减栈:向内存地址减小的方向发生变化
- 增栈:向内存地址增加的方向发生变化
- 满栈:栈指针(sp)指向的栈顶有有效数据
- 空栈:栈指针(sp)指向的栈顶没有有效数据
在学习ARM的三级流水线时,执行取指、解码、执行三步操作时对PC进行偏移,每一步都偏移PC-4。
上述偏移之所以是PC-4,原因就是在ARM种默认的栈种类就是减栈。
上述4种栈也可以进行组合,再次区分为: 满减栈、满增栈、空减栈、空增栈。ARM中默认使用的栈的形式是满减栈。
栈指令
LDMXX sp!, {r1, r2, r3, r5, r8}
将sp
指向的栈空间中的数据加载到 r1, r2, r3, r5, r8 寄存器中
STMXX sp!, {r1, r2, r3, r5, r8}
将 r1, r2, r3, r5, r8 寄存器中的值存放到sp
指向的栈空间中
1 | 其中xx: |
往栈空间中放数据时,如果需要先改变
sp
的值,则为满栈,如果可以直接放数据则为空栈。
1 | stmfd sp!, {r0-r5, r8} === push {r0-r5, r8} 压栈操作 |
按满减栈进行压栈, 也按满减栈进行弹栈, 就能恢复寄存器的内容
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 不愿努力的帅洋!