408 真题做题本·计算机组成原理部分
第 5 章 中央处理器 (CPU)
5.1 CPU 的功能和基本结构
- 【2010】下列寄存器中, 汇编语言程序员可见的是( )。
A. 存储器地址寄存器(MAR)
B. 程序计数器(PC)
C. 存储器数据寄存(MDR)
D. 指令寄存器(IR)
答案: B
解析: 汇编语言程序员可见的寄存器,是指可以在汇编程序中直接或间接使用、其内容会影响程序执行的寄存器。程序计数器 PC 保存下一条将要执行的指令地址,程序可通过转移、调用、返回等指令改变其内容,因此属于程序员可见寄存器。
MAR、MDR 和 IR 都是 CPU 内部完成取指、访存和指令执行所需的工作寄存器,通常不能由汇编指令直接访问,属于程序员不可见寄存器。因此选 B。
- 【2016】某计算机主存空间为4GB, 字长为32 位, 按字节编址, 采用32 位字长指令字格式。若指令按字边界对齐存放, 则程序计数器(PC) 和指令寄存器(IR) 的位数至少分别是( )。
A. 30、30
B. 30、32
C. 32、30
D. 32、32
答案: B
解析: 主存空间为 ,按字节编址。由于指令字长为 32 位,即每条指令占 4 B,且按字边界对齐,因此主存中最多可存放的指令条数为
PC 用于指出下一条指令的位置,只需区分 个指令位置,所以至少需要 30 位;IR 必须容纳完整的 32 位指令,所以至少需要 32 位。因此选 B。
- 【2019】下列有关处理器时钟脉冲信号的叙述中,错误的是( )。
A. 时钟脉冲信号由机器脉冲源发出的脉冲信号经整形和分频后形成
B. 时钟脉冲信号的宽度称为时钟周期,时钟周期的倒数为机器主频
C. 时钟周期以相邻状态单元间组合逻辑电路的最大延迟为基准确定
D. 处理器总是在每来一个时钟脉冲信号时就开始执行一条新的指令
答案: D
解析: 时钟信号通常由机器脉冲源产生,经整形、分频后得到满足 CPU 工作要求的周期性脉冲,因此 A 正确。时钟周期是相邻有效时钟沿之间的时间间隔,其倒数为时钟频率(机器主频),B 的表述意图正确。
同步时序电路中,一个时钟周期必须足以容纳“状态元件输出—组合逻辑运算—下一状态元件建立”的最长传播过程,因此应以相邻状态元件之间组合逻辑电路的最大延迟为主要依据确定,C 正确。
一条指令通常需要一个或多个时钟周期。即使采用流水线,也只有在流水线进入稳定状态且没有阻塞时,才可能平均每个时钟周期开始一条新指令,并非每来一个时钟脉冲都必然开始执行一条新指令。因此 D 错误。
- 【2021】下列寄存器中, 汇编语言程序员可见的是( )。
I. 指令寄存器 II. 微指令寄存器 III. 基址寄存器 IV. 标志/状态寄存器
A. 仅I、II
B. 仅I、IV
C. 仅II、IV
D. 仅III、IV
答案: D
解析: 基址寄存器可用于形成有效地址,汇编程序可通过相关寻址方式使用它;标志/状态寄存器中的进位、零、符号、溢出等标志会被条件转移等指令检测,因此二者均属于程序员可见寄存器。
指令寄存器 IR 用于暂存当前正在执行的指令,微指令寄存器用于保存当前微指令,它们都是控制器内部工作寄存器,不能由普通汇编程序直接访问。因此仅 III、IV 正确,选 D。
- 【2023】数据通路由组合逻辑元件(操作元件) 和时序逻辑元件(状态元件) 组成。下列给出的元件中, 属于操作元件的是( )。
I. 算术逻辑部件(ALU) II. 程序计数器(PC) III. 通用寄存器组(GPRs) IV. 多路选择器(MUX)
A. 仅I, II
B. 仅I, IV
C. 仅II, III
D. I, II, IV
答案: B
解析: 操作元件通常是组合逻辑元件,其输出只由当前输入决定,本身不保存状态。ALU 完成算术与逻辑运算,多路选择器 MUX 根据选择信号从多个输入中选出一路输出,二者均属于操作元件。
PC 和通用寄存器组都能保存二进制信息,其状态在时钟作用下更新,属于时序逻辑元件,也称状态元件。因此仅 I、IV 正确,选 B。
5.2 指令执行过程
- 【2011】假定不采用Cache 和指令预取技术,且机器处于“开中断”状态。在下列有关指令执行的叙述中, 错误的是( )。
A. 每个指令周期中CPU 都至少访问内存一次
B. 每个指令周期一定大于或等于一个CPU 时钟周期
C. 空操作指令的指令周期中任何寄存器的内容都不会被改变
D. 当前程序在每条指令执行结束时都可能被外部中断打断
答案: C
解析: 不采用 Cache 和指令预取技术时,每条指令都必须从主存取出,因此每个指令周期至少访问主存一次,A 正确。
指令周期由一个或多个时钟周期组成,不可能短于一个 CPU 时钟周期,B 正确。
空操作指令虽然不完成显式的数据运算,但在取指过程中 PC 会更新,IR 也会装入该空操作指令,因此并非所有寄存器内容都不变,C 错误。
机器处于开中断状态时,CPU 一般在一条指令执行结束后检查并响应外部中断请求,因此当前程序在每条指令结束处都有可能被打断,D 正确。
- 【2019】某指令功能为 ,其两个源操作数分别采用寄存器、寄存器间接寻址方式。对于下列给定部件, 该指令在取数及执行过程中需要用到的是( )。
I. 通用寄存器组(GPRs) II. 算术逻辑单元(ALU) III. 存储器(Memory) IV. 指令译码器(ID)
A. 仅I、II
B. 仅I、II、III
C. 仅II、III、IV
D. 仅I、III、IV
答案: B
解析: 该指令的两个源操作数分别为 和 。
取出 以及作为间接地址的 ,需要访问通用寄存器组;根据 中的地址读取主存操作数,需要访问存储器;将两个操作数相加,需要使用 ALU。因此 I、II、III 均需要。
指令译码器用于译码阶段识别操作码和有关字段,题目限定的是“取数及执行过程中”,故不把指令译码器计入。因此选 B。
5.3 数据通路的功能和基本结构
- 【2010】下列选项中, 能缩短程序执行时间的措施是( )。
I. 提高CPU 时钟频率 II. 优化数据通路结构 III. 对程序进行编译优化
A. 仅I、II
B. 仅I、III
C. 仅II、III
D. I、II、III
答案: D
解析: 程序的 CPU 执行时间可表示为
。
提高 CPU 时钟频率可缩短时钟周期;优化数据通路结构可减少关键路径延迟或降低平均 CPI;编译优化可以减少指令条数,也可能通过指令调度降低流水线阻塞。因此三种措施都有可能缩短程序执行时间,选 D。
- 【2016】单周期处理器中所有指令的指令周期为一个时钟周期。下列关于单周期处理器的叙述中,错误的是( )。
A. 可以采用单总线结构数据通路
B. 处理器时钟频率较低
C. 在指令执行过程中控制信号不变
D. 每条指令的CPI 为1
答案: A
解析: 单周期处理器要求每条指令从取指到执行完成都在一个时钟周期内完成,因此同一周期内往往需要同时进行多项数据传送和运算。单总线结构一次只能完成一路总线传送,通常需要把一条指令拆成多个节拍,因而不适合实现真正的单周期数据通路,A 错误。
单周期处理器的时钟周期必须按照执行时间最长的指令确定,关键路径较长,所以可采用的时钟频率通常较低,B 正确。一个时钟周期内控制信号由当前指令译码结果产生并保持稳定,C 正确。所有指令均在一个时钟周期完成,因此每条指令的 CPI 都为 1,D 正确。
- 【2021】下列关于数据通路的叙述中,错误的是( )。
A. 数据通路包含ALU 等组合逻辑(操作) 元件
B. 数据通路包含寄存器等时序逻辑(状态) 元件
C. 数据通路不包含用于异常事件检测及响应的电路
D. 数据通路中的数据流动路径由控制信号进行控制
答案: C
解析: 数据通路是指指令执行过程中数据所经过的路径以及路径上的部件。它既包括 ALU、多路选择器等组合逻辑操作元件,也包括寄存器、程序计数器等时序逻辑状态元件,因此 A、B 正确。
数据通路中的各条传送路径及部件操作由控制器发出的控制信号选择和驱动,D 正确。
CPU 在执行指令时还需要检测溢出、非法操作码、地址越界等异常条件,并在异常发生时保存有关状态、形成异常入口地址等。这些检测与响应所需的有关电路属于处理器数据通路及其控制的一部分,不能笼统地说数据通路不包含异常检测和响应电路。因此 C 错误。
- 【2009】某计算机字长16 位, 采用16 位定长指令字结构, 部分数据通路结构如下图所示。上图中所有控制信号为1 时表示有效、为0 时表示无效。例如控制信号MDRinE 为1 表示允许数据从DB 打入MDR, MDRin 为1 表示允许数据从内总线打入MDR。假设MAR 的输出一直处于使能状态。加法指令“ADD(R1), R0”的功能为(R0) + ((R1)) →(R1), 即将R0 中的数据与R1 的内容所指主存单元的数据相加, 并将结果送入R1 的内容所指主存单元中保存。下表给出了上述指令取指和译码阶段每个节拍(时钟周期) 的功能和有效控制信号,请按表中描述方式用表格列出指令执行阶段每个节拍的功能和有效控制信号。
| 时钟 | 功能 | 有效控制信号 |
|---|---|---|
| C1 | MAR ← (PC) | PCout, MARin |
| C2 | MDR ← M(MAR),PC ← (PC)+1 | MemR, MDRinE, PC+1 |
| C3 | IR ← (MDR) | MDRout, IRin |
| C4 | 指令译码 | 无 |
答案: 执行阶段的一种正确控制序列如下。
| 时钟 | 功能 | 有效控制信号 |
|---|---|---|
| C5 | MAR ← (R1) | R1out, MARin |
| C6 | MDR ← M(MAR) | MemR, MDRinE |
| C7 | A ← (R0) | R0out, Ain |
| C8 | AC ← (A) + (MDR) | MDRout, Add, ACin |
| C9 | MDR ← (AC) | ACout, MDRin |
| C10 | M(MAR) ← (MDR) | MDRoutE, MemW |
解析: 指令功能可分解为“形成操作数地址—读主存操作数—完成加法—写回主存”四个步骤。
首先,R1 中保存的是主存操作数地址,因此令
有效,将
的内容送入
。随后通过外部地址总线访问主存,令
有效,把
读入
由于ALU 的一个输入端来自暂存寄存器A,另一个输入端来自内总线,因此先令
有效,将
中的操作数暂存在A 中;再令
有效,完成
最后,先将运算结果由AC 经内总线送入MDR,再通过外部数据总线将MDR 的内容写回MAR 所指的主存单元。MAR 中的地址在此期间保持不变,故最终实现
- 【2013】某计算机采用16 位定长指令字格式,其CPU 中有一个标志寄存器,其中包含进位/借位标志CF、零标志ZF 和符号标志NF。假定为该机设计了条件转移指令, 其格式如下:
| 位段 | 15~11 | 10 | 9 | 8 | 7~0 |
|---|---|---|---|---|---|
| 字段 | 00000 | C | Z | N | OFFSET |
其中, 00000 为操作码OP;C、Z 和N 分别为CF、ZF 和NF 的对应检测位, 某检测位为1 时表示需检测对应标志位, 需检测的标志位中只要有一个为1 就转移, 否则不转移。例如, 若C = 1,Z = 0, N = 1, 则需检测CF 和NF 的值, 当CF = 1 或NF = 1 时发生转移;OFFSET 是相对偏移量, 用补码表示。转移执行时, 转移目标地址为(PC) + 2 + 2 × OFFSET;顺序执行时, 下条指令地址为(PC) + 2。请回答下列问题。
(1) 以下是该指令对应的数据通路示意图, 要求给出图中部件①∼③的名称或功能说明。
答案:
① 指令寄存器IR;
② 左移一位部件,即实现
③ 加法器,用于计算转移目标地址
解析: 图中①内部给出了OP、C、Z、N 和OFFSET 等指令字段,说明①保存当前指令,因此是指令寄存器IR。
OFFSET 是8 位补码相对偏移量。题目规定目标地址为
所以OFFSET 先经过符号扩展,再由②左移一位,实现乘2。图中上方加法器先计算顺序地址
,③再将该顺序地址与左移后的偏移量相加,得到转移目标地址。多路选择器依据条件检测结果,在顺序地址和转移目标地址之间进行选择,并把选中的地址写回PC。
- 【2015】某16 位计算机的主存按字节编码, 存取单位为16 位;采用16 位定长指令字格式;CPU采用单总线结构, 主要部分如下图所示。图中R0~R3 为通用寄存器;T 为暂存器;SR 为移位寄存器, 可实现直送(mov)、左移一位(left) 和右移一位(right)3 种操作, 控制信号为SRop, SR 的输出由信号SRout 控制;ALU 可实现直送A(mova)、A 加B(add)、A 减B(sub)、A 与B(and)、A 或B(or)、非A(not) 和A 加1(inc)7 种操作, 控制信号为ALUop。请回答下列问题:
(1) 图中哪些寄存器是程序员可见的?为何要设置暂存器T?
(2) 控制信号ALUop 和SRop 的位数至少各是多少?
(3) 控制信号SRout 所控制部件的名称或作用是什么?
(4) 端点①∼⑨中, 哪些端点须连接到控制部件的输出端?
(5) 为完善单总线数据通路, 需要在端点①∼⑨中相应的端点之间添加必要的连线。写出连线的起点和终点,以正确表示数据的流动方向。
(6) 为什么二路选择器MUX 的一个输入端是2?
答案:
(1) 程序员可见的寄存器为R0~R3 和PC。设置T 是为了暂存ALU 的一个输入操作数。
(2) ALUop 至少为3 位,SRop 至少为2 位。
(3) SRout 控制三态门,该三态门用于控制SR 的内容是否送入CPU 内总线。
(4) 端点①、②、③、⑤、⑧须连接到控制部件的输出端。
(5) 应添加的连线为:⑦→④,⑥→⑨。
(6) 因为主存按字节编址,而每条指令长度为16 位,即2 字节,顺序取指时PC 应加2。
解析:
(1) R0~R3 是通用寄存器,可由指令显式读写;PC 的内容可通过转移、调用等指令改变,因此也属于程序员可见寄存器。MAR、MDR、IR、T 和SR 都是CPU 内部工作寄存器,普通程序不能直接访问。
该数据通路只有一条内部总线,同一时刻只能有一个部件向总线输出。ALU 完成双操作数运算时,无法同时从总线上取得两个操作数,因此先把第一个操作数送入T,第二个操作数再经总线和MUX 送入ALU 的B 端。
(2) ALU 有7 种操作,因此控制字段至少需要
位。SR 有3 种操作,因此至少需要
位。
(3) 寄存器不能直接把输出永久接到公共总线上,否则会与其他部件产生总线冲突。SRout 用来控制SR 输出端的三态门:SRout 有效时,SR 内容送内部总线;无效时,三态门呈高阻态。
(4) ①为SRout,②为SRop,③为ALUop,⑤为Tin,⑧为MUXop,均属于控制信号,必须由控制部件产生。④、⑥、⑦、⑨传送的是数据,不是控制信号。
(5) MUX 的输出端⑦应连接ALU 的B 输入端④;CPU 内总线端点⑥应连接MUX 的1号输入端⑨。这样,ALU 的B 端既可以选择常数2,也可以选择来自内部总线的操作数。
(6) 每条指令占2 字节,因此正常顺序执行时需要计算
MUX 选择常数2送入ALU,与暂存在T 中的PC 相加,即可形成下一条指令地址。
- 【2015】上一题中描述的计算机, 其部分指令执行过程的控制信号如下所示。
| 阶段 | 指令/过程 | 有效控制信号 |
|---|---|---|
| 取指阶段 | 通用取指 | PCout=1, MARin=1, Tin=1, MEMop=read``MUXop=①, ALUop=add, SRop=②``SRout=1, PCin=1``MDRout=1, IRin=1 |
| 执行阶段 | shl R2, R1 | R1out=1, Tin=1, ALUop=③, SRop=④``SRout=1, R2in=1 |
| 执行阶段 | sub R0, R2, (R1) | R1out=1, MARin=1, MEMop=⑤``R2out=1, Tin=1``MDRout=1, MUXop=1, ALUop=⑥, SRop=⑦``⑧=1, R0in=1 |
注:值为0 的寄存器输入/输出控制信号及值为任意的其他控制信号均未在表中标出。
该机指令格式如下表所示, 支持寄存器直接和寄存器间接两种寻址方式, 寻址方式位分别为0 和1, 通用寄存器R0 ∼R3 的编号分别为0、1、2 和3。
| 字段含义 | 指令操作码 | 目的操作数 | 目的操作数 | 源操作数1 | 源操作数1 | 源操作数2 | 源操作数2 |
|---|---|---|---|---|---|---|---|
| 字段 | OP | Md | Rd | Ms1 | Rs1 | Ms2 | Rs2 |
其中Md、Ms1、Ms2 为寻址方式位, Rd、Rs1、Rs2 为寄存器编号。
三地址指令:源操作数1 OP 源操作数2 →目的操作数地址;
二地址指令(末3 位均为0):OP 源操作数1 →目的操作数地址;
单地址指令(末6 位均为0):OP 目的操作数→目的操作数地址。
请回答下列问题:
(1) 该机的指令系统最多可定义多少条指令?
(2) 若inc、shl 和sub 指令的操作码分别为01H、02H 和03H, 则以下指令对应的机器代码各是什么?
① inc R1 ; (R1) + 1 → R1
② shl R2, R1 ; (R1) << 1 → R2
③ sub R3, (R1), R2; ((R1)) - (R2) → R3
(3) 假设寄存器X 的输入和输出控制信号分别为Xin 和Xout, 其值为1 表示有效, 为0 表示无效(如PCout = 1 表示PC 内容送总线); 存储器控制信号为MEMop,用于控制存储器的读(read) 和写(write) 操作。写出图(a) 中标号①~⑧处的控制信号或控制信号的取值。
(4) 指令“sub R1, R3, (R2)”和“inc R1”的执行阶段至少各需要多少个时钟周期?
答案:
(1) 最多可定义128 条指令。
(2)
① inc R1:0240H;
② shl R2, R1:0488H;
③ sub R3, (R1), R2:06EAH。
(3)
① 0;② mov;③ mova;④ left;⑤ read;⑥ sub;⑦ mov;⑧ SRout。
(4) sub R1, R3, (R2) 至少需要3 个时钟周期;inc R1 至少需要2 个时钟周期。
解析:
(1) 三个寄存器编号字段各占2 位,三个寻址方式字段各占1 位,因此操作数字段共占
位。指令字长为16 位,所以操作码字段长度为
位,最多可定义
条指令。
(2) 各字段从高位到低位依次为
inc R1:OP 为01H,目的寄存器为R1,采用寄存器直接寻址,其余6 位为0,因此机器代码为0240H。shl R2, R1:OP 为02H,目的寄存器为R2,源操作数1 为R1,二者均采用寄存器直接寻址,末3 位为0,因此机器代码为0488H。sub R3, (R1), R2:目的操作数为直接寻址的R3,源操作数1 为寄存器间接寻址的(R1),源操作数2 为直接寻址的R2,因此机器代码为06EAH。
(3) 取指时需要用ALU 计算
,故MUX 选择常数2,①为0;ALU 完成加法后,SR 不移位而直接传送,②为mov。
shl R2, R1 先把R1 送入T,ALU 只需直送A,故③为mova;随后SR 左移一位,故④为left。
执行 sub R0, R2, (R1) 时,应从主存读出
,故⑤为read;ALU 计算
,故⑥为sub;结果不需要移位,⑦为mov;最后由SR 把结果送内部总线,故⑧为SRout。
(4) 对 sub R1, R3, (R2),至少需要:
,并发出读主存命令; 2.
因此至少3 个时钟周期。对 inc R1,先将R1 送入T,再由ALU 完成加1并写回R1,至少需要2 个时钟周期。
- 【2022】某CPU 中部分数据通路如下图所示, 其中, GPRs 为通用寄存器组;FR 为标志寄存器, 用于存放ALU 产生的标志信息;带箭头虚线表示控制信号, 如控制信号Read、Write 分别表示主存读、主存写, MDRin 表示内部总线上数据写入MDR, MDRout 表示MDR 的内容送内部总线。请回答下列问题:
(1) 设ALU 的输入端A、B 及输出端F 的最高位分别为A15、B15及F15, FR 中的符号标志和溢出标志分别为SF 和OF, 则SF 的逻辑表达式是什么?A 加B、A 减B 时OF 的逻辑表达式分别是什么? 要求逻辑表达式的输入变量为A15、B15及F15。
(2) 为什么要设置暂存器Y 和Z?
(3) 若GPRs 的输入端rs、rd 分别为所读、写的通用寄存器的编号, 则GPRs 中最多有多少个通用寄存器?rs 和rd 来自图中的哪个寄存器? 已知GPRs 内部有一个地址译码器和一个多路选择器, rd 应连接地址译码器还是多路选择器?
(4) 取指令阶段(不考虑PC 增量操作) 的控制信号序列是什么?若从发出主存读命令到主存读出数据并传送到MDR 共需5 个时钟周期,则取指令阶段至少需要几个时钟周期?
(5) 图中控制信号由什么部件产生?图中哪些寄存器的输出信号会连到该部件的输入端?
答案:
(1)
A 加B 时:
A 减B 时:
(2) Y 用于暂存ALU 的一个输入操作数;Z 用于暂存ALU 的运算结果,使ALU 输出能够在后续时钟周期稳定地送上内部总线,并避免形成组合逻辑反馈通路。
(3) 最多有16 个通用寄存器;rs 和rd 均来自IR;rd 应连接地址译码器。
(4) 控制信号序列为:
PCout=1, MARin=1;Read=1,等待主存完成读操作并将数据送入MDR;MDRout=1, IRin=1。
取指阶段至少需要7 个时钟周期。
(5) 控制信号由控制部件CU 产生;IR 和FR 的输出信号应连接到CU 的输入端。
解析:
(1) 补码运算结果的符号由最高位决定,因此
加法溢出发生在两个同号操作数相加而结果异号时:两个正数相加得到负数,或两个负数相加得到正数。因此
减法溢出发生在A、B 异号且结果符号与A 不同时,因此
(2) 该CPU 使用单内部总线,两个操作数不能同时由总线送入ALU。Y 保存先到达的操作数,另一个操作数随后由总线直接送入ALU。Z 锁存ALU 结果,使结果可以在下一周期通过Zout 送总线,同时隔离ALU 的组合逻辑输出。
(3) rs 和rd 均为4 位,因此最多可表示
个通用寄存器。寄存器编号是当前指令的一部分,故来自IR。写寄存器时,rd 应由地址译码器译成某一个寄存器的写使能信号;读寄存器时,rs 用于控制多路选择器,从多个寄存器输出中选出一路。
(4) 先将PC 内容送MAR,随后发出主存读命令。题设从发出读命令到数据进入MDR 需要5 个时钟周期,再用1 个周期把MDR 内容送IR。因此总周期数至少为
(5) 控制部件需要根据当前指令和运算状态产生控制信号,所以IR 中的操作码、寻址方式等字段,以及FR 中的条件标志,均应送入CU。CU 根据这些信息产生各寄存器输入/输出、ALU 操作和主存读写等控制信号。
- 【2024】(13 分) 假定计算机M 字长为32 位, 按字节编址, 采用32 位定长指令字, 指令add、slli 和lw 的格式、编码和功能说明如下表所示:
| 指令 | 31~25 | 24~20 | 19~15 | 14~12 | 11~7 | 6~0 | 指令功能说明 |
|---|---|---|---|---|---|---|---|
| add | 0000000 | rs2 | rs1 | 000 | rd | 0110011 | R[rd] ← R[rs1] + R[rs2] |
| slli | 0000000 | shamt | rs1 | 010 | rd | 0010011 | R[rd] ← R[rs1] << shamt |
| lw | imm | imm | rs1 | 010 | rd | 0000011 | R[rd] ← M[R[rs1] + imm] |
其中,lw 指令中的 imm 为12 位,由31~20 位共同组成。
其中,表示通用寄存器的内容,表示地址为的存储单元内容,shamt表示移位位数,imm为补码表示的偏移量。如下电路图给出了计算机M 的部分数据通路及其控制信号(用虚线箭头表示), 其中, A 和B 分别表示从通用寄存器rs1 和rs2 中读出的内容;IR[31:20] 表示指令寄存器的高12 位;当控制信号Ext 为0、1时扩展器分别实现零扩展、符号扩展, ALUctr 为000、001、010时ALU分别实现加、减和逻辑左移运算。请回答下列问题。
(1) 计算机M 最多有几个通用寄存器?为什么shamt 字段占5 位?(2 分)
(2) 执行add 指令时, 控制信号ALUBsrc 的取值应该是什么?若rs1 和rs2 寄存器内容分别为87654321H 和98765432H, 则add 指令执行后, ALU 输出端F、OF 和CF 的结果分别是什么? 若该add 指令处理的是无符号整数,则应根据哪个标志判断是否溢出?(5 分)
(3) 执行slli 指令时,控制信号Ext 的取值可以是0 也可以是1,为什么?(2 分)
(4) 执行lw 指令时, 控制信号Ext、ALUctr 的取值分别是什么?(2 分)
(5) 若一条指令的机器码是A040A103H, 则该指令一定是lw 指令, 为什么?若执行该指令时, ,则所读取数据的存储地址是多少? (2 分)
答案:
(1) 最多有32 个通用寄存器;32 位数据逻辑左移的有效位数为0~31,需要5 位表示。
(2) ALUBsrc=0;F=1FDB9753H,OF=1,CF=1;无符号整数应根据CF 判断是否溢出。
(3) slli 指令的IR[31:25] 恒为0000000,因此IR[31:20] 的最高位IR[31] 为0,零扩展和符号扩展所得结果相同。
(4) Ext=1,ALUctr=000。
(5) 机器码最低7 位为0000011,与lw 的操作码相同;存储地址为FFFF9CD4H。
解析:
(1) rs1、rs2 和rd 字段均为5 位,所以可编码的通用寄存器数为
字长为32 位,逻辑左移的移位位数只需表示0~31,共32 种情况,因此 shamt 字段占5 位。
(2) add 的第二个操作数来自寄存器rs2,即图中的B 端,MUX 应选择0号输入,所以 ALUBsrc=0。
计算:
保留低32 位得
两个操作数最高位均为1,按补码解释时它们均为负数,而结果最高位为0,即两个负数相加得到正数,因此有符号溢出,。加法产生了最高位进位,因此 。无符号整数溢出应依据进位标志CF 判断。
(3) slli 的31~25 位固定为0000000,故扩展器输入IR[31:20] 的符号位必为0。此时无论选择零扩展还是符号扩展,高20 位都补0,扩展结果完全相同。
(4) lw 的12 位立即数采用补码,需要符号扩展,故 Ext=1。有效地址为
ALU 应执行加法,故 ALUctr=000。
(5) A040A103H 的最低7 位为0000011,它就是 lw 的操作码,因此该指令一定是 lw。其12 位立即数字段为A04H,按补码解释为
于是有效地址为
5.4 控制器的功能和工作原理
- 【2009】相对于微程序控制器, 硬布线控制器的特点是( )。
A. 指令执行速度慢, 指令功能的修改和扩展容易
B. 指令执行速度慢, 指令功能的修改和扩展难
C. 指令执行速度快, 指令功能的修改和扩展容易
D. 指令执行速度快, 指令功能的修改和扩展难
答案: D
解析: 硬布线控制器采用组合逻辑和时序逻辑电路直接产生控制信号,不需要逐条读取和解释微指令,因此控制信号生成速度快,适合追求高性能的处理器。
但其控制逻辑由硬件电路固定实现,增加或修改指令通常需要重新设计逻辑电路,修改和扩展较困难。微程序控制器则通过修改控制存储器中的微程序即可改变控制过程,灵活性更强但速度通常较慢。因此选D。
- 【2012】某计算机的控制器采用微程序控制方式,微指令中的操作控制字段采用字段直接编码法, 共有33 个微命令, 构成5 个互斥类, 分别包含7、3、12、5 和6 个微命令, 则操作控制字段至少有( )。
A. 5 位
B. 6 位
C. 15 位
D. 33 位
答案: C
解析: 字段直接编码法把互斥的微命令放在同一个字段中编码。每个字段除要表示本类中的各个微命令外,还要有一种编码表示“本字段不发出任何微命令”,因此包含个微命令的字段至少需要
位。
五个字段所需位数分别为
故操作控制字段至少需要
位,选C。
- 【2014】某计算机采用微程序控制器, 共有32 条指令, 公共的取指令微程序包含2 条微指令, 各指令对应的微程序平均由4 条微指令组成,采用断定法(下地址字段法) 确定下条微指令地址,则微指令中下地址字段的位数至少是( )。
A. 5
B. 6
C. 8
D. 9
答案: C
解析: 控制存储器中至少需要保存的微指令条数为
采用下地址字段法时,下地址字段必须能够直接表示控制存储器中任一微指令地址。由于
所以下地址字段至少需要8 位,选C。
- 【2017】下列关于主存储器(MM) 和控制存储器(CS) 的叙述中,错误的是( )。
A. MM 在CPU 外, CS 在CPU 内
B. MM 按地址访问, CS 按内容访问
C. MM 存储指令和数据, CS 存储微指令
D. MM 用RAM 和ROM 实现, CS 用ROM 实现
答案: B
解析: 主存储器MM 存放机器指令和数据,通常位于CPU 外部,可由RAM 和ROM 组成;控制存储器CS 位于微程序控制器内部,存放微指令,传统实现通常采用ROM,因此A、C、D正确。
MM 和CS 都是按地址访问的存储器。CS 根据微地址寄存器给出的地址读出对应微指令,并不是按内容访问。按内容访问的是相联存储器,因此B错误。
5.5 异常和中断机制
- 【2009】下列选项中, 能引起外部中断的事件是( )。
A. 键盘输入
B. 除数为0
C. 浮点运算下溢
D. 访存缺页
答案: A
解析: 外部中断由CPU 外部的设备或事件发出,与当前正在执行的指令没有直接因果关系。键盘输入由外设接口发出中断请求,属于外部中断。
除数为0、浮点运算下溢都由当前指令的执行引起,属于内部异常;访存缺页由当前访存指令触发,也属于内部异常中的故障。因此选A。
- 【2010】单级中断系统中, 中断服务程序内的执行顺序是( )。
I. 保护现场 II. 开中断 III. 关中断 IV. 保存断点 V. 中断事件处理 VI. 恢复现场 VII. 中断返回
A. I →V →VI →II →VII
B. III →I →V →VII
C. III →IV →V →VI →VII
D. IV →I →V →VI →VII
答案: A
解析: 题干限定为“中断服务程序内”。关中断和保存断点通常由中断隐指令在硬件响应阶段完成,不属于中断服务程序中的显式步骤。服务程序首先保护现场,随后处理中断事件;处理结束后恢复现场,再开中断并执行中断返回。正确顺序为
因此选 A。
- 【2012】响应外部中断的过程中, 中断隐指令完成的操作, 除保护断点外, 还包括( ).
I. 关中断 II. 保存通用寄存器的内容 III. 形成中断服务程序入口地址并送PC
A. 仅I、II
B. 仅I、III
C. 仅II、III
D. I、II、III
答案: B
解析: CPU 响应外部中断时,中断隐指令通常自动完成三项工作:保存断点、关中断以及形成中断服务程序入口地址并送入PC。
通用寄存器的内容属于程序现场,一般由中断服务程序中的软件指令保存,而不是由中断隐指令自动保存。因此I、III正确,选B。
- 【2012】中断处理和子程序调用都需要压栈以保护现场, 中断处理一定会保存而子程序调用不需要保存其内容的是( )。
A. 程序计数器
B. 程序状态字寄存器
C. 通用数据寄存器
D. 通用地址寄存器
答案: B
解析: 中断可能发生在程序的任意指令边界,处理结束后必须恢复被中断程序原有的运行状态,因此除保存返回地址外,还必须保存程序状态字PSW,其中包含条件码、中断允许位、处理器模式等状态。
普通子程序调用通常只需保存返回地址,并按调用约定保存必要的通用寄存器,不一定保存PSW。因此中断处理一定保存而子程序调用通常不需保存的是程序状态字寄存器,选B。
- 【2015】内部异常(内中断) 可分为故障(fault)、陷阱(trap) 和终止(abort) 三类。下列有关内部异常的叙述中, 错误的是( )。
A. 内部异常的产生与当前执行指令相关
B. 内部异常的检测由CPU 内部逻辑实现
C. 内部异常的响应发生在指令执行过程中
D. 内部异常处理后返回到发生异常的指令继续执行
答案: D
解析: 内部异常由当前指令执行引起,并由CPU 内部逻辑检测,因此A、B正确。与通常在指令结束后检测的外部中断不同,内部异常可在指令执行过程中被发现和响应,C正确。
异常处理后的返回位置取决于异常类型:故障处理成功后通常重新执行发生故障的指令;陷阱通常返回到下一条指令;终止一般无法恢复原程序。因此不能笼统地说处理后都返回发生异常的指令继续执行,D错误。
- 【2015】处理外部中断时, 应该由操作系统保存的是( )。
A. 程序计数器(PC) 的内容
B. 通用寄存器的内容
C. 快表(TLB) 中的内容
D. Cache 中的内容
答案: B
解析: PC 和程序状态字通常由CPU 的中断隐指令自动保存,以保证能够返回被中断程序。通用寄存器属于程序现场,需要由操作系统的中断服务程序根据需要保存和恢复。
TLB 和Cache 是硬件管理的高速存储结构,处理中断时通常不需要由操作系统逐项保存。因此选B。
- 【2015】假定下列指令已装入指令寄存器,则执行时不可能导致CPU 从用户态变为内核态(系统态) 的是( )。
A. DIV R0, R1;
B. INT n;产生软中断
C. NOT R0;寄存器R0 的内容取非
D. MOV R0, addr;把地址addr 处的内存数据放入寄存器R0 中
答案: C
解析: DIV 在除数为0 等情况下可能产生内部异常;INT n 会主动产生软中断;MOV 访问内存时可能发生缺页、越权或地址异常。这些事件都会使CPU 转入内核态执行相应处理程序。
NOT R0 只对寄存器内容进行按位取反,既不访问主存,也没有通常会触发异常的算术条件,因此不可能因正常执行该指令而使CPU 从用户态进入内核态,选C。
- 【2020】下列关于“自陷” (Trap, 也称陷阱) 的叙述中, 错误的是( )。
A. 自陷是通过陷阱指令预先设定的一类外部中断事件
B. 自陷可用于实现程序调试时的断点设置和单步跟踪
C. 自陷发生后CPU 将转去执行操作系统内核相应程序
D. 自陷处理完成后返回到陷阱指令的下一条指令执行
答案: A
解析: 自陷由当前执行的陷阱指令主动触发,属于内部异常,而不是由外部设备产生的外部中断。因此A错误。
陷阱可用于系统调用、断点和单步调试。陷阱发生后CPU 转入内核态执行相应处理程序,处理完成后通常从陷阱指令的下一条指令继续执行,所以B、C、D正确。
- 【2020】下列事件中, 属于外部中断事件的是( )。
I. 访存时缺页 II. 定时器到时 III. 网络数据包到达
A. 仅I、II
B. 仅I、III
C. 仅II、III
D. I、II、III
答案: C
解析: 缺页由当前访存指令访问的虚拟页不在主存引起,属于内部异常中的故障。
定时器到时由定时器硬件发出中断请求,网络数据包到达由网络接口发出中断请求,二者都来自CPU 外部,属于外部中断。因此仅II、III正确,选C。
- 【2020】外部中断包括不可屏蔽中断(NMI) 和可屏蔽中断,下列关于外部中断的叙述,错误的是( )。
A. CPU 处于关中断状态时,也能响应NMI 请求
B. 一旦可屏蔽中断请求信号有效, CPU 将立即响应
C. 不可屏蔽中断的优先级比可屏蔽中断的优先级高
D. 可通过中断屏蔽字改变可屏蔽中断的处理优先级
答案: B
解析: NMI 不受中断允许标志和普通中断屏蔽控制,即使CPU 处于关中断状态也可以响应,且其优先级通常高于可屏蔽中断,A、C正确。中断屏蔽字可选择屏蔽不同中断源,从而调整可屏蔽中断的实际处理次序,D正确。
可屏蔽中断请求有效后,CPU 还要满足开中断、请求未被屏蔽、优先级足够等条件,并通常在当前指令执行结束后才响应,不会“立即”响应。因此B错误。
- 【2022】下列关于中断I/O 方式的叙述中, 不正确的是( )。
A. 适用于键盘、针式打印机等字符型设备
B. 外设和主机之间的数据传送通过软件完成
C. 外设准备数据的时间应小于中断处理时间
D. 外设为某进程准备数据时CPU 可运行其他进程
答案: C
解析: 中断I/O 方式适合键盘、针式打印机等低速字符设备。外设准备好一个数据后发出中断,由CPU 执行中断服务程序完成设备寄存器与CPU 或主存之间的数据传送,因此B正确。
外设准备数据期间CPU 无需忙等,可以执行其他程序或进程,D正确。为了避免CPU 频繁处理中断,中断处理时间通常应明显小于外设准备下一批数据所需的时间,即外设准备数据的时间应大于中断处理时间。C将关系说反,因此不正确。
5.6 指令流水线
- 【2009】某计算机的指令流水线由四个功能段组成,指令流经各功能段的时间(忽略各功能段之间的缓存时间) 分别为90ns、80ns、70ns 和60ns, 则该计算机的CPU 时钟周期至少是( )。
A. 90ns
B. 80ns
C. 70ns
D. 60ns
答案: A
解析: 流水线中所有功能段由同一个时钟控制,时钟周期必须不小于最慢流水段的处理时间。忽略流水段寄存器延迟时,时钟周期至少为
因此选A。
- 【2010】下列选项中, 不会引起指令流水线阻塞的是( )。
A. 数据旁路(转发)
B. 数据相关
C. 条件转移
D. 资源冲突
答案: A
解析: 数据相关可能产生数据冒险,条件转移会产生控制冒险,多个流水段争用同一硬件资源会产生结构冒险,这些情况都可能使流水线暂停。
数据旁路又称转发,是把前一条指令尚未写回寄存器的结果直接送到后续指令需要该操作数的流水段,用于减少或消除数据冒险造成的阻塞,因此不会引起阻塞,选A。
- 【2011】下列给出的指令系统特点中, 有利于实现指令流水线的是( )。
I. 指令格式规整且长度一致 II. 指令和数据按边界对齐存放 III. 只有Load/Store 指令才能对操作数进行存储访问
A. 仅I、II
B. 仅II、III
C. 仅I、III
D. I、II、III
答案: D
解析: 指令格式规整、长度一致,可简化并加快取指和译码;指令及数据按边界对齐,可减少跨边界访存和多次存储访问;采用Load/Store 结构可使普通运算指令只访问寄存器,使各类指令的流水阶段更统一。
三项特点都有利于降低流水线控制复杂度并提高执行效率,因此选D。
- 【2013】某CPU 主频为1.03GHz, 采用4 级指令流水线, 每个流水段的执行需要1 个时钟周期。假定CPU 执行了100 条指令,在其执行过程中,没有发生任何流水线阻塞,此时流水线的吞吐率为( )。
A. 条指令/秒
B. 条指令/秒
C. 条指令/秒
D. 条指令/秒
答案: C
解析: 级流水线执行条指令且无阻塞时,需要的时钟周期数为
因此完成100 条指令所需时间为
吞吐率为
故选C。若指令数趋于无穷,稳态吞吐率才趋近主频。
- 【2016】在无转发机制的五段基本流水线(取指、译码/读寄存器、运算、访存、写回寄存器) 中, 下列指令序列存在数据冒险的指令对是( )。
I1: add R1, R2, R3 // (R2) + (R3) → R1
I2: add R5, R2, R4 // (R2) + (R4) → R5
I3: add R4, R5, R3 // (R5) + (R3) → R4
I4: add R5, R2, R6 // (R2) + (R6) → R5
A. I1 和I2
B. I2 和I3
C. I2 和I4
D. I3 和I4
答案: B
解析: I2 将结果写入R5,紧随其后的I3 需要读取R5,构成写后读相关,即RAW 相关。由于没有转发机制,I3 在I2 将结果写回寄存器之前不能取得正确的R5,因此会产生数据冒险。
I1 与I2 只共同读取R2,不存在相关;I2 与I4 都写R5,属于WAW 名相关,但在按序发射、按序完成的基本五段流水线中不会破坏写回顺序;I3 读取R5 并写R4,而I4 不读取R4,因此二者也不存在需要阻塞的数据冒险。故选B。
- 【2017】下列关于超标量流水线特性的叙述中,正确的是( )。
I. 能缩短流水线功能段的处理时间 II. 能在一个时钟周期内同时发射多条指令 III. 能结合动态调度技术提高指令执行并行性
A. 仅II
B. 仅I、III
C. 仅II、III
D. I、II 和III
答案: C
解析: 超标量处理器通过配置多套功能部件和多发射逻辑,在同一时钟周期内可以发射并执行多条相互独立的指令,II正确。它常与动态调度、寄存器重命名等技术结合,以提高指令级并行性,III正确。
超标量技术增加的是同一周期内并行处理的指令数,并不会必然缩短单个流水段本身的组合逻辑延迟,I错误。因此选C。
- 【2017】下列关于指令流水线数据通路的叙述中,错误的是( )。
A. 包含生成控制信号的控制部件
B. 包含算术逻辑运算部件(ALU)
C. 包含通用寄存器组和取指部件
D. 由组合逻辑电路和时序逻辑电路组合而成
答案: A
解析: 数据通路是指令执行过程中数据传送和处理所经过的路径,通常包括程序计数器、通用寄存器组、ALU、取指部件、多路选择器以及流水寄存器等,由组合逻辑元件和时序逻辑元件共同组成。生成控制信号的控制部件属于控制器,不属于数据通路本身,因此 A 项错误,选 A。
- 【2018】若某计算机最复杂指令的执行需要完成5 个子功能, 分别由功能部件A∼E 实现, 各功能部件所需时间分别为80ps、50ps、50ps、70ps 和50ps, 采用流水线方式执行指令, 流水段寄存器延时为20ps, 则CPU 时钟周期至少为( )。
A. 60ps
B. 70ps
C. 80ps
D. 100ps
答案: D
解析: 流水线时钟周期至少等于最慢功能段的处理时间与流水段寄存器延时之和。最慢功能部件A 的延迟为80ps,因此
故选D。
- 【2019】在采用“取指、译码/取数、执行、访存、写回”5 段流水线的处理器中, 执行如下指令序列, 其中s0、s1、s2、s3 和t2 表示寄存器编号。
I1: add s2, s1, s0 // R[s2] ← R[s1] + R[s0]
I2: load s3, 0(t2) // R[s3] ← M[R[t2] + 0]
I3: add s2, s3, s1 // R[s2] ← R[s3] + R[s1]
I4: store s2, 0(t2) // M[R[t2] + 0] ← R[s2]
下列指令对中, 不存在数据冒险的是( )。
A. I1 和I3
B. I2 和I3
C. I2 和I4
D. I3 和I4
答案: C
解析: I2 写R3,I3 随后读R3,构成RAW 相关;I3 写R2,I4 随后把R2 作为待写入主存的数据,构成RAW 相关。
I2 只写R3,并读取R[t2] 形成地址;I4 读取R2 和R[t2],不读写R3,因此I2 与I4 之间不存在寄存器数据相关,也就不存在数据冒险。故选C。
I1 和I3 都写R2,存在输出相关WAW;虽然在严格按序的基本流水线中通常不会导致结果次序错误,但题目所列指令对中,只有I2 与I4 完全不存在数据相关。
- 【2020】下列给出的处理器类型中,理想情况下, CPI 为1 的是( )。
I. 单周期CPU II. 多周期CPU III. 基本流水线CPU IV. 超标量流水线CPU
A. 仅I、II
B. 仅I、III
C. 仅II、IV
D. 仅III、IV
答案: B
解析: 单周期CPU 每条指令恰好用一个时钟周期完成,所以。基本标量流水线在理想稳态下每个时钟周期完成一条指令,平均。
多周期CPU 的一条指令通常需要多个时钟周期,;超标量流水线每周期可完成多条指令,理想情况下。因此仅I、III正确,选B。
- 【2023】在采用“取指、译码/取数、执行、访存、写回”5 段流水线的RISC 处理器中, 执行如下指令序列(第一列为指令序号), 其中s0、s1、s2、s3 和t2 表示寄存器编号。
I1: add s2, s1, s0 // R[s2] ← R[s1] + R[s0]
I2: load s3, 0(s2) // R[s3] ← M[R[s2] + 0]
I3: beq t2, s1, L1 // if R[t2] = R[s1] jump to L1
I4: addi t2, t2, 20 // R[t2] ← R[t2] + 20
I5: L1: add ...
若采用转发(旁路) 技术处理数据冒险, 采用硬件阻塞方式处理控制冒险, 则在I1~I4 执行过程中, 发生流水线阻塞的指令有( )。
A. 仅I3
B. I2、I4
C. I3、I4
D. I2、I3、I4
答案: C
解析: I2 计算访存地址时需要I1 产生的R[s2]。I1 的加法结果在EX 段结束时已经产生,可通过转发通路直接送到下一周期I2 的EX 段,因此I2 不需要因数据冒险而阻塞。
I3 是条件转移指令。采用硬件阻塞方式处理控制冒险时,在分支条件和目标地址尚未确定前,流水线暂停取入分支后的指令。因而I3 引发控制阻塞,顺序后继指令I4 被阻塞,待分支结果确定后才能决定是否继续执行。
所以发生流水线阻塞的有关指令为I3、I4,选C。
- 【2024】对于采用“取指、译码/取数、执行、访存、写回”5 段流水线的RISC 数据通路,下列关于指令流水线数据冒险处理的叙述中, 错误的是( )。
A. 相邻两条指令中的操作数相关可能引起数据冒险
B. 在数据相关的指令间插入“气泡”能避免数据冒险
C. 所有数据冒险都可以通过加入转发(旁路) 电路解决
D. 所有数据冒险都能通过调整指令顺序和插入nop 指令解决
答案: C
解析: 相邻指令若存在写后读等操作数相关,后续指令可能在前一条指令产生或写回结果之前读取操作数,从而引起数据冒险,A正确。
插入气泡或nop 可以推迟后续指令读取操作数的时间;在保证程序语义不变的前提下重新调度独立指令,也可拉开相关指令间的距离。因此通过合理调整指令顺序并在必要处插入足够的nop,原则上能够消除数据冒险,B、D正确。
转发只能在数据已经由前级流水段产生时,把结果提前送给后续指令。典型的Load-Use 相关中,Load 指令读出的主存数据到MEM 段末才产生,而紧随其后的指令在同一周期的EX 段开始时就需要该数据,仅靠普通转发仍需至少阻塞一个周期。因此并非所有数据冒险都能只靠转发解决,C错误。
- 【2012】某16 位计算机中,带符号整数用补码表示,数据Cache 和指令Cache 分离。下表给出了指令系统中部分指令格式,其中Rs 和Rd 表示寄存器, mem 表示存储单元地址, (x) 表示寄存器x 或存储单元x 的内容。
| 名称 | 指令的汇编格式 | 指令功能 |
|---|---|---|
| 加法指令 | ADD Rs, Rd | (Rs) + (Rd) → Rd |
| 算术/逻辑左移 | SHL Rd | 2 * (Rd) → Rd |
| 算术右移 | SHR Rd | (Rd) / 2 → Rd |
| 取数指令 | LOAD Rd, mem | (mem) → Rd |
| 存数指令 | STORE Rs, mem | (Rs) → mem |
该计算机采用5 段流水方式执行指令,各流水段分别是取指(IF)、译码/读寄存器(ID)、执行/计算有效地址(EX)、访问存储器(M) 和结果写回寄存器(WB), 流水线采用“按序发射, 按序完成”方式, 没有采用转发技术处理数据相关,并且同一个寄存器的读和写操作不能在同一个时钟周期内进行。请回答下列问题:
(1) 若int 型变量x 的值为-513, 存放在寄存器R1 中, 则执行指令“SHR R1”后, R1 的内容是多少?(用十六进制表示)
(2) 若某个时间段中, 有连续的4 条指令进入流水线, 在其执行过程中没有发生任何阻塞, 则执行这4 条指令所需的时钟周期数是多少?
(3) 若高级语言程序中某赋值语句为x = a + b,x、a 和b 均为int 型变量, 它们的存储单元地址分别表示为x、a 和b。该语句对应的指令序列及其在指令流水线中的执行过程如下所示。
I1 LOAD R1, [a]
I2 LOAD R2, [b]
I3 ADD R1, R2
I4 STORE R2, [x]
| 指令 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
|---|---|---|---|---|---|---|---|---|
| I1 | IF | ID | EX | M | WB | |||
| I2 | IF | ID | EX | M | WB | |||
| I3 | IF | ID | EX | |||||
| I4 | IF |
| 指令 | 9 | 10 | 11 | 12 | 13 | 14 |
|---|---|---|---|---|---|---|
| I1 | ||||||
| I2 | ||||||
| I3 | M | WB | ||||
| I4 | ID | EX | M | WB |
则这4 条指令执行过程中, I3 的ID 段和I4 的IF 段被阻塞的原因各是什么?
(4) 若高级语言程序中某赋值语句为x = x * 2 + a,x 和a 均为unsigned int 类型变量, 它们的存储单元地址分别表示为x、a,则执行这条语句至少需要多少个时钟周期? 要求模仿上表画出这条语句对应的指令序列及其在流水线中的执行过程示意图。
答案:
(1) FEFFH。
(2) 8 个时钟周期。
(3) I3 的ID 段因数据相关而阻塞;I4 的IF 段因I3 阻塞造成流水线前级冻结而阻塞。
(4) 至少需要17 个时钟周期。一种最短指令序列为:
I1 LOAD R1, [x]
I2 LOAD R2, [a]
I3 SHL R1
I4 ADD R2, R1
I5 STORE R1, [x]
解析:
(1) 计算机字长为16 位, 型数采用补码表示。正数513 的十六进制形式为0201H,故的16 位补码为
SHR为算术右移,最高位补符号位1。将FDFFH右移一位:
FDFFH = 1111 1101 1111 1111
算术右移一位:1111 1110 1111 1111 = FEFFH
其对应真值为,所以R1 的内容为FEFFH。
(2) 对具有个流水段的流水线,连续执行条指令且无阻塞时,所需时钟周期数为
(3) I3 执行ADD R1, R2时需要在ID 段读取R1、R2,而R1、R2 分别由I1、I2 写入。I1 在第5 个周期的WB 段写R1,I2 在第6 个周期的WB 段写R2。由于没有转发技术,且同一个寄存器不能在同一周期内既写又读,I3 必须等到第7 个周期才能进入ID 段,因此I3 的ID 段因RAW(写后读)数据冒险而阻塞。
当I3 因数据相关不能从流水线前级向后推进时,保存I3 的流水寄存器和PC 必须保持不变,IF 段不能继续取入I4。因此I4 的IF 段是由I3 的数据冒险引起的连锁阻塞,而不是I4 自身与前一指令之间的结构冲突。
(4) 为减少等待时间,应把与R1 无关的LOAD R2, [a]安排在LOAD R1, [x]和SHL R1之间。各指令的数据相关为:
- I1 写R1,I3 读、写R1;
- I2 写R2,I4 读R2;
- I3 写R1,I4 读、写R1;
- I4 写R1,I5 读R1。
在无转发且寄存器不能同周期读写的条件下,最短流水过程如下。表中“停”表示该指令因前面的数据冒险而停顿。
| 指令 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
|---|---|---|---|---|---|---|---|---|---|
| I1 | IF | ID | EX | M | WB | ||||
| I2 | IF | ID | EX | M | WB | ||||
| I3 | IF | 停 | 停 | ID | EX | M | WB | ||
| I4 | IF | 停 | 停 | 停 | |||||
| I5 |
| 指令 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|
| I1 | ||||||||
| I2 | ||||||||
| I3 | ||||||||
| I4 | ID | EX | M | WB | ||||
| I5 | IF | 停 | 停 | 停 | ID | EX | M | WB |
I3 必须等I1 在第5 周期写回R1 后,才能在第6 周期读R1;I4 必须等I3 在第9 周期写回R1 后,才能在第10 周期读取R1;I5 必须等I4 在第13 周期写回R1 后,才能在第14 周期读取待存数据。因此最后一条指令在第17 周期完成,至少需要17 个时钟周期。
- 【2014】某程序中有如下循环代码段P:
for (int i = 0; i < N; i++) sum += A[i];。假设编译时变量sum 和i 分别分配在寄存器R1 和R2 中。常量N 在寄存器R6 中, 数组A 的首地址在寄存器R3 中。程序段P 起始地址为08048100H, 对应的汇编代码和机器代码如下表所示:
| 编号 | 地址 | 机器代码 | 汇编代码 | 注释 |
|---|---|---|---|---|
| 1 | 08048100H | 00022080H | loop: sll R4, R2, 2 | (R2) << 2 → R4 |
| 2 | 08048104H | 00083020H | add R4, R4, R3 | (R4) + (R3) → R4 |
| 3 | 08048108H | 8C850000H | load R5, 0(R4) | ((R4) + 0) → R5 |
| 4 | 0804810CH | 00250820H | add R1, R1, R5 | (R1) + (R5) → R1 |
| 5 | 08048110H | 20420001H | addi R2, R2, 1 | (R2) + 1 → R2 |
| 6 | 08048114H | 1446FFFAH | bne R2, R6, loop | if (R2) != (R6) goto loop |
执行上述代码的计算机M 采用32 位定长指令字, 其中分支指令bne 采用如下格式:
| 位段 | 31~26 | 25~21 | 20~16 | 15~0 |
|---|---|---|---|---|
| 字段 | OP | Rs | Rd | OFFSET |
OP 为操作码;Rs 和Rd 为寄存器编号;OFFSET 为偏移量, 用补码表示。请回答下列问题, 并说明理由。
(1) M 的存储器编址单位是什么?
(2) 已知sll 指令实现左移功能, 数组A 中每个元素占多少位?
(3) 表中bne 指令的OFFSET 字段的值是多少? 已知bne 指令采用相对寻址方式,当前PC 内容为bne 指令地址,通过分析表中指令地址和bne 指令内容,推断出bne 指令的转移目标地址计算公式。
(4) 若M 采用如下“按序发射、按序完成”的5 级指令流水线:IF(取指)、ID(译码及取数)、EXE(执行)、MEM(访存)、WB(写回寄存器), 且硬件不采取任何转发措施, 分支指令的执行均引起3 个时钟周期的阻塞, 则P 中哪些指令的执行会由于数据相关而发生流水线阻塞?哪条指令的执行会发生控制冒险? 为什么指令1 的执行不会因为与指令5 的数据相关而发生阻塞?
答案:
(1) 按字节编址,编址单位为1 字节。
(2) 数组A 的每个元素占32 位。
(3) OFFSET=FFFAH,即补码表示的。转移目标地址计算公式为
(4) 指令2、3、4、6 会因数据相关发生流水线阻塞;指令6(bne)会引起控制冒险。指令6 引起的3 个周期控制阻塞为指令5 写回R2 留出了足够时间,因此下一轮的指令1 不会因与上一轮指令5 的数据相关而阻塞。
解析:
(1) 相邻指令地址依次为08048100H、08048104H、08048108H,每条指令占32 位,即4 字节,地址却增加4。这说明存储器地址以字节为单位,故M 按字节编址。
(2) 指令1 将数组下标所在的R2 左移2 位,即
随后用R3+R4形成A[i]的地址。因此相邻数组元素的地址间隔为4 字节,即每个元素占
(3) bne的机器代码为1446FFFAH,其低16 位就是OFFSET 字段,所以
当前PC 内容为分支指令地址08048114H,转移目标为08048100H。由于指令长度为4 字节,相对偏移量以指令字为单位,故
所以一般公式为
其中SignExt表示对16 位OFFSET 进行符号扩展。
(4) 逐条分析寄存器的写后读相关:
- 指令1 写R4,指令2 随后读R4,构成RAW 相关,因此指令2 会阻塞;
- 指令2 写R4,指令3 随后用R4 计算有效地址,构成RAW 相关,因此指令3 会阻塞;
- 指令3 写R5,指令4 随后读R5,构成RAW 相关,因此指令4 会阻塞;
- 指令5 写R2,指令6 随后读R2 进行比较,构成RAW 相关,因此指令6 会阻塞。
指令6 是条件分支指令,只有确定比较结果和转移方向后,才能确定下一条应取指令的地址,所以指令6 会引起控制冒险。
从循环迭代之间看,上一轮指令5 写R2,下一轮指令1 读R2,二者确实存在RAW 相关。但题设规定每条分支指令都会引起3 个时钟周期的阻塞。在这3 个周期内,上一轮指令5 已完成WB 段并把新值写入R2,下一轮指令1 随后进入ID 段时可以直接读到更新后的R2,因此无需再因该跨迭代数据相关而额外阻塞。
5.7 多处理器基本概念
- 【2022】下列关于并行处理技术的叙述中, 不正确的是( )。
A. 多核处理器属于MIMD 结构
B. 向量处理器属于SIMD 结构
C. 硬件多线程技术只可用于多核处理器
D. SMP 中所有处理器共享单一物理地址空间
答案: C
解析: 多核处理器中的各处理器核可以独立执行不同的指令流、处理不同的数据流,属于MIMD(多指令流多数据流)结构,A正确。
向量处理器用一条向量指令对一组数据元素执行相同操作,属于SIMD(单指令流多数据流)结构,B正确。
硬件多线程技术的实现单位通常是处理器核,一个单核处理器也可以在同一核中设置多个硬件线程上下文,通过细粒度多线程、粗粒度多线程或同时多线程等方式提高功能部件利用率,并非只能用于多核处理器,C错误。
SMP(对称多处理)系统中,各处理器地位对等,共享主存和统一的物理地址空间,D正确。因此选C。