Skip to content

2015年 408 计算机组成原理 第 44 题

计算机组成原理2015年综合题12分

题目

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

image-20260501023019534

图 a 部分指令控制信号

图 b 指令格式

指令操作码目的操作数源操作数 1源操作数 2159OP7 bits8Md76Rd2 bits5Ms143Rs12 bits2Ms210Rs22 bits

其中: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,寻址方式直接:

字段OPMdRdMs1Rs1Ms2Rs2
二进制0000001001000000

机器码 = 0000 0010 0100 0000B = 0240H

shl R2, R1 —— 二地址,末 3 位置 0。

OP = 0000010(02H),目的 R2,源 1 为 R1(寄存器直接):

字段OPMdRdMs1Rs1Ms2Rs2
二进制0000010010001000

机器码 = 0000 0100 1000 1000B = 0488H

sub R3, (R1), R2 —— 三地址。

OP = 0000011(03H),目的 R3,源 1 为 (R1)(寄存器间接),源 2 为 R2(寄存器直接):

字段OPMdRdMs1Rs1Ms2Rs2
二进制0000011011101010

机器码 = 0000 0110 1110 1010B = 06EAH

(3) 控制信号 ①~⑧ 的取值 [4 分]

按图 a 各步骤的功能反推:

标号取值功能
0不做某项操作(具体看图 a 的 PC 自增逻辑)
movSR 直送(不移位),用于把数据透传
movaALU 取 A 端值(直送),把单操作数送出
leftSR 左移一位
read存储器读
subALU 减法
movSR 直送
SRoutSR 输出三态门使能

【评分说明】答对两个给分。

(4) 两条指令的执行阶段时钟周期数 [3 分]

sub R1, R3, (R2) —— 三地址、含间接寻址:至少 4 个周期。

执行阶段必经:

  1. 把源 1 R3 经总线送 T(暂存);
  2. 把源 2 (R2) 的地址 R2 上总线 → MAR;
  3. 存储器读 → MDR → 总线 → ALU B 端(同时 T 出 → ALU A 端)→ ALU 做 sub → 结果存 SR;
  4. SR → 总线 → R1。

按"一拍只能用一次总线"的约束,至少 4 拍。

inc R1 —— 单地址,自增:至少 2 个周期。

  1. R1 → 总线 → ALU 端口(结合暂存器 T,单操作数自增不用 T)→ ALU 做 inc → SR;
  2. SR → 总线 → R1。

至少 2 拍。

易错点: 单总线 CPU 的"执行周期数 = 用到总线的次数"。每读 / 写一次寄存器、访存一次都要占总线一拍,且不能并发。三地址 + 间接寻址需要 3 次"读源数据上总线" + 1 次"结果写回" = 4 拍;单地址自增只需 1 次"读 + 算" + 1 次"写回" = 2 拍。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题