Appearance
题目
题 43 中描述的计算机,其部分指令执行过程的控制信号如题 44 图 a 所示

图 a 部分指令控制信号
图 b 指令格式
其中: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) 操作。写出题 44 图 a 中标号①~⑧处的控制信号或控制信号的取值。
(4) 指令 sub R1,R3,(R2) 和 inc R1 的执行阶段至少各需要多少个时钟周期?
解析
本题在 2015-43 的单总线 CPU 之上,进一步考查 指令格式映射机器码 + 控制信号填空 + 执行阶段时钟周期数。
回顾指令格式(位 [15:9] OP / [8] Md / [7:6] Rd / [5] Ms1 / [4:3] Rs1 / [2] Ms2 / [1:0] Rs2):
- 三地址:所有 9 个低位字段都用;
- 二地址:末 3 位(Ms2 + Rs2)置 0;
- 单地址:末 6 位(Ms1 + Rs1 + Ms2 + Rs2)置 0。
寻址方式 0 = 寄存器直接(Rn);1 = 寄存器间接((Rn))(题约定,与图 b 对应)。
(1) 最多可定义的指令条数 [1 分]
OP 占 7 位:
(2) 三条指令的机器码 [4 分]
按字段从高到低拼:OP / Md / Rd / Ms1 / Rs1 / Ms2 / Rs2。
① inc R1 —— 单地址,末 6 位置 0。
OP = 0000001(01H),目的为 R1,寻址方式直接:
| 字段 | OP | Md | Rd | Ms1 | Rs1 | Ms2 | Rs2 |
|---|---|---|---|---|---|---|---|
| 二进制 | 0000001 | 0 | 01 | 0 | 00 | 0 | 00 |
机器码 = 0000 0010 0100 0000B = 0240H。
② shl R2, R1 —— 二地址,末 3 位置 0。
OP = 0000010(02H),目的 R2,源 1 为 R1(寄存器直接):
| 字段 | OP | Md | Rd | Ms1 | Rs1 | Ms2 | Rs2 |
|---|---|---|---|---|---|---|---|
| 二进制 | 0000010 | 0 | 10 | 0 | 01 | 0 | 00 |
机器码 = 0000 0100 1000 1000B = 0488H。
③ sub R3, (R1), R2 —— 三地址。
OP = 0000011(03H),目的 R3,源 1 为 (R1)(寄存器间接),源 2 为 R2(寄存器直接):
| 字段 | OP | Md | Rd | Ms1 | Rs1 | Ms2 | Rs2 |
|---|---|---|---|---|---|---|---|
| 二进制 | 0000011 | 0 | 11 | 1 | 01 | 0 | 10 |
机器码 = 0000 0110 1110 1010B = 06EAH。
(3) 控制信号 ①~⑧ 的取值 [4 分]
按图 a 各步骤的功能反推:
| 标号 | 取值 | 功能 |
|---|---|---|
| ① | 0 | 不做某项操作(具体看图 a 的 PC 自增逻辑) |
| ② | mov | SR 直送(不移位),用于把数据透传 |
| ③ | mova | ALU 取 A 端值(直送),把单操作数送出 |
| ④ | left | SR 左移一位 |
| ⑤ | read | 存储器读 |
| ⑥ | sub | ALU 减法 |
| ⑦ | mov | SR 直送 |
| ⑧ | SRout | SR 输出三态门使能 |
【评分说明】答对两个给分。
(4) 两条指令的执行阶段时钟周期数 [3 分]
sub R1, R3, (R2) —— 三地址、含间接寻址:至少 4 个周期。
执行阶段必经:
- 把源 1 R3 经总线送 T(暂存);
- 把源 2 (R2) 的地址 R2 上总线 → MAR;
- 存储器读 → MDR → 总线 → ALU B 端(同时 T 出 → ALU A 端)→ ALU 做 sub → 结果存 SR;
- SR → 总线 → R1。
按"一拍只能用一次总线"的约束,至少 4 拍。
inc R1 —— 单地址,自增:至少 2 个周期。
- R1 → 总线 → ALU 端口(结合暂存器 T,单操作数自增不用 T)→ ALU 做 inc → SR;
- SR → 总线 → R1。
至少 2 拍。
易错点: 单总线 CPU 的"执行周期数 = 用到总线的次数"。每读 / 写一次寄存器、访存一次都要占总线一拍,且不能并发。三地址 + 间接寻址需要 3 次"读源数据上总线" + 1 次"结果写回" = 4 拍;单地址自增只需 1 次"读 + 算" + 1 次"写回" = 2 拍。