2.指令执行过程
指令周期
CPU从主存中取出并执行一条指令的时间称为指令周期,不同指令的指令周期可能不同。指令周期常用若干机器周期来表示,一个机器周期又包含若干时钟周期(也称节拍或T周期,它是CPU操作的最基本单位)。
每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等


上述4个工作周期都有 CPU 访存操作,只是访存的目的不同。
- 取指周期是为了取指令
- 间址周期是为了取有效地址
- 执行周期是为了取操作数
- 中断周期是为了保存程序断点
为了区别不同的工作周期,在CPU内设置4个标志触发器FE、ND、EX和NT,它们分别对应取指、间址、执行和中断周期,并以“1”状态表示有效,分别由1→FE、1→ND、1→EX和1→NT这4个信号控制。
注意
中断周期中的进栈操作是将SP减1,这和传统意义上的进栈操作相反,原因是计算机的堆栈中都是向低地址增加,所以进栈操作是减1而不是加1
指令周期的数据流
取指周期
取指周期的任务是根据 PC 中的内容从主存中取出指令代码并存放在IR中。
PC 中存放的是指令的地址, 根据此地址从内存单元中取出 的是指令, 并放在指令寄存器 IR 中, 取指令的同时, PC 加 1 。
取指周期的数据流向如下:
- PC MAR 地址总线 主存。
- CU 发出读命令 控制总线 主存。
- 主存 数据总线 MDR IR(存放指令)。
- CU 发出控制信号 PC 内容加 1

间址周期
间址周期的任务是取操作数有效地址。
将指令中的地址码送到MAR并送至地址总线,此后CU向存储器发读命令,以获取有效地址并存至MDR。
间址周期的数据流向如下:
- Ad(IR)(或MDR) MAR 地址总线 主存。
- CU发出读命令 控制总线 主存。
- 主存 数据总线 MDR(存放有效地址)。
其中,Ad(IR)表示取出IR中存放的指令字的地址字段。

执行周期
执行周期的任务是取操作数,并根据IR中的指令字的操作码通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。
中断周期
处理中断请求,假设程序断点存入堆栈中,并用SP指示栈顶地址,而且进栈操作是先修改栈顶指针,后存入数据。
中断周期的数据流向如下:
- CU控制将SP减1,SP MAR 地址总线 主存。
- CU发出写命令 控制总线 主存。
- PC MDR 数据总线 主存(程序断点存入主存)。
- CU(中断服务程序的入口地址) PC。

指令执行方案
单指令周期
- 所有指令都选用相同的执行时间来完成,每条指令都在一个时钟周期内完成,指令间串行执行
- 时钟周期取决于执行时间最长的指令的执行时间
- 对于那些本来可以在更短时间内完成的指令, 要使用这个较长的周期来完成,会降低整个系统的运行速度
多指令周期
- 对不同类型的指令选用不同的执行步骤[1],指令间串行执行
- 指令需要几个周期就为其分配几个周期,不再要求所有指令占用相同的执行时间。
流水线方案
指令之间可以并行执行的方案,称为流水线方案,其追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程(只在理想情况下才能达到该效果)。这种方案通过在每个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
不同个数的时钟周期完成不同指令的执行过程 ↩︎
