计算机组成原理——指令执行过程

2,439 阅读3分钟

小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。

本文同时参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

一个指令和一条数据在存储上并没有区别,那么一条指令是如何被执行的呢?

指令周期

CPU从主存中取出并执行一条指令的时间,包括取指、间址、执行(取操作数)、中断四部分

指令周期包括若干机器周期,一个机器周期包括若干时钟周期(也称节拍或T周期)

指令周期的数据流

在指令执行的不同阶段,要求依次访问的数据序列是不同的。我们依据这个特点将指令分为以下几个周期

取指周期

顾名思义,取指周期的任务是根据PC中的内容从主存中取出指令代码并存放在IR中。

image.png

取值周期的数据流如下:

  • 程序计数器将当前指令地址送去存储器地址寄存器。
  • 控制单元发出控制信号,经总线传送至主存。
  • 存储器将当前指令地址所指的数据传送至存储器数据寄存器中
  • 存储器数据寄存器将数据发送至指令寄存器中
  • 控制单元发出控制信号,PC++

间址周期

间址周期的任务是获取操作数的有效地址(因为可能是操作数直接记录一个地址,这个反应到我们编程中可以理解为指针,所以也会出现指针的指针等套娃)

image.png

  • 从指令寄存器中取出操作数,并将其写入至存储器地址寄存器中。
  • 控制单元发出控制信号,经总线传送至主存。
  • 主存通过数据总线将数据写入至存储器数据寄存器中。

执行周期

顾名思义这个就是执行指令了,不过不同的指令的实现肯定是不同的,因此数据流向肯定也是不同的,这里就不一一列举了。

中断周期

中断周期的任务是处理中断请求. 中断的意思是暂停当前任务,先去执行其他任务,这就需要我们保存断点。否则无法在执行其他任务后恢复任务。

我们用SP表示栈顶地址。并约定进栈操作是先修改地址,再存入数据(这里理解的有些困难的同学建议去看看CSAPP)。

  • 通过控制单元将SP地址--,并将修改后的地址送入存储器地址寄存器。
  • 控制单元向主存发送控制信号
  • 程序计数器经过存储器数据寄存器经过数据总线写入主存(这个操作就是将中断发生前的程序数据写入主存)
  • 控制单元将中断服务程序地址赋值给PC。