【发布时间】:2012-12-10 22:14:49
【问题描述】:
我对此感到困惑,因为如果我们已经有一个指针,那么我们可以轻松指向下一条指令,我们可以轻松指向返回上一个函数,那么为什么我们需要另一个堆栈指针寄存器来返回上一个函数或模块?
【问题讨论】:
标签: cpu-registers
我对此感到困惑,因为如果我们已经有一个指针,那么我们可以轻松指向下一条指令,我们可以轻松指向返回上一个函数,那么为什么我们需要另一个堆栈指针寄存器来返回上一个函数或模块?
【问题讨论】:
标签: cpu-registers
程序计数器告诉CPU它在哪里。堆栈用于(除其他外)记录它在哪里。
如果调用了一个函数,该函数需要知道在完成后返回到哪里。这确实可能只是一个传入的地址,但如果该函数本身调用其他函数,或者甚至递归调用自身,那么它需要确保该地址不会丢失或被覆盖——所以它必须被存储。这样做的自然方法是将地址压入堆栈,并在需要时再次将其弹出。
当然,它还存储函数的本地状态,因为当程序下降到函数或从函数返回时,它也需要被推送和弹出。
并非所有处理器都必须有一个堆栈,但如果您在一个堆栈上执行任何远程复杂的操作,则不可避免地要实现一个。
【讨论】:
程序控制器保持下一条指令的位置,堆栈指针指向一个堆(堆栈),处理器存储信息以供以后使用,例如内部寄存器的值在跳转到子程序之前。
【讨论】:
SP 用于从堆栈寄存器中检索数据,在该寄存器中存储临时数据,例如任何操作或内容的副产品,然后在断电之前将其恢复
而你知道的 PC 保存下一条要执行的指令的地址..
【讨论】: