处理器是否使用多个堆栈来将调用堆栈与表达式/寄存器堆栈分开?

时间:2016-03-11 13:17:22

标签: cpu-registers cpu-architecture processor stack-memory stack-machine

我正在阅读一些关于处理器内存操作的基本文章,我对处理器如何处理接下来的内容感到困惑。

调用堆栈的概念很明确,但我想知道表达式堆栈/寄存器堆栈(用于进行计算)是否是相同的堆栈,或者即使是子程序的局部变量的堆栈(函数) )在一个程序中是相同的调用栈。

如果有人能向我解释处理器如何处理它的堆栈,那对我有很大的帮助。

2 个答案:

答案 0 :(得分:2)

我所使用的所有处理器都只使用了一个堆栈。

如果您考虑处理器正在做什么,您只需要一个堆栈。在计算过程中,您可以使用与调用堆栈相同的堆栈,因为在计算完成时,堆栈将是“清理”的。再次。对于局部变量也是如此,就在您离开局部变量范围之前,您的堆栈将是干净的,允许调用正确返回。

答案 1 :(得分:1)

您可以更改堆栈,只需设置SS:SP段和指针寄存器(只需保存当前值) 过程调用参数和局部变量发生在堆栈中。动态创建的对象发生在堆中(DS:DI)。 SS:SP寄存器对移位了正确的字节数,以保留过程调用所需的内存。在返回时,SS:SP将重新设置为预呼叫状态。