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

时间:2012-12-24 13:49:45

标签: cpu-registers

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

3 个答案:

答案 0 :(得分:17)

程序计数器告诉CPU 的位置。堆栈用于(除其他事项外)记录 的位置。

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

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

并非所有处理器都必须具有堆栈,但如果您在一个处理器上执行任何远程复杂操作,则不可避免地会实现一个。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

SP用于从堆栈寄存器中检索数据,在堆栈寄存器中存储临时数据,例如任何操作或内容的双产品,然后再停电以恢复它

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