这里有一个问题谈到堆栈增长方向。 Michael Burr 回答说,在 ARM 处理器中,堆栈增长方向是可以配置的 - 即降序(正常行为)堆栈向内存中的零地址(较低地址)增长,或者升序,即堆栈向内存中的较高地址增长。
大多数现代系统中堆栈增长的方向是什么? https://stackoverflow.com/questions/664744/what-is-the-direction-of-stack-growth-in-most-modern-systems/664779#664779
我的问题是:在ARM处理器中,如何使堆栈按升方向增长?
如何将堆栈配置为升序(默认情况下为降序)?任何寄存器位设置/重置等。
嗯,ARM 处理器并不直接维护堆栈,但它们确实具有在设计时考虑到这一点的指令:LDM 和 STM。因此,如果您在函数开头使用 STMDB,在函数末尾使用 LDMIA,那么您实际上拥有一个完整+降序堆栈:我记得使用的汇编器允许您将“STMFD”和“LDMFD”编写为别名。 (“完整”堆栈是堆栈指针指向堆栈上最新字的堆栈,而不是指向要使用的下一个位置的堆栈)
因此,这不是您可以在运行时简单地重新配置的东西:尽管如果您使用自己的调用约定编写自己的操作系统,则可以选择使用升序堆栈。同样,您也可以选择不使用 R13 作为堆栈指针 - 这也只是调用约定的一部分。这种选择有效地嵌入到使用堆栈的每个函数的实现中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)