13

我对此感到困惑,因为如果我们已经有一个指针,那么我们可以轻松地指向下一条指令,我们可以轻松地指向返回上一个函数,那么为什么我们需要另一个堆栈指针寄存器来返回上一个函数或模块呢?

4

3 回答 3

18

程序计数器告诉 CPU 它在哪里。堆栈用于(除其他外)记录它所在的位置

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

当然,它还存储函数的本地状态,因为当程序下降到函数或从函数返回时,它也需要被推送和弹出。

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

于 2012-12-24T13:56:26.250 回答
0

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

于 2012-12-24T14:02:26.740 回答
0

SP 用于从堆栈寄存器中检索数据,在该寄存器中存储临时数据,例如任何操作或内容的双积,然后在断电之前将其恢复

而您所知道的PC保存下一条要执行的指令的地址..

于 2016-12-04T22:11:55.597 回答