Alex_McAvoy

想要成为渔夫的猎手

指令执行过程

【指令周期】

机器周期

CPU 从主存中每取出并执行一条指令所需的全部时间称为指令周期,也就是 CPU 完成一条指令的时间

指令周期常常用若干机器周期来表示,一个机器周期又包含若干时钟周期(也称为节拍或 T 周期,它是 CPU 操作的最基本单位)

每个指令周期内机器周期数可以不等,每个机器周期内的节拍数也可以不等

指令周期

对于无条件转移指令 JMPX,在执行时不需要访问主存,只包含取指阶段(包括取指和分析)和执行阶段,所以其指令周期仅包含取指周期执行周期

对于间接寻址的指令,为了取操作数,需要先访问一次主存,取出有效地址,然后再访问主存,取出操作数,所以还需包括间址周期,间址周期介于取指周期和执行周期之间

当 CPU 采用中断方式实现主机和 I/O 设备交换信息时,CPU 在每条指令执行结束前,都要发中断查询信号,如果有中断请求,CPU 则进入中断响应阶段,又称中断周期

这样,一个完整的指令周期应包括取指、间址、执行和中断这四个周期,这些周期都有 CPU 访存操作,只是访存目的不同,取指周期是为了取指令,间址周期是为了取有效地址,执行周期是为了取操作数,中断周期是为了保存程序断点

【指令周期的数据流】

取址周期

取指周期的任务是根据 $PC$ 中的内容从主存中取出指令代码并存放在 $IR$ 中

取指周期的数据流如下图所示,$PC$ 中存放的是指令的地址,根据此地址从内存单元中取出的是指令,并放在指令寄存器 $IR$ 中,取指令的同时,$PC +1$

取指周期的数据流取指周期的数据流向如下:

  1. $PC \rightarrow MAR \rightarrow$ 地址总线 $\rightarrow$ 主存
  2. $CU$ 发出控制信号 $\rightarrow$ 控制总线 $\rightarrow$ 主存
  3. 主存 $\rightarrow$ 数据总线 $\rightarrow MDR \rightarrow IR$
  4. $CU$ 发出读命令 $\rightarrow PC +1$

间址周期

间址周期的任务是取操作数有效地址

以一次间址为例,将指令中的地址码送到 $MAR$ 并送至地址总线,此后 $CU$ 向存储器发读命令,以获取有效地址并存至 $MDR$

一次间址周期的数据流间址周期的数据流向如下:

  1. $Ad(IR)\rightarrow MAR \rightarrow$ 地址总线 $\rightarrow$ 主存
  2. $CU$ 发出读命令 $\rightarrow$ 控制总线 $\rightarrow$ 主存
  3. 主存 $\rightarrow$ 数据总线 $\rightarrow MDR$(存放有效地址)

其中,$Ad(IR)$ 表示取出 $IR$ 中存放的指令字的地址字段

执行周期

执行周期的任务是根据 $IR$ 中的指令字的操作码和操作数通过 $ALU$ 操作产生执行结果

不同指令的执行周期操作不同,因此没有统一的数据流向

中断周期

中断周期的任务是处理中断请求

假设程序断点存入堆栈中,并用 $SP$ 指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据

中断周期的数据流向如下:

  1. $CU$ 控制将 $SP -1,SP \rightarrow MAR \rightarrow$ 地址总线 $\rightarrow$ 主存
  2. $CU$ 发出写命令 $\rightarrow$ 控制总线 $\rightarrow$ 主存
  3. $PC \rightarrow MDR \rightarrow$ 数据总线 $\rightarrow$ 主存(程序断点存入主存)
  4. $CU$(中断服务程序的入口地址) $\rightarrow PC$

【指令执行方案】

一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。出于性能和硬件成本等考虑,可以选用以下三种方案来安排指令的执行步骤

单指令周期

对所有指令都选用相同的执行时间来完成,称为单指令周期方案

此时每一条指令都在固定的时钟周期内完成,指令之间串行执行,即下一条指令只能在前一条指令执行结束之后才能启动,因此,指令周期取决于执行时间最长的指令的执行时间

对于那些本来可以在更短时间内完成的指令,要使用这个较长的周期来完成,会降低整个系统的运行速度

多指令周期

对不同类型的指令选用不同的执行步骤来完成,称为多指令周期方案

指令之间串行执行,即下一条指令只能在前一条指令执行结束之后才能启动,但可选用不同个数的时钟周期来完成不同指令的执行过程,指令需要几个周期就为其分配几个周期,而不再要求所有指令占用相同的执行时间

流水线方案

指令之间可以并行执行的方案,称为流水线方案,其追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程(只在理想情况下,才能达到该效果)

通过在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中

感谢您对我的支持,让我继续努力分享有用的技术与知识点!