我不明白 CPU 如何知道何时需要指向或查看存储某些机器格式指令的某个位置?确切地说,我不知道 CPU 如何知道在实际开始执行该特定指令之前需要将哪个内存位置放入程序计数器(指令集)。我希望这个问题不会太令人困惑,因为我很困惑 :D
答案1
我不知道 CPU 在实际开始执行特定指令之前如何知道需要将哪个内存位置放入程序计数器(指令集)。
其实没那么复杂。
程序计数器(又称 PC)寄存器包含要(获取和)执行的(下一条)指令的内存地址。
(假设我们使用的是具有堆栈架构的 CPU。)
在处理器复位时(例如,上电后),PC 会自动加载一个预定义的地址,该地址预计是引导程序第一条指令的位置。
当执行的指令是任何类型的分支、跳转或调用操作时,都会计算目标地址,并将其加载到 PC 寄存器中。下一条指令将从该目标地址(提取并)执行。
当执行的指令是返回操作时,返回地址会从堆栈中弹出,并加载到 PC 寄存器中。下一个指令将从该返回地址(提取并)执行。
对于所有其他指令,PC 寄存器仅增加一倍(即“计数“)前进到内存中的下一条指令。也就是说,指令被(提取)按顺序执行(直到执行分支类型的指令或发生中断)。
如果发生中断,则当前指令完成后,更新后的 PC 寄存器的内容将被推送到堆栈上(稍后用作返回地址)。PC 寄存器将加载中断处理程序的地址,然后执行该地址。
答案2
经过一番研究,我找到了答案。在应用程序启动时,CPU 一开始就获取应用程序的初始化地址,例如,对于 32 位基础结构,该地址通常为 0x00000000,之后初始微程序启动,并根据初始化地址为程序计数器提供存储指令的内存位置。只是说,我很抱歉,因为我在做研究之前就在这里发布了复杂的问题。我希望有人会觉得这很有用。