这里有一个问题涉及堆栈增长方向.Michael Burr在ARM处理器中回复说过,可以配置堆栈增长方向 - 即下降(正常行为)堆栈在内存中向零地址(低地址)增长或向上增长,即堆栈向内存中的更高地址增长.
我的问题是:在ARM处理器中,如何让堆栈在向上的方向上增长?
如何将堆栈配置为升序,默认情况下是降序?任何寄存器位设置/复位等
好吧,ARM处理器不直接维护堆栈 - 但它们确实有设计时考虑到的指令:LDM和STM.因此,如果您在函数的开头使用STMDB,最后使用LDMIA,那么您实际上有一个完整的+降序堆栈:我记得使用的汇编程序允许您将"STMFD"和"LDMFD"写为别名.("完整"堆栈是堆栈指针指向堆栈上最新字的堆栈,而不是下一个要使用的位置)
所以这不是你可以简单地在运行时重新配置的东西:虽然如果你用自己的调用约定编写自己的操作系统,你可以选择使用升序堆栈.同样,您也可以选择不使用R13作为堆栈指针 - 这也只是调用约定的一部分.这种选择有效地嵌入到使用堆栈的每个函数的实现中.
| 归档时间: |
|
| 查看次数: |
2850 次 |
| 最近记录: |