4.2.3【2021统考真题】


好的,这绝对是一道“顶级”的计算机组成原理综合题。它不仅考察了对指令系统、数据表示和运算等核心知识的掌握,更深层次地检验了考生能否从设计者的角度去思考问题,理解指令集架构(ISA)背后的权衡与约束。
我们来深入地、全方位地解析这道题,并按照您的要求,补充“套路经验”和“拉分点”。
首先,附上题目原文:
题目原文
(8)【2021统考真题】假定计算机M字长为16位,按字节编址,连接CPU和主存的系统总线中地址线为20位、数据线为8位,采用16位定长指令字,指令格式及说明如下:
其中,op1~op3为操作码,rs, rt和rd为通用寄存器编号,R[r]表示寄存器r的内容,imm为立即数,target为转移目标的形式地址。请回答下列问题:
- ALU的宽度是多少位?可寻址主存空间大小为多少字节?指令寄存器、主存地址寄存器(MAR)和主存数据寄存器(MDR)分别应有多少位?
- R型格式最多可定义多少种操作?I型和J型格式总共最多可定义多少种操作?通用寄存器最多有多少个?
- 假定op1为0010和0011时,分别表示有符号整数减法和有符号整数乘法指令,则指令01B2H的功能是什么(参考上述指令功能说明的格式进行描述)?若1,2,3号通用寄存器当前内容分别为B052H, 0008H,0020H,则分别执行指令01B2H和01B3H后,3号通用寄存器内容各是什么?各自结果是否溢出?
- 若采用I型格式的访存指令中imm(偏移量)为有符号整数,则地址计算时应对imm进行零扩展还是符号扩展?
- 无条件转移指令可以采用上述哪种指令格式?
综合解析 (解题部分)
问题1分析:硬件基本规格
- ALU的宽度: ALU(算术逻辑单元)是CPU中执行运算的部件,其宽度通常与计算机字长相同,以便能一次性处理一个字的数据。
- 答案: 16位。
- 可寻址主存空间: 由地址线的数量决定。
- 地址线为20位,按字节编址,所以可寻址
2²⁰个字节。2²⁰ = (2¹⁰)² = 1K * 1K = 1M。 - 答案: 1MB (或
2²⁰字节)。
- 地址线为20位,按字节编址,所以可寻址
- 指令寄存器 (IR): 用于存放当前正在执行的指令。其位数应与指令字长相同。
- 答案: 16位。
- MAR: 用于存放访存地址。其位数应与地址线数量相同。
- 答案: 20位。
- MDR: 用于暂存与主存交换的数据。其位数应与数据线宽度相同。
- 答案: 8位。
问题2分析:指令集与寄存器数量
- R型格式操作数:
op1字段是操作码,占4位 (15-12位)。2⁴ = 16。- 答案: R型格式最多可定义 16 种操作。
- I型和J型格式操作数: 它们的操作码字段是
op2和op3,都是6位 (15-10位)。- 总共可以定义
2⁶ = 64种操作。 - 但是! 题中R型指令的操作码
op字段是固定的000000。这意味着op2或op3的前6位如果是000000,就代表这是一条R型指令。所以这一个编码被R型占用了。 - 因此,I型和J型总共能定义的操作数是
2⁶ - 1 = 63种。 - 答案: I型和J型格式总共最多可定义 63 种操作。
- 总共可以定义
- 通用寄存器数量: 由指令中用于指定寄存器编号的字段位数决定。
- 在R型和I型中,
rs,rt,rd字段都是2位。 2² = 4。- 答案: 最多有 4 个通用寄存器 (编号0, 1, 2, 3)。
- 在R型和I型中,
问题3分析:指令译码、执行与溢出判断
-
指令
01B2H的功能:01B2H->0000 0001 1011 0010(二进制)- 格式判断: 前6位是
000000,所以是 R型 指令。 - 分解R型指令:
[000000] [rs=01] [rt=10] [rd=11] [op1=0010] op1=0010表示有符号减法。rs=1,rt=2,rd=3。- 功能描述:
R[rd] <- R[rs] - R[rt] - 答案: R <- R - R。
-
执行
01B2H后R的内容及溢出:R[1] = B052H,R[2] = 0008H。- 计算
B052H - 0008H。B052H是负数 (最高位B是1011)。[B052]补 - [0008]补 = [B052]补 + [-0008]补-0008H的补码:[0008]原 -> [FFFF7]反 -> [FFF8]补B052H + FFF8H = 1B04AH。丢掉进位,结果是B04AH。
- 溢出判断 (减法):
正 - 负 = 正或负 - 正 = 负才可能溢出。这里是负 - 正,结果B04AH也是负数,符号位相同,未溢出。 - 答案: R内容为
B04AH,未溢出。
-
执行
01B3H后R的内容及溢出:01B3H->0000 0001 1011 0011(二进制)- 分解R型指令:
[000000] [rs=01] [rt=10] [rd=11] [op1=0011] op1=0011表示有符号乘法。rs=1,rt=2,rd=3。- 功能:
R[3] <- R[1] * R[2]。 - 计算
B052H * 0008H。B052H(负数),0008H(正数)。结果应为负数。0008是2³。乘以8可以用算术左移3位实现。B052H=1011 0000 0101 0010- 算术左移3位 (高位移出,低位补0):
1000 0010 1001 0000->8290H
- 溢出判断 (乘法/左移): 算术左移时,如果移出的位与符号位不完全相同,则发生溢出。
- 符号位是
1。 - 移出的三位是
011,不全等于1。 - 发生溢出。
- 符号位是
- 答案: R内容为
8290H,结果溢出。
问题4分析:立即数扩展
imm(偏移量) 用于地址计算,如Addr = R[rs] + imm。- 这个地址可以是当前基准地址之前或之后的。这意味着
imm必须能表示正负偏移。 - 为了在和16位的基址寄存器相加时保持其值的正确性,较短的
imm必须扩展到16位。 - 零扩展只适用于无符号数。
- 符号扩展适用于有符号数,它将数的符号位复制到所有新扩展的高位上,以保证值不变。
- 答案: 应对
imm进行符号扩展。
问题5分析:无条件转移指令
- 无条件转移指令 (如
JUMP,JAL) 需要指定一个尽可能大的目标地址范围。 - R型: 不适用,用于寄存器间运算。
- I型:
imm字段太短,用于小的偏移量,适合条件转移,但不适合大范围的无条件跳转。 - J型: 拥有最长的地址字段
target(10位)。它可以直接修改PC的低10位,实现2¹⁰ = 1K字范围内的跳转。这是最适合无条件转移的格式。 - 答案: 可以采用 J型 格式。
套路经验与拉分点
怎么比别人多想一点,拉开差距?
-
指令格式中的“隐藏约束” (拉分点!):
- 套路: 很多同学看到
op2和op3是6位,会直接回答2⁶=64种操作。 - 多想一点: 要立刻意识到,不同的指令格式(R, I, J)共享同一个16位的指令空间。设计者必须有办法区分它们。题中明确指出R型的
op是000000,这说明000000这个编码被“预定”了。所以I/J型能用的编码就少了一个。这是对指令集编码设计的深层理解,能答出-1,瞬间拉开差距。
- 套路: 很多同学看到
-
溢出判断的“双重验证”:
- 套路: 很多同学会背诵溢出判断的口诀,比如
符号位_操作数1 == 符号位_操作数2 && 符号位_操作数1 != 符号位_结果。 - 多想一点: 对于乘法,尤其是乘以2的幂次,可以转化为算术移位。此时,溢出判断有更直观的方法:检查移出的位和符号位是否一致。能从这个角度解释溢出,说明你不仅会计算,还理解运算的硬件实现方式。这是从“计算员”到“设计师”思维的转变。
- 套路: 很多同学会背诵溢出判断的口诀,比如
-
MAR/MDR 与 “编址单位”:
- 套路: MAR位数=地址线数,MDR位数=数据线数。这是对的,但不够深入。
- 多想一点: 在回答MAR位数时,可以补充一句:“因为主存空间为
2²⁰字节,而该机按字节编址,所以需要20位地址”。在回答MDR位数时,可以说:“因为数据线为8位,这意味着CPU与主存每次只能交换8位数据”。这展示了你对“按字节编址”和总线周期的深刻理解。
怎么去多拿一点分数?
- 格式化作答: 对于第3问的功能描述,严格按照题目给的格式
R[rd] <- R[rs] op R[rt]来写,显得非常专业。 - 过程清晰: 在计算减法和乘法时,即使会心算,也要把关键步骤写出来,比如
B052H - 0008H = B052H + [-0008]补 = ...,B052H * 8等价于算术左移3位。这让阅卷老师能清晰看到你的逻辑。 - 解释要点: 对于第4问,不仅要回答“符号扩展”,最好加一句解释:“因为偏移量
imm需要表示正负方向,是有符号数,符号扩展可以保证其值在扩展到位宽相同时不变。” - 联系实际: 对于第5问,可以补充一句:“J型指令提供了比I型指令更大的跳转范围,因此更适合用于函数调用等无条件跳转场景。”
涉及到的知识原理
- 指令集架构 (ISA): 计算机硬件和软件之间的接口。指令格式的设计是ISA设计的核心,它需要在操作种类、寄存器数量、寻址范围之间做出权衡。
- 数据表示: 有符号整数的补码表示法,以及补码加减法的运算规则。
- 算术逻辑单元 (ALU): 算术移位的硬件实现方式,以及溢出的硬件检测逻辑(通常通过比较符号位和进位实现)。
- 存储器层次结构: CPU、寄存器、MAR、MDR、总线、主存之间的关系和交互方式。
- 寻址方式: 立即数寻址、寄存器寻址、跳转指令的PC相对寻址和伪直接寻址(J型)。
通过这样深入的思考和练习,你将不仅仅是在“做题”,而是在真正地“理解计算机是如何工作的”。
