是什么
-
定义:RISC架构指令格式通常采用固定长度(如 16 位或 32 位),将指令规整地划分为 R型(寄存器-寄存器型)、I型(立即数/访存/分支型) 和 J型(跳转型) 三大类,以简化译码逻辑与流水线设计。
-
大白话:CPU 处理任务的三种模具——纯寄存器互算用 R 型,带常数/算地址用 I 型,大跨步跳转用 J 型。
核心内容
1. 硬件参数对应关系(考点溯源)
做题时,题目中的各个硬件参数应去题干中抓取以下对应信息:
-
ALU 宽度 找题干中的 计算机字长(处理数据的基本宽度,如 16 位机器则 ALU 为 16 位)。
-
可寻址主存空间大小 找 地址线条数 与 编址方式(,如 20 根地址线按字节编址对应 )。
-
IR 位数(指令寄存器) 找 指令字长(如 16 位定长指令字,则 )。
-
MAR 位数(地址寄存器) 找 地址总线条数(如 20 位)。
-
MDR 位数(数据寄存器) 找 系统数据总线条数(若题干指明数据线为 8 位,则 ;若未指明数据线,通常默认等于存储字长/机器字长)。
-
通用寄存器个数 找指令中 寄存器编号字段位数(如
rs占 2 位,则寄存器数为 个)。
2. 三大核心指令类型详解(R 型 / I 型 / J 型)
(1) R 型指令(Register 格式)
-
特征结构:高位通常为全 0 扩展标识符(
000000),包含源寄存器 1(rs)、源寄存器 2(rt)、目的寄存器(rd)及具体功能操作码(op1/funct)。 -
典型功能:纯寄存器之间的算术与逻辑运算(如加、减、乘、与、或、异或)。
-
语义模板:
-
无条件跳转应用:若定义寄存器间接跳转指令(如
jr rs,),也可由 R 型格式实现。
(2) I 型指令(Immediate 格式)
-
特征结构:包含高位主操作码(
op2)、源寄存器(rs)、目标/源寄存器(rt)及立即数字段(imm)。 -
典型功能:
-
立即数算术/逻辑运算:
-
访存 Load/Store:,实现从主存读/写数据。
-
条件转移 Branch:比较
rs与rt,若满足条件则 。
-
-
无条件跳转应用:若将分支条件设为“恒成立”(如比较 R0 与 R0)或使用基址相对寻址,I 型也可实现无条件跳转。
(3) J 型指令(Jump 格式)
-
特征结构:包含高位操作码(
op3)和长地址字段(target)。 -
典型功能:实现长距离或全局范围的直接无条件绝对跳转。
-
语义模板:(高位保持当前 PC 高位不变)。
3. 操作码扩展(前缀码原理)
-
总容量约束:若主操作码字段占 6 位,总编码空间为 种。
-
状态互斥分配:
-
R 型格式占用其中 1 种前缀(如
000000),内部再靠op1扩展出 种操作。 -
剩余供 I 型和 J 型瓜分的高位组合数最多为:
-
4. 扩展方式的选择与溢出判断
(1) 零扩展 vs 符号扩展的选择标准
-
符号扩展(Sign Extension):
-
适用场景:操作数为有符号整数(补码)、算术加减法偏移量、基址寻址偏移量。
-
规则:高位全部补符号位(正数补 0,负数补 1),确保真值不变。
-
-
零扩展(Zero Extension):
-
适用场景:操作数为无符号数或逻辑操作立即数(与、或、按位测试)。
-
规则:高位一律补 0。
-
(2) 运算溢出(Overflow)的检查方法
-
代数真值比对法(直观法):
-
位有符号补码表示范围:。
-
减法示例:()() 未溢出。
-
乘法示例:() 发生截断,溢出。
-
-
硬件符号位判别法:
-
正数与负数相加,或同号数相减,绝不溢出。
-
同号数相加(或负数减正数、正数减负数),若结果符号位与源操作数符号规律相反,则判定为溢出。
-
例题
-
题目:
假定计算机 M 字长为 16 位,按字节编址,系统总线中地址线 20 位、数据线 8 位,采用 16 位定长指令字。
指令格式:
-
R 型:
000000(6位)+rs(2位)+rt(2位)+rd(2位)+op1(4位) -
I 型:
op2(6位)+rs(2位)+rt(2位)+imm(6位) -
J 型:
op3(6位)+target(10位)
问:
-
ALU 宽度是多少位?可寻址主存空间大小为多少字节?IR、MAR、MDR 各有多少位?
-
R 型最多定义多少种操作?I 型和 J 型总共最多定义多少种操作?通用寄存器最多有多少个?
-
若
op1为0010B表示有符号减法,0011B表示有符号乘法。通用寄存器 R1、R2、R3 当前内容分别为 、、。-
指令 的功能是什么?执行后 R3 内容是什么?是否溢出?
-
执行指令 后 R3 内容是什么?是否溢出?
-
-
采用 I 型格式的访存指令中,
imm为有符号整数,地址计算时应对imm进零扩展还是符号扩展? -
无条件转移指令可以采用上述哪种指令格式?
-
-
分析:
-
第 1 问:ALU 宽度对应机器字长(16 位);寻址空间根据 20 根地址线求 ;IR 对应指令长(16 位);MAR 对应地址线(20 位);MDR 对应数据线(8 位)。
-
第 2 问:R 型看
op1(4 位);I 与 J 看高 6 位扣除 R 型的000000状态();寄存器数看编号占 2 位()。 -
第 3 问:展开机器码为二进制切分字段判断操作与寄存器编号。代入数值计算并依据 16 位补码范围判断溢出。
-
第 4 问:有符号偏移量保持真值必须用符号扩展。
-
第 5 问:J 型直接写 PC,I 型条件恒真跳转,R 型寄存器传送至 PC,三者均可实现。
-
-
答案:
1)
-
ALU 宽度:
-
可寻址主存空间:
-
IR:,MAR:,MDR:
2)
-
R 型操作数:
-
I 型与 J 型操作数总和:
-
通用寄存器数:
3)
-
指令 二进制为
000000 01 10 11 0010B,功能为: -
执行 后,,结果未溢出。
-
执行 后,,结果溢出。
4)
-
应对
imm进行符号扩展。
5)
-
可以采用 J 型格式(也可采用 I 型格式 或 R 型格式)。
-
⚠️ 易错点
Warning
MDR 位宽的特殊陷阱:常规默认下 MDR 等于机器字长,但当题干**明确指出“连接 CPU 和主存的总线数据线为 8 位”**时,MDR 必须与物理数据线宽度一致,记为 8 位。
前缀码互斥计算:计算 I/J 型可用编码数时,极易漏减全 0 状态。高位 6 位中
000000已经被 R 型独占作为特征码,必须计算 。补码乘法位移后的溢出漏判:负数乘以 (左移 3 位)后,若只看低 16 位直接转十六进制会得到
8290H,此时必须比对其真值是否落在 范围;真值 超界,判定为溢出。