Appearance
题目
假定 43 题中计算机 C 的部分数据通路如题 44 所示。

图中带箭头虚线代表控制信号,IR.rt、IR.rs 分别表示 IR 中的 rt、rs 字段,IR₁₁₋₀ 为 IR 的低 12 位,要求取指令周期完成 PC 增量操作,请回答下列问题
(1)①和②是同一类部件,其名称是什么(1 分)
(2)I 型指令中 imm8 可以是带符号或无符号整数,M 型指令中 offset 是带符号整数,则 EXTOP 至少有几位?为什么?(2 分)
(3)取指周期中 MARSrC、ALUA SrC、ALUB SrC、RegWr 的取值各是什么?(4 分)
(4)左移指令周期中 ALUB SrC、RegWsrc、RegDst、RegWr 的取值各是什么?Extop 是否可以与 M 型指令中的 EXTop 相同?为什么?(2 分)
解析
本题在 2026-43 的指令系统之上,就一个单总线 / 多路选择器风格的 CPU 数据通路考查 多路选择器识别、立即数扩展宽度、取指阶段控制信号、左移指令控制信号。
通用思路:每一类指令在每一阶段都对应一组确定的控制信号取值。读题时先想清楚"这一拍数据流向哪里",再去逐一确定每个控制信号。
控制信号速查(以图 44 约定):
| 信号 | 含义 |
|---|---|
| MARSrc | MAR 取值来源:PC 还是 ALU 输出 |
| ALUASrc | ALU 的 A 端:PC 还是寄存器 |
| ALUBSrc | ALU 的 B 端:寄存器 / 常数 / 立即数 |
| RegWr | 是否写寄存器(0 = 不写) |
| RegWsrc | 写回数据来自 ALU 还是 MDR |
| RegDst | 写到 R[rs] 还是 R[rt] |
| EXTop | 立即数扩展模式:零扩展 / 符号扩展 |
(1) ① 和 ② 是什么部件 [1 分]
多路选择器(MUX)。
理由: 不同指令类型对寄存器编号的取法不同——
- R 型指令读 / 写 rs、rt(来自 IR.rs / IR.rt 字段);
- M 型指令固定取 R[0] 作存数 / 取数寄存器、R[15] 作基址。
需要在 "IR 字段" 与 "固定 0 / 15" 之间二选一 → 多路选择器。
(2) EXTOP 至少几位 [2 分]
1 位。
理由: 题干给出三类立即数情形:
- I 型 imm8 当带符号 → 符号扩展;
- I 型 imm8 当无符号 → 零扩展;
- M 型 offset 当带符号 → 符号扩展。
总共只有 零扩展 / 符号扩展 两种模式,1 位即可编码(0 表零扩展,1 表符号扩展)。
易错点: "EXTop 几位"看的是有多少种扩展模式,不是有多少种指令。本题虽然有 R/I/M 三种指令格式,但扩展操作只有 2 种,故 1 位足够。
(3) 取指周期的 4 个控制信号 [4 分]
取指阶段要做的事:
- 把 PC 当作主存地址送 MAR;
- 读主存把指令送 IR;
- 同时把 PC + 2 算出,更新 PC(题目要求"取指周期完成 PC 增量")。
逐个确定:
| 信号 | 取值 | 理由 |
|---|---|---|
| MARSrc | 0 | MAR 地址来自 PC(不是 ALU 输出) |
| ALUASrc | 0 | ALU 的 A 端用 PC(要算 PC + 2) |
| ALUBSrc | 1 | ALU 的 B 端取常数 2(PC 增量用常量) |
| RegWr | 0 | 取指阶段不写通用寄存器 |
编者注(生僻术语): "取指期完成 PC 增量"是教学型 CPU 的常见简化——把 PC 自增的 ALU 操作和指令读取并行做,省一个时钟周期。真实 CPU 里通常用 专用 PC 加法器(不与主 ALU 共用),同样能并行。
(4) 左移指令周期的控制信号 + EXTop 是否同 M 型 [2 分]
左移指令是 R 型(OP1 = 0010,从 2026-43 (4) 推得 num 字段直接当移位位数)。
执行阶段动作:把寄存器内容左移立即数指定的位数,写回 rt。
| 信号 | 取值 | 理由 |
|---|---|---|
| ALUBSrc | 2 | ALU B 端取扩展器输出的立即数(移位量) |
| RegWsrc | 1 | 写回数据来自 ALU 输出(不是 MDR,未访存) |
| RegDst | 1 | 写到 R[rt](按指令格式) |
| RegWr | 1 | 必须写寄存器(结果 R[rt] ← R[rt] << num) |
EXTop 与 M 型的对比:
- M 型:offset 是带符号整数 → EXTop = 1(符号扩展);
- 左移指令:num 字段是无符号移位位数(从来不是负移位)→ EXTop = 0(零扩展)。
结论:左移指令与 M 型的 EXTop 不同。 左移用零扩展,M 型用符号扩展。
易错点: "立即数扩展"不是只有一种——要看立即数的语义。地址偏移可正可负,必须符号扩展;移位位数恒为非负,零扩展即可。两者使用同一个扩展器但 EXTop 取值相反。