Skip to content

2019年 408 计算机组成原理 第 17 题

计算机组成原理2019年选择题2分

题目

某指令功能为 R[r2] ← R[r1] + M[R[r0]],其两个源操作数分别采用寄存器、寄存器间接寻址方式。对于下列给定部件,该指令在取数及执行过程中需要用到的是( )。

Ⅰ. 通用寄存器组(GPRs) Ⅱ. 算术逻辑单元(ALU) Ⅲ. 存储器(Memory) Ⅳ. 指令译码器(ID)

错因

A

漏选 Ⅲ(存储器)。可能没注意到 M[R[r0]] 中的 M[] 表示访存——一旦看到方括号 M[] 就要立即想到"要访问存储器"。寄存器间接寻址的"间接"二字也是访存的提示。

C

漏选 Ⅰ(通用寄存器组)。题面明示三个寄存器编号 r0, r1, r2——必然要从 GPRs 里读取 r1、r0 内容,并把结果写回 r2,缺一不可。如果不用 GPRs,这些 r 编号无从兑现。

D

漏选 Ⅱ(ALU)但多选 Ⅳ(指令译码器)。两个错叠加:

  1. 漏 ALU+ 号是加法运算,必须经过 ALU
  2. 多 ID:题问"取数及执行"——译码已经在更早的"译码段"完成,到了取数/执行阶段不再需要 ID

总解析

第一步:拆分指令的数据流

R[r2] ← R[r1] + M[R[r0]] 完整动作:

步骤用到的部件
① 读 r1 寄存器内容GPRs(Ⅰ)
② 读 r0 寄存器内容GPRs(Ⅰ)
③ 用 r0 的内容做地址,到主存取 M[R[r0]]Memory(Ⅲ)
④ R[r1] + M[R[r0]] 相加ALU(Ⅱ)
⑤ 结果写回 r2 寄存器GPRs(Ⅰ)

用到的部件:Ⅰ + Ⅱ + Ⅲ。

第二步:判断 Ⅳ(指令译码器)是否需要

指令在 CPU 中走过的几个阶段:

阶段任务关键部件
取指(IF)从内存取指令 → IRPC、Memory、IR
译码(ID)解析操作码、寄存器号、寻址方式指令译码器 ID
取数(EX 前段)从寄存器/内存读操作数GPRs、Memory
执行(EX)ALU 运算ALU
访存(MEM)读/写存储器Memory
写回(WB)结果写回寄存器GPRs

题面明确问"取数及执行过程"——这两个阶段在 ID 之后,译码工作已完成,得到的"控制信号 + 寄存器号 + 寻址方式"已经送到数据通路;ID 部件本身在后续阶段不再使用。

所以 Ⅳ 不在答案里。

第三步:汇总

需要的部件 = Ⅰ + Ⅱ + Ⅲ。

最终答案是 B(仅 I、II、III)

速查表——按指令阶段对应部件:

阶段必用部件本题用了?
IF(取指)PC、Memory、IR取指阶段,题问"取数及执行",不算
ID(译码)指令译码器译码阶段,题问"取数及执行",不算
取数GPRs、Memory✓(Ⅰ、Ⅲ)
执行ALU✓(Ⅱ)
访存Memory已在"取数"用过
写回GPRs已在 GPRs 范畴

易错点速查

  1. 看到 M[] 立即想到"用 Memory"
  2. 看到 +ANDOR 等运算符立即想到"用 ALU"
  3. 看到 R[] 立即想到"用 GPRs"
  4. 题问的"取数及执行" 不包括"译码"——ID 部件已在更早阶段完成工作

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数