Appearance
题目
某 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。
注:已补充内总线到 MAR 的箭头和内总线到 IR 的箭头。
请回答下列问题。
(1) 图中哪些寄存器是程序员可见的?为何要设置暂存器 T?
(2) 控制信号 ALUop 和 SRop 的位数至少各是多少?
(3) 控制信号 SRout 所控制部件的名称或作用是什么?
(4) 端点①~⑨中,哪些端点须连接到控制部件的输出端?
(5) 为完善单总线数据通路,需要在端点①~⑨中相应的端点之间添加必要的连线。写出连线的起点和终点,以正确表示数据的流动方向。
(6) 为什么二路选择器 MUX 的一个输入端是 2?
解析
本题考查 单总线 CPU 数据通路 的理解。单总线结构的核心矛盾:一条总线同一时刻只能跑一份数据。这就引出几个设计后果——
- 暂存器 T:ALU 需要两个操作数同时上 A/B 端口,单总线一次只能送一个 → 第一个操作数得先"暂存",第二个再上来;
- 三态门控制 (SRout / Xout):避免多个寄存器同时驱动总线产生冲突;
- MUX = 2 输入:把"PC + 2"操作做成定常的硬件捷径。
(1) 程序员可见寄存器与暂存器 T 的作用 [3 分]
程序员可见寄存器:通用寄存器 R0~R3 和 PC。
- R0~R3 在程序中可被指令直接读写;
- PC 通过转移、调用、返回等指令间接修改(程序员意识到它的存在)。
MAR、MDR、IR、T、SR 都是程序员不可见的内部工作寄存器——它们是 CPU 实现细节,没有汇编指令能直接命名它们。
为什么需要暂存器 T: 单总线 + ALU 双输入端口(A/B)的矛盾。如果直接把寄存器接到 A、B:
- R1 上总线 → 同时进 A 和 B(因为 A、B 都来自同一根总线)→ ALU 算的是 R1 op R1,错;
- 解决方案:让 R1 先送到 T 暂存(通过总线送入 T),下一拍 R2 上总线进 B,T 同时把先前存的 R1 送 A → 此时 A、B 端口各持一个不同操作数。
编者注(生僻术语): 这是单总线 ALU 的经典做法——所谓"分两拍取操作数"。多总线 CPU(双总线 / 三总线)就不需要 T,可以并行从两条总线把两个操作数同时送进 ALU。
(2) ALUop 与 SRop 的最少位数 [2 分]
控制位数 = :
| 信号 | 操作种类 | 最少位数 |
|---|---|---|
| ALUop | 7(mova / add / sub / and / or / not / inc) | |
| SRop | 3(mov / left / right) |
(3) SRout 控制的部件 [2 分]
SRout 控制 三态门(tri-state buffer),决定移位寄存器 SR 的输出端是否驱动内总线。
- SRout = 0 → 三态门高阻,SR 输出与总线断开;
- SRout = 1 → 三态门导通,SR 内容上总线。
易错点: 不能用普通 AND 门替代三态门——AND 门"低无效"输出 0,会与其他寄存器输出的 1 短路冲突。三态门的"高阻态"是单总线必备特性。
(4) 须连接到控制部件输出端的端点 [3 分]
控制部件的输出 = 控制信号,凡是改变数据通路状态的端点都属于此类:
应连:① ② ③ ⑤ ⑧
含义大致对应(以题图标号约定):①②③ 控制寄存器写入 / 总线驱动方向;⑤ 触发 ALU 操作;⑧ 触发移位 / 三态门。
不应连(属于数据通路或反馈回控制):④ ⑥ ⑦ ⑨——它们传输的是数据或状态,不是控制信号。
【评分说明】答案包含 ④⑥⑦⑨ 中任一个,不给分;答案不全酌情给分。
(5) 待补充的连线 [2 分]
| 连线 | 起点 | 终点 | 含义 |
|---|---|---|---|
| 连线 1 | ⑥ | ⑨ | 把 ALU 的运算结果送入内总线 / 状态寄存器 |
| 连线 2 | ⑦ | ④ | 把 SR 的输出送向后续部件 |
【评分说明】回答除上述连线以外的其他连线,酌情给分。
(6) MUX 输入端为什么是 2 [1 分]
每条指令长 16 位 = 2B,按字节编址 → 顺序执行时下条指令地址 = (PC) + 2。
MUX 的一个固定输入端接常数 2,是为了 PC 自增 2 的硬件捷径——不需要专门让 ALU 跑一次 "+2",节省一拍。MUX 的另一输入是分支 / 跳转给定的目标地址;用控制信号选择走哪一路。
易错点: 这是字节编址的特征。如果按字编址(每条指令占 1 个地址单位),MUX 的另一输入应该是 1。MUX 输入是 2 是"按字节编址 + 16 位指令"的强暗示。