是什么

  • 定义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)。

  • 典型功能

    1. 立即数算术/逻辑运算

    2. 访存 Load/Store,实现从主存读/写数据。

    3. 条件转移 Branch:比较 rsrt,若满足条件则

  • 无条件跳转应用:若将分支条件设为“恒成立”(如比较 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位)

    1. ALU 宽度是多少位?可寻址主存空间大小为多少字节?IR、MAR、MDR 各有多少位?

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

    3. op10010B 表示有符号减法,0011B 表示有符号乘法。通用寄存器 R1、R2、R3 当前内容分别为

      • 指令 的功能是什么?执行后 R3 内容是什么?是否溢出?

      • 执行指令 后 R3 内容是什么?是否溢出?

    4. 采用 I 型格式的访存指令中,imm 为有符号整数,地址计算时应对 imm 进零扩展还是符号扩展?

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

  • 分析

    • 第 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 宽度

    • 可寻址主存空间

    • IRMARMDR

    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,此时必须比对其真值是否落在 范围;真值 超界,判定为溢出。