王道考研计算机组成原理第五章中央处理器
CPU由运算器和控制器构成,其主要功能有:
运算器主要是对数据进行加工,控制器协调并控制计算机各部件执行程序的指令序列,基本功能包括取指令、分析指令、执行指令、中断处理

运算器的核心就是ALU算数逻辑单元,算术逻辑单元:主要功能是进行算术/逻辑运算,很多时候我们会把要运算的数据提前存放在某些寄存器当中,所以运算器还会提供通用寄存器组:如AX、BX、CX、DX、SP等,用于存放操作数(包括源操作数、目的操作数及中间结果)和各种地址信息等。SP是堆栈指针,用于指示栈顶的地址。
如上图,共给出了4个通用寄存器编号为R0-R3,AH-AL指的是AX通用寄存器的高位和低位,BH-BL也是类似。寄存器里面的内容既有可能作为输入数据A,也有可能作为输入数据B,所以每个寄存器需要两组线路来完成数据的传输。每个寄存器和ALU之间都有一个专门的数据通路,称为专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路。(只要两个部件之间有数据的流动,那么我们就在这两个部件之间建立一个专门的连接线路)
问题:
解决方法:

CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共的通路上。

在CPU的内部设置一条总线,所有寄存器都连接到这条总线上,如上图,R0out为1的时候R0的数据会被输出到这条数据总线上,若我们想把R0的数据复制一份到R2上,我们只需要让R2in为1,这样R2的输入通路(绿色线)会被连通。out是输出信号,in是输入信号。
CPU内部单总线方式优点:结构简单,容易实现,但数据传输存在较多冲突的现象,性能较低。例如我们要对R0和R1的数据进行加法操作, R0和R1的数据同时送到总线上, ALU无法判断A和B是什么值。所以我们给其中一端加了一个暂存寄存器,这样我们将R0的数据先送到数据总线,再送到暂存寄存器当中,接下来在将R1的数据送到数据总线再送到B就不会产生冲突。
暂存寄存器用于暂存从主存读来的数据,这个数据不能存放在**通用寄存器(R0、R1、R2、R3)**中,否则会破坏其原有内容。如:两个操作数分别来自主存和R0,最后结果存回R0,那么从主存中取来的操作数直接放入暂存暂存器,而不放入通用寄存器,这样就不会破坏运算前R0的内容。同时在ALU之后也放一个暂存寄存器,这样当R0送到总线上的信号稳定之后,ALU会把计算的结果先放到暂存寄存器,等ALU的结果稳定之后再送回数据总线,将结果放回R0。


上图中,左边是运算器,右边是控制器,控制器组成如下:
取出指令之后,会放入指令寄存器IR当中,指令的地址码指明了操作数的存放地址,所以地址码的信息需要输出到内部总线上,而操作码部分会送给指令译码器ID,译码器的某个输出端被选通,这样就可以判断当前指令类型,进而决定接下来执行的是什么微操作,所以译码器的输出信号会作为微操作信号发生器的输入信号,微操作执行要有先后次序,所以控制器还提供时序系统产生时序信号,再根据PSW标志,就可以确定下一个微操作到底是什么。
假如当前的指令地址码直接指明了操作数在内存中的存放地址,那么微操作信号发生器需要给AdIRout有效信号,把地址输出到内部总线,同时给MARin有效信号,这样这个地址信息才可以输入到MAR当中,MAR中的地址信息需要通过地址总线传送给主存,然后主存根据地址信号去查找相应的主存单元,找到数据之后主存通过数据总线会将其放到MDR当中,这样就完成了对某个主存地址的读操作。MDRinE表示外部总线输入线路是否有效,MDRin表示CPU内部总线输入线路是否有效。MDRoutE和MDRout相同。
运算器主要由ALU和一系列寄存器组成,控制器主要由一系列寄存器和控制单元CU组成,CPU内部有些寄存器是用户可见的,有些是用户不可见的,用户可见的意思是说程序员可以通过汇编语言来改变某一些寄存器内部的值,如上图,用户可见的寄存器用灰色颜色标注。

总的来说,CPU由ALU、寄存器、CU、中断系统组成。

指令周期:CPU从主存中每取出并执行一条指令所需的全部时间。

一个指令周期可以被划分为取指周期和执行周期两个部分,其中取指周期会根据PC当前所指向的位置取出当前要执行的这一条指令,并且PC+1指向下一条应该执行的指令,另外还会对指令进行译码,也就是对指令进行分析,之后执行指令,当执行完成之后就可以取下一条指令,也就是进入下一个指令周期。所以:一个指令周期至少要由取指周期和执行周期两个部分组成。指令周期常常用若干机器周期来表示,机器周期又叫CPU周期。

CLK指的是时钟脉冲,如上图红色方波就是一个时钟脉冲,例如CPU的主频是3.0GHz,意味着CPU每秒可以发射3.0G次的时钟周期,我们取指令的过程需要分为几个微操作的步骤来执行,如果取指令的过程需要4个微操作,那就意味着取指令需要消耗4个时钟周期,如上图,T0到T3共4个时钟周期分别执行了4个微操作之后,我们才完成了取指令这个动作。
每个指令周期内机器周期数可以不等,每个机器周期内的节拍(时钟周期)数也可以不等。


思考:取值周期、间址周期、执行周期、中断周期CPU做的事情是不一样的,那么CPU如何区分当前到底处于哪个周期呢?

为了解决上述问题,我们设置4个触发器,一个触发器可以存放一个二进制位0或者1,我们可以设置4个触发器来分别表示当前处于哪个周期:
我们来探讨在四个周期分别要做什么事情:

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

间址周期的任务是取操作数的有效地址。
执行周期的任务是根据IR中的指令字的操作码和操作数通过ALU操作产生执行结果。不同指令的执行周期操作不同,因此没有统一的数据流向。

假设当前程序由指令1、指令2、指令3、指令4组成,假设我们正在执行指令2,那么PC的值会指向指令3,指令2执行结束之后会进行中断检查,如果此时有中断信号需要处理,那么在执行了指令2之后就需要暂停执行当前程序,转而去执行处理这个中断的中断处理程序,假设这个中断处理程序是由指令x、指令y、指令z组成,这就意味着指令2执行结束之后会去执行中断处理程序的指令x,指令y、指令z,执行完中断处理程序之后,我们又需要回来继续执行指令3,为了保证中断处理程序执行之后我们还能找到指令3的位置,因此我们需要将当前程序的中断点保存,本质上就是要保存PC的值,因为PC指向的就是指令3。(本质就是将PC的值压入栈顶)
中断:暂停当前任务去完成其他任务。为了能够恢复当前任务,需要保存断点。一般使用堆栈来保存断点,这里用SP表示栈顶地址,假设SP指向栈顶元素,进栈操作是先修改指针,后存入数据。中断周期的任务是处理中断请求
一个指令周期通常要包括几个时间段(执行步骤),每个步骤完成指令的一部分功能,几个依次执行的步骤完成这条指令的全部功能。
数据通路:数据在功能部件之间传送的路径称为数据通路,数据通路描述了信息从哪里开始、中间经过哪些部件、最后传到哪里。控制信号是由控制部件产生的,对于各种类型的寄存器来说,有两种控制信号:1.数据输入 2.数据输出,这些信号都是由控制器发出的,所以ACCin、ACCout 、R0in、R0out ,所有的控制信号事实上都是和微操作信号发生器有对应的连线,微操作信号发生器发出不一样的信号就可以使得各个寄存器之间有数据的流动。

如上图数据通路采用了CPU内部单总线方式
数据流动大致上分为三类:


从主存当中读取指令,PC指明了我们要读取的指令存放的地址,所以刚开始将PC的内容放到MAR中,接下来对主存进行读操作,应该读的地址存放在MAR当中,MAR是通过地址总线传送给主存的(事实上应该有一个控制信号控制MAR的内容送到主存,但是图中没画),接下来主存根据MAR所指示的地址读出相应的数据,然后把这个数据放到MDR当中(图中绿色数据线),接下来将MDR的数据放入IR当中。

当我们在执行算数或者逻辑运算时,我们的数据有可能流向ALU的,比如执行一条加法指令,其中一个数已经存放在ACC里面了,而另一个操作数会由加法指令直接指明地址,所以首先根据指令的地址码部分传送到MAR当中,要实现这个操作我们要保证IRin和MARin有效,当然也可以让MDRout和MARin有效(因为取值令结束之后MDR和IR当中都有地址信息),接下来主存进行读操作,主存根据MAR所指示的地址读出相应的数据,然后把这个数据放到MDR当中,之后先把这个数放到暂存寄存器Y当中。

ADD [目的操作数] [源操作数]
ADD (R0),R1
R1 没有括号,表示这个操作数就是直接存放在R1这个寄存器当中的
(R0) 有括号,表示需要进行一次间接寻址,R0里面存放的是这个操作数在主存当中的存储地址
结果又会放回目的操作数R0所指向的主存单元中
分析指令功能和指令周期
写出各阶段的指令流程
取指周期
间址周期

- 需要读出R0所指向的主存单元的数据,所以第一个操作将R0里面的值送到MAR中,所以控制器只需要让R0~out~、MAR~in~有效
- 第二个操作根据MAR的地址从主存中取出数据,并将数据放入MDR当中。所以控制器只需要让MAR~out~、MemR、、MDR~in~E有效
- 第三个操作将MDR中的数据先放到暂存寄存器Y中,所以控制器只需要让MDR~out~、Y~in~有效

- 其中一个加法操作数已经被我们放到了Y暂存寄存器当中,而另一个操作数是在R1这个寄存器当中,所以控制器只需要让R1~out~、ALU~in~有效,同时CU控制单元向ALU发送ADD加法控制信号,我们将加法的结果放到Z寄存器当中
- 我们还要将结果放回R0所指向的主存单元当中,所以我们先将加法的结果先放到MDR当中,所以控制器只需要让Z~out~、MDR~in~有效
- 第三个操作将MDR的数据写回主存,所以控制器只需要MDR~out~E、MemW、MAR~out~有效
- 在间址周期阶段,我们已经将R0的内容写到MAR里面了,所以MAR此时就是存放的R0的数据,也就是说MAR已经指向了我们最终想要写入的那个主存单元,所以需要让MAR~out~有效

如果我们想要取出一条指令,需要发出哪些控制信号?

先来看第一题:
d能自动+1,所以d是PC
PC的内容是地址,会送给MAR,所以c是MAR
b与微操作信号发生器相连,需要把数据直接发送给微操作信号发生器的只有指令寄存器IR
与主存相连的寄存器是MAR和MDR,c是MAR,则a就是MDR

再来看第二题:

再来看第三题:虽然问的是运算器和主存之间的通路,但是运算器并不具备存数据的能力,运算器想要使用的数据会被放到ACC累加寄存器当中,所以题目其实问的是ACC和主存之间的存取访问的数据通路
取数据:
存数据:

再来看第四题:
再来看第五题:

再来看第六题:

来学控制前之前,我希望大家记住一点:这tm确实够复杂,但是它不是重点,第五章的重点一定是 流水线、数据通路,硬布线、微程序控制器一般出个选择题。

在一个机器周期内,我们需要若干个微操作序列来完成这个机器周期内需要完成的一些事,每个机器周期又由若干个时钟周期组成,每个时钟周期又称为一个节拍,控制单元CU会在每个节拍内发出一个或者多个微命令用来完成对应的微操作,如:微命令1使得PCout、MARin有效,完成对应的微操作1 (PC)->MAR。
任何一条指令在取指周期、间指周期、中断周期内执行的微操作所有的指令都是一样的,只有执行执行周期内微操作序列可能会出现一些区别,但是我们可以根据指令操作码,目前的机器周期(处于哪一个机器周期),节拍信号(处于第几个节拍),机器状态条件,就可以确定现在这个节拍下应该发出哪些微命令。

这样控制单元CU就可以确定在当前这个节拍下应该发出什么微命令。所以每个输出的控制信号对应一个微命令,也就是对应一个微操作,如上图每一条输出线对应一个微命令。如:要让C1对应微操作(PC)->MAR,则只需要将C1这根线接到PCout、MARin即可。

无论是什么指令,取指周期、间址周期都需有上图微操作命令。
取值周期(所有指令都一样)
间址周期(所有指令都一样)
执行周期(不同的周期各不相同)

(1)、(2)微操作可以放在一个节拍
(3)必须在(1)之后
(4)必须在(3)之后
(5)必须在(4)之后
只要将PC的值放入MAR,就可以让PC的值+1,所以(6)可以在(1)之后



CLA 只需要一个微操作,这个指令的微操作很少,我们可以将其在末尾的节拍内完成,所以放到T2节拍
访存指令有可能进入间址周期,而非访存指令不需要访问主存,所以肯定没有间址周期。
我们用高级语言写的代码会被翻译成与之对等的一系列机器指令,所以我们平常所说的程序,其实就是由一系列指令序列组成的,每一条指令的执行过程中这条指令又会被细分为一个个微操作,就是由一条微操作序列来完成一条指令。

微程序:由微指令序列组成,微指令序列由微操作组成,每一种指令对应一个微程序。
指令是对程序执行步骤的描述,微指令是对指令执行步骤的描述
因此当CPU在执行一条机器指令的时候,其实就是要执行这条机器指令所对应的微程序
微命令与微操作一 一对应(微命令是指执行微操作发出的控制信号,可以理解为微命令=微操作),微指令中可能包含多个微命令。机器指令和微程序也是一一对应的,一种机器指令会对应一个微程序,一个微程序会由多个微指令序列组成。所以可以说机器指令是对微指令的封装。

每一种微指令会对应相应的微操作,因此每一条微指令需要有 操作控制 的字段,用来表示这条微指令对应的微操作是哪几个,另外微指令还需要有 顺序控制 的字段,用来指明下一条微指令的地址。

在控制单元CU内部有:
工作流程:
所有指令的取指周期、间址周期、中断周期所对应的微指令序列都一样,可以共享使用。


有的微命令可以并行执行,因此一条微指令可以包含多个微命令
相容性微命令:可以并行完成的微命令。
互斥性微命令:不允许并行完成的微命令。
微指令分为三种:


水平型微指令执行一条微指令可以并行的完成多个微命令,垂直型微指令执行一条指令只能完成一个微命令。
微指令的编码方式又称为微指令的控制方式,它是指如何对微指令的控制字段进行编码,以形成控制信号。编码的目标是在保证速度的情况下,尽量缩短微指令字长。
直接编码(直接控制)方式
在微指令的操作控制字段中,每一位代表一个微操作命令,例如某位为"1"表示该控制信号有效
例如下图中最左边比特为1,表示(PC)->MAR这个微操作有效,最右边比特为1,表示1->R这个微操作有效
优点:简单、直观,执行速度快,操作并行性好
缺点:微指令字长过长,n个微命令就要求微指令的操作字段有n位,造成控制存储器容量极大。


如上图,(PC)->MAR和1->R这两个微操作是可以并行的执行的,所以我们把这两个微操作放到不同的段里面,这两个微操作在段内会有与之相对应的编码,这个编码经过译码器的译码就会发出相应的控制信号,并且这两个的控制信号是并行的发出的。
(PC)->MAR和(PC)+1->PC这两个微操作是互斥的,可以放到同一个段。

如图,字段2经过译码器译码之后并不是直接发出这个字段所对应的控制信号,而是会把这个译码器的输出信号输送给下一级的译码器,经过下一级的译码器再次处理后才发出最终的控制信号。

如何确定下一条微指令的存放地址呢?
直接根据微指令的下地址字段指出🔥
根据机器指令的操作码形成
增量计数器法🔥
分支转移
转移方式:指明判别条件
转移地址:指明转移成功后的去向




和硬布线控制器的节拍安排相同,但是硬布线控制器最后一步是将指令的操作码送给指令译码器ID,但是对于微程序控制器来说,最后一步是将指令操作码送给微地址形成部件。

在取指阶段,我们要做的就是先执行微指令a、再执行微指令b、再执行微指令c,但是这三条微指令的存放地址如何确定呢?


一条指令的执行过程可以分成多个阶段(或过程)。根据计算机的不同,具体的分法也不同。最简单的划分方法是取指、分析、执行三个阶段。

设取指、分析、执行,三个阶段的时间都相等为t,按以下几种执行方式分析n条指令单执行时间:

一次重叠执行方式:第一条指令的第3个阶段和第二条指令的第2个阶段有重叠

注:也可以把每条指令的执行过程分成4个或者5个阶段,分成5个阶段是比较常见的做法

如上图,I1指令在t0 ~ t1 时间是取指令,在 t1 ~ t2 时间是译码…

如上图,我们先画出这n条指令的时空图,第1个指令耗时为k▲t,在第1个指令完成执行后再过▲t第2个指令完成执行,之后再过▲t第3个指令执行完成,所以后续(n-1)条指令只需要再花 (n-1)▲t。
处理完成
n
个任务所用的时间为
T
k
=
(
k
+
n
−
1
)
Δ
t
流水线实际吞吐率
T
P
=
n
(
k
+
n
−
1
)
Δ
t
当
n
−
>
∞
,
得到最大吞吐率
T
P
m
a
x
=
1
Δ
t
处理完成n个任务所用的时间为T_k = (k+n-1) \Delta t \\ 流水线实际吞吐率 TP = \frac{n}{(k+n-1) \Delta t} \\ 当n->∞,得到最大吞吐率 TP_{max} = \frac{1}{\Delta t}
处理完成n个任务所用的时间为Tk=(k+n−1)Δt流水线实际吞吐率TP=(k+n−1)Δtn当n−>∞,得到最大吞吐率TPmax=Δt1
一般取▲t = 一个时钟周期,一条指令的执行被分为多个阶段,每个阶段对应一个机器周期,一个机器周期可能包含多个时钟周期,最理想的情况就是一个机器周期包含一个时钟周期。

如果不使用流水线,则完成一条指令需要k▲t,完成n条指令需要 T0=nk▲t
T
k
=
(
k
+
n
−
1
)
Δ
t
实际加速比
S
=
k
n
Δ
t
(
k
+
n
−
1
)
Δ
t
=
k
n
k
+
n
−
1
当
n
−
>
∞
,
得到最大加速比
S
m
a
x
=
k
T_k = (k+n-1) \Delta t \\ 实际加速比 S = \frac{kn \Delta t}{(k+n-1)\Delta t} = \frac{kn}{k+n-1} \\ 当n->∞,得到最大加速比 S{max} = k
Tk=(k+n−1)Δt实际加速比S=(k+n−1)ΔtknΔt=k+n−1kn当n−>∞,得到最大加速比Smax=k


上图是5段式流水线,一条指令的执行被分成了5个阶段:
CPU里面有两种Cache,一种是专门用来存储指令的,另一种是专门用来存储数据的,这两种访问可以并行进行。
每个阶段的耗时都不一样,为了方便流水线的设计,将每个阶段的耗时取成一样,以最长的耗时为准,即此处应将机器周期设置为100ns。所以每个阶段的耗时都为100ns,如上图当耗时200ns进入EX阶段,但是ID阶段实际只需要80ns,所以为了使ID阶段的数据刚好在200ns流出,我们要在各个阶段的中间添加一个缓冲寄存器(如上图蓝色框,又称为锁存器),作用是将本阶段的结果先暂存在缓冲寄存器里面,等到时间到达输送给下一个阶段。
结构相关(资源冲突):由于多条指令,在同一时刻征用同一资源而形成的冲突,称为结构冲突。其实就是相当于操作系统中的互斥

结合5段式指令流水线,第一个阶段取指IF阶段,第二个阶段指令译码ID阶段,除了译码之外会对寄存器进行读操作,第三个阶段指令执行EX阶段,主要使用ALU算数逻辑单元,第四个阶段访存M阶段,第五个阶段写回WB阶段。如上图Instr3指令,在第一阶段取指的阶段会需要访问主存,然而Load指令在第四阶段访存M阶段也会需要访问主存,所以这两个指令同时访问就会造成资源的冲突。解决办法如下:

本质上就是操作系统的互斥问题,两个人共同使用同一资源,我们可以让其中一人等待。或者多增加一个资源,两个资源可以并行使用就可以了。
数据相关(数据冲突):指在一个程序中存在,必须等前一条指令执行完才能执行后一条指令的情况,则这两条指令为数据相关。也就是操作系统中的同步。简单来说,当一个程序中下一条指令会用到当前指令计算出的结果,此时这两条指令就会发生数据冲突。有可能上一条指令的结果还没计算出来,下一条指令就会将原来的结果拿走。
对应《2023王道计算机组成原理考研复习指导》252页 —— <流水线的冒险与处理>,这部分结合看书!
解决办法:
控制相关(控制冲突):当流水线遇到转移指令和其他改变PC值的指令而造成断流时,会引起控制相关。

如上图,我们要执行条件转移指令,这个指令被存放在12的位置,下一条指令顺序存储指令是放在16的位置,也就是每个指令占4B,当条件转移指令判断条件满足时,可能会跳转到1000这个位置的指令,也就是让PC的值直接变为1000,那么我们的指令16、指令20、指令24是不应该执行的,这就会造成指令的断流,会引起控制相关
解决办法:

部件功能级、处理机级和处理机间级流水
单功能流水线和多功能流水线
动态流水线和静态流水线
线性流水线和非线性流水线
超标量技术:每个时钟周期内可以并行的发多条独立指令

如上图红框,在一个时钟周期内,我们发射了三条独立指令,显然,如果我们要同时运行三条指令,这意味着我们至少要配置三个指令寄存器IR和ALU,因此
可以说使用了空分复用技术,我们增加了多个功能部件,所以支持同一时刻多个操作并行来干
超流水技术:把一个时钟周期再进行分段(3段)

如上图将一个时钟周期分成了三段(图中蓝线),在一个时钟周期内的不同时间点,会发射出三条指令,这意味着在一个时钟周期内,一个功能部件可能被使用多次(3次)【可以说使用了时分复用技术】
这里其实应该说是机器周期,因为取址执行访存阶段的耗时都是定义为机器周期,但是流水线最理想的情况下,一个机器周期只包含一个时钟周期,所以这里会说时钟周期

上图只把指令的执行过程分为了4个阶段,没有写访存M阶段,在执行EX阶段有三个灰色的框。
由编译程序挖掘出指令间潜在的并行性,将多条能并行操作的指令组合成一条超长的指令,这就是为什么叫超长指令字。这种超长的指令具有多个操作码字段


考试中常见的5类指令:
运算类指令的执行过程如下:

如上图运算类指令:
#996前面加#表示立即数对于运算类的指令,我们如何把一条指令的工作分在不同阶段执行呢?
ADD Rs,Rd :将两个操作数放置A和B锁存器中ADD #996,Rd :将立即数放入Imm锁存器
LOAD Rd,996(Rs):在Rs寄存器的值的基础上+996来取得有效地址,将有效地址对应在主存中的数据取出放到Rd寄存器LOAD指令的执行过程:

STORE Rs,996(Rd):把Rs寄存器所指明的内容,将其存到主存当中,存放的目的地址是Rd寄存器的值的基础上+996STORE指令的执行过程:

转移类的指令无论是条件转移还是无条件转移指令,都是采用相对寻址,也就是相对于PC偏移多少这样的寻址方式:
beq Rs,Rt,#偏移量 :若(Rs) == (Rt),则 (PC)+指令字长+(偏移量×指令字长) ->PC,否则 (PC)+指令字长->PC
bne Rs,Rt,#偏移量 :若(Rs) != (Rt),则 (PC)+指令字长+(偏移量×指令字长) ->PC,否则 (PC)+指令字长->PC
条件转移指令的执行过程:
很多教材把写回PC的功能段称为"WrPC段",其耗时比M段短,可安排在M段时间内完成

无条件转移指令:jmp #偏移量 ,(PC)+指令字长+(偏移量×指令字长)->PC,
无条件转移指令的执行过程:

上图给出了4条用汇编语言描述的指令,这4条指令要完成的操作是:a+b,将结果赋给x,它们的存储单元地址分别为[a]、[b]、[x]
问这4条指令执行的过程中,I3的ID段和I4的IF段被阻塞的原因各是什么(如上图黑框)?
理想情况下I3的ID段是应该在I3的IF段之后执行,我们被迫把ID段推迟到7时刻,对于I1、I2 LOAD取数指令,当我们在WB阶段才会将取出的数写回寄存器,也就是将a、b取出放到R1、R2当中。而I3在ID阶段除了译码,还需要从R1、R2当中取出数进行运算,因此I3的ID阶段必须要在I1和I2的WB阶段之后执行,这就是I3的ID段被阻塞的原因。I3与I1和I2存在数据相关。
理想情况下,I4的IF段应该在4时刻进行,I3的IF段锁存器会放I3指令,但是由于数据相关的存在,I3无法进入下一个ID阶段,所以I3的指令数据会一直存放在IF段锁存器,所以如果此时开始执行I4的IF阶段,会覆盖IF段锁存器的内容。这就是I4的IF段被阻塞的原因。
新考点,咸鱼学长说要考也只会考选择题,上面的指令流水线才是大题重中之重。22年新考纲知识点,结合书本来学习即可。