当我们已经有程序计数器寄存器时,为什么还需要堆栈指针寄存器?



我对它感到困惑,因为如果我们已经有了一个指针,那么我们可以很容易地指向下一个指令,我们可以很容易地指向返回以前的函数,那么为什么我们需要另一个堆栈指针寄存器来返回以前的函数或模块?

程序计数器告诉CPU它的位置。堆栈用于记录的位置。

如果调用一个函数,该函数需要知道它完成后返回到哪里。这确实可以只是一个传入的地址,但是如果该函数本身调用其他函数,或者甚至递归地调用自己,那么它需要确保该地址没有丢失或覆盖——因此必须存储它。这样做的自然方法是将地址压入堆栈,并在需要时再次弹出它。

当然,它还存储了函数的局部状态,因为当程序进入函数或从函数返回时,也需要将其推入和弹出。

不是所有的处理器都必须有堆栈,但是如果你在一个处理器上做任何远程复杂的事情,你不可避免地要实现一个。

程序计数器保留下一条指令的位置,堆栈指针指向处理器存储信息的一堆(堆栈),以供以后使用,例如在跳转到子程序之前内部寄存器的值。

SP用于从堆栈寄存器中检索数据,堆栈寄存器中存储临时数据,如任何操作或内容的副产品,在电源故障之前将其恢复回来

而PC,如你所知,保存着下一条要执行的指令的地址

最新更新