Skip to content

2021年 408 计算机组成原理 第 43 题

计算机组成原理2021年综合题15分

题目

假定计算机 M 字长为 16 位,按字节编址,连接 CPU 和主存的系统总线中地址线为 20 位、数据线为 8 位,采用 16 位定长指令字,指令格式及其说明如下:

R 型R[rd] ← R[rs] op1 R[rt]

1510R型6 bits00000098rs2 bits76rt2 bits54rd2 bits30op14 bits

I 型(含 ALU 运算、条件转移和访存操作三种指令)

1510op26 bits98rs2 bits76rt2 bits50imm6 bits

J 型PC 的低 10 位 ← target

1510op36 bits90target10 bits

其中,op1~op3 为操作码,rs、rt 和 rd 为通用寄存器编号,R[r] 表示寄存器 r 的内容,imm 为立即数,target 为转移目标的形式地址。请回答下列问题。

(1) ALU 的宽度是多少位?可寻址主存空间大小为多少字节?指令寄存器、主存地址寄存器(MAR)和主存数据寄存器(MDR)分别应有多少位?

(2) R 型格式最多可定义多少种操作?I 型和 J 型格式总共最多可定义多少种操作?通用寄存器最多有多少个?

(3) 假定 op1 为 0010 和 0011 时,分别表示带符号整数减法和带符号整数乘法指令,则指令 01B2H 的功能是什么(参考上述指令功能说明的格式进行描述)?若 1、2、3 号通用寄存器当前内容分别为 B052H、0008H、0020H,则分别执行指令 01B2H 和 01B3H 后,3 号通用寄存器内容各是什么?各自结果是否溢出?

(4) 若采用 I 型格式的访存指令中 imm(偏移量)为带符号整数,则地址计算时应对 imm 进行零扩展还是符号扩展?

(5) 无条件转移指令可以采用上述哪种指令格式?

解析

本题考查 类 MIPS 风格的三种指令格式(R / I / J 型)+ 系统总线 + 寄存器位宽。读取要点:

  • 指令字段拆分决定了 ALU、寄存器组、立即数、跳转目标的容量上限;
  • ALU、IR、MAR、MDR 各有自己的位宽来源——别张冠李戴:ALU 与字长一致,IR 与指令长度一致,MAR 与地址总线宽度一致,MDR 与数据总线宽度一致。

(1) ALU 宽度与三大寄存器位数 [4 分]

部件位数来源
ALU16字长 16 位(ALU 一次处理 1 个字宽的运算)
主存空间 B = 1 MB地址线 20 位、按字节编址
指令寄存器(IR)16指令字长 16 位
MAR20地址线宽度(要发出 20 位主存地址)
MDR8数据线宽度(一次只能传 8 位)

易错点: 数据线 8 位但字长 16 位 → 一次取一个 16 位指令需 2 次主存访问。MDR 仍按数据线宽度(8 位),不会因为字长是 16 而扩到 16。

(2) R / I / J 型最多操作种类 + 通用寄存器数 [4 分]

R 型操作码 = 低 4 位 op1:

I 型与 J 型共享高 6 位操作码空间: 但前 6 位全 0 的编码已分给 R 型(R 型高 6 位固定 000000),故:

通用寄存器数: R 型和 I 型中 rs / rt / rd 字段都是 2 位 → 寄存器编号 0~3:

编者注(生僻术语): 真实 MIPS 是 5 位寄存器编号 → 32 个通用寄存器。本题压缩到 2 位是为题面简洁,同时受限于 16 位指令字。

(3) 指令 01B2H、01B3H 的功能与溢出判断 [4 分]

Step 1. 译码 01B2H。

按 R 型字段 [op = 000000 | rs = 01 | rt = 10 | rd = 11 | op1 = 0010]:

  • op = 000000 → R 型;
  • rs = 01 = R1;
  • rt = 10 = R2;
  • rd = 11 = R3;
  • op1 = 0010 → 带符号减法。

功能:

Step 2. 算 01B2H 的结果。

溢出判断(带符号): B052H 最高位 1(视为负),0008H 最高位 0(正)。负减正 → 应得更负的负数 = B04AH,最高位仍为 1(仍为负数),符号未跳变 → 不溢出

Step 3. 译码 01B3H。

字段同 01B2H,仅 op1 = 0011 → 带符号乘法。

功能:

Step 4. 算 01B3H 的结果。

把 B052H 视作 16 位补码:B052H 最高位 1 → 负数。其绝对值 = ,故 R[1] =

R[2] = 0008H = 8。

16 位补码表示范围 远超出 → 溢出

低 16 位结果(按位级运算):

取低 16 位 = 8290H,按 16 位补码读为

易错点: 别只看符号位。带符号乘法溢出判断要把 32 位真实积截到 16 位后看 高 17 位是否都是符号位的扩展——这等价于"截断后值是否等于真实值"。本题真实值 与截断后 不等,确认溢出。

(4) I 型访存指令的 imm 应零扩展还是符号扩展?[1 分]

应符号扩展。

理由: imm 表示偏移量(向前 / 向后),是带符号整数。零扩展会把所有负偏移变成大正数(加到基址寄存器后跳到错误的高地址),与"反向跳转"的需求矛盾。符号扩展能保留正负号语义,让 imm 的真实值不变。

(5) 无条件转移用什么格式?[1 分]

J 型。

J 型结构:[op3 6 位 | target 10 位]。无条件转移把 target 字段写入 PC 的低 10 位(高 6 位保持不变)→ 直接跳到由当前 PC 高 6 位 + target 拼接出的地址。target 10 位提供 = 1024 字节的"段内"跳转范围。

编者注(生僻术语): 这种"高位 PC 不变 + 低位绝对寻址"的方式是 J 型跳转的特征。与 I 型的相对寻址(PC + 偏移)不同,J 型是"段内绝对寻址"——跳转范围更大,但跨段时无能为力。MIPS 的 j 指令也是这个模式。

最后更新:

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