繁体   English   中英

我可以为升序堆栈增长方向配置ARM处理器吗?

[英]Can i configure a ARM processor for Ascending Stack growth direction?

这里有一个问题涉及堆栈增长方向。 Michael Burr在ARM处理器中回复说过,可以配置堆栈增长方向 - 即下降(正常行为)堆栈在内存中向零地址(低地址)增长或向上增长,即堆栈向内存中的更高地址增长。

在大多数现代系统中,堆栈增长的方向是什么?

我的问题是:在ARM处理器中,如何使堆栈沿着上升的方向增长?

如何将堆栈配置为升序,默认情况下是降序? 任何寄存器位设置/复位等

好吧,ARM处理器不直接维护堆栈 - 但它们确实有设计时考虑到的指令:LDM和STM。 因此,如果您在函数的开头使用STMDB,最后使用LDMIA,那么您实际上有一个完整的+降序堆栈:我记得使用的汇编程序允许您将“STMFD”和“LDMFD”写为别名。 (“完整”堆栈是堆栈指针指向堆栈上最新字的堆栈,而不是下一个要使用的位置)

所以这不是你可以在运行时简单地重新配置的东西:虽然如果你用自己的调用约定编写自己的操作系统,你可以选择使用升序堆栈。 同样,您也可以选择不使用R13作为堆栈指针 - 这也只是调用约定的一部分。 这种选择有效地嵌入到使用堆栈的每个函数的实现中。

您有__user_initial_stackheap()函数,它可以帮助您使用堆启动,堆栈结束和堆重定位来使用堆启动,堆端更改SP。 此函数可以在初始化期间使用,因为ARM将使用它来重定向堆栈和堆。

此外,您可以选择使用单区域或双内存模型[根据您的要求]。 我在编写使用ARM926EJ-S的UseCases时使用过这个API。

文档在我的开发过程中有所帮助,也可能对您有所帮助。

希望这可以帮助。

-hjsblogger

嗯拇指/拇指2可能会限制你推/弹,而拇指2只有ARM在那里我不知道我们可以一般说你可以双向。 传统的手臂指令,是的,你可以ldmia或ldmdb(之前或之前递增)和stmdb和stmia。 例如,如何使C编译器在地址中爬升而不是自动向下? 不知道。

它就像ARM上的大端,只因为你可能不想要因为它带来的头痛。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM