RISC-V(三):RV32M(RISC-V 32 位乘法 / 除法扩展指令集)

RISC-V 的 RV32M 是 RV32I 基础整数指令集的乘法 / 除法扩展指令集 (M = Multiplication and Division),专门提供 32 位有符号 / 无符号整数的乘法、除法、取余操作,填补了 RV32I 仅支持基础算术运算的空白。RV32M 属于 RISC-V 标准扩展(非必选,但主流处理器均会实现),所有指令均为 R 型格式(寄存器 - 寄存器操作),操作数和结果均存于通用寄存器(x0~x31)。

一、RV32M 核心特性

  1. 指令格式 :全部为R 型指令 ,编码格式如下(7 位 opcode 固定为0110011,与 RV32I 的算术运算指令同 opcode,通过 funct3/funct7 区分):

    31-25 (funct7) 24-20 (rs2) 19-15 (rs1) 14-12 (funct3) 11-7 (rd) 6-0 (opcode)
    乘法 / 除法区分 源寄存器 2 源寄存器 1 操作类型 目的寄存器 0110011
  2. 数据类型 :仅支持32 位有符号(signed)32 位无符号(unsigned) 整数运算;

  3. 结果处理 :乘法指令会产生 64 位结果,RV32M 拆分为高 32 位低 32 位分别存入两个寄存器;除法 / 取余指令直接产生 32 位结果;

  4. 异常处理 :除法 / 取余指令若遇到除数为 0 ,会触发非法指令异常(Illegal Instruction Exception),具体行为由处理器实现定义(部分处理器会返回 0 或固定值)。

二、RV32M 指令集完整列表

RV32M 共包含10 条核心指令 ,分为乘法类除法 / 取余类,按功能分类如下(均为 R 型指令):

1. 乘法类指令(6 条)

处理 32 位整数乘法,结果为 64 位,拆分为低 32 位(LO)高 32 位(HI) 分别存储,支持有符号 / 无符号及混合符号乘法。

指令名 汇编格式 funct7 funct3 功能描述 有符号 / 无符号说明
mul mul rd, rs1, rs2 0000001 000 计算 rs1 × rs2,将低 32 位结果存入 rd 有符号 × 有符号
mulh mulh rd, rs1, rs2 0000001 001 计算 rs1 × rs2,将高 32 位结果存入 rd 有符号 × 有符号
mulhsu mulhsu rd, rs1, rs2 0000001 010 计算 rs1 × rs2,将高 32 位结果存入 rd 有符号(rs1) × 无符号(rs2)
mulhu mulhu rd, rs1, rs2 0000001 011 计算 rs1 × rs2,将高 32 位结果存入 rd 无符号 × 无符号
muli muli rd, rs1, imm - - 乘法立即数指令(RV32M 可选扩展),rs1 × 立即数,低 32 位存入 rd 有符号 × 有符号(立即数为 12 位有符号)
mulw mulw rd, rs1, rs2 0000001 000 仅 RV64M 支持(RV32M 无),32 位乘法结果符号扩展为 64 位存入 rd -

关键说明

  • 32 位 × 32 位 乘法的结果是 64 位,因此需要mul(低 32 位)+mulh/mulhsu/mulhu(高 32 位)配合,才能获取完整结果;
  • 混合符号乘法(mulhsu)主要用于地址计算、无符号数与有符号数的运算场景(如偏移量为有符号,基地址为无符号)。
2. 除法 / 取余类指令(4 条)

处理 32 位整数的除法和取余,直接产生 32 位结果,支持有符号 / 无符号运算,除数为 0 会触发异常

指令名 汇编格式 funct7 funct3 功能描述 有符号 / 无符号说明 余数符号规则
div div rd, rs1, rs2 0000001 100 计算 rs1 ÷ rs2,商存入 rd(向零取整) 有符号 -
divu divu rd, rs1, rs2 0000001 101 计算 rs1 ÷ rs2,商存入 rd(向零取整) 无符号 -
rem rem rd, rs1, rs2 0000001 110 计算 rs1 ÷ rs2,余数存入 rd 有符号 余数符号与被除数(rs1) 一致
remu remu rd, rs1, rs2 0000001 111 计算 rs1 ÷ rs2,余数存入 rd 无符号 余数为非负数

关键说明

  • 向零取整 :无论被除数 / 除数正负,商的小数部分直接舍弃(如 5 ÷ 2 = 2-5 ÷ 2 = -2);
  • 余数符号 :有符号取余(rem)的余数符号与被除数一致(如 rem x1, x2, x3,若 x2=-5、x3=2,则 x1=-1);无符号取余(remu)余数恒为正。

三、指令使用示例

通过具体汇编代码,说明 RV32M 指令的实际应用(基于 RV32IM 架构):

示例 1:32 位有符号乘法(完整 64 位结果)

计算 12345 × -6789(32 位有符号),获取低 32 位和高 32 位结果:

riscv

复制代码
# 寄存器初始化:x1=12345(0x3039),x2=-6789(0xFFFFE533)
li x1, 12345
li x2, -6789

# 乘法运算:x3=低32位,x4=高32位
mul  x3, x1, x2   # x3 = (12345 × -6789) & 0xFFFFFFFF
mulh x4, x1, x2   # x4 = (12345 × -6789) >> 32(有符号移位)

# 结果:12345 × -6789 = -83810205,64位表示为 0xFFFFFFFC7E6F75B,因此:
# x3 = 0x7E6F75B(低32位),x4 = 0xFFFFFFFF(高32位,有符号扩展)
示例 2:无符号除法与取余

计算 0x12345678 ÷ 0x100(无符号),获取商和余数:

riscv

复制代码
# 寄存器初始化:x1=0x12345678,x2=0x100
li x1, 0x12345678
li x2, 0x100

# 无符号除法+取余:x3=商,x4=余数
divu x3, x1, x2   # x3 = 0x12345678 ÷ 0x100 = 0x123456(商)
remu x4, x1, x2   # x4 = 0x12345678 % 0x100 = 0x78(余数)
示例 3:有符号除法与取余(余数符号与被除数一致)

计算 -10 ÷ 3(有符号),验证商和余数规则:

riscv

复制代码
# 寄存器初始化:x1=-10(0xFFFFFFF6),x2=3
li x1, -10
li x2, 3

# 有符号除法+取余:x3=商,x4=余数
div  x3, x1, x2   # x3 = -10 ÷ 3 = -3(向零取整)
rem  x4, x1, x2   # x4 = -10 % 3 = -1(余数符号与被除数x1一致)

四、RV32M 与 RV64M 的区别

RV32M 是 32 位架构的乘法 / 除法扩展,而 RV64M 是 64 位架构的扩展,核心区别在于:

  1. 操作数宽度:RV32M 操作 32 位整数,RV64M 操作 64 位整数;
  2. 乘法结果:RV32M 乘法结果为 64 位(拆分为两个 32 位寄存器),RV64M 乘法结果为 128 位(拆分为两个 64 位寄存器);
  3. 额外指令 :RV64M 新增mulw/divw/remw等指令,支持32 位运算结果符号扩展为 64 位,兼容 RV32M 的操作。

五、RV32M 实现注意事项

  1. 硬件开销 :乘法 / 除法单元是处理器中面积和功耗较大的模块,RV32M 支持流水线实现 (高吞吐率)或迭代实现(低面积),处理器可根据应用场景选择;
  2. 异常处理 :必须处理除数为 0 的异常,主流实现会触发illegal_instruction异常,由操作系统内核处理;
  3. 指令兼容性:RV32M 是 RV32I 的扩展,若处理器未实现 RV32M,执行 M 类指令会触发非法指令异常;
  4. 性能优化:乘法指令可与其他指令流水线并行执行,除法指令因迭代特性,延迟通常更高(3~10 个时钟周期)。

六、总结

RV32M 是 RISC-V RV32 架构的核心算术扩展 ,通过 10 条 R 型指令实现了 32 位有符号 / 无符号的乘法、除法、取余操作,解决了 RV32I 仅支持基础运算的局限。其设计遵循 RISC-V 的模块化、精简性原则:

  • 乘法指令拆分高低位结果,适配 32 位寄存器的限制;
  • 除法 / 取余指令明确向零取整和余数符号规则,保证跨平台兼容性;
  • 可选实现的特性,让处理器可在性能面积 / 功耗之间做权衡。

RV32M 广泛应用于嵌入式、物联网等 32 位 RISC-V 处理器中,是除 RV32I 外最常用的标准扩展。

相关推荐
坏孩子的诺亚方舟2 天前
RTL设计师攻略0_架构与微架构
架构·cpu·面试攻略
爱分享的阿Q4 天前
RISC-V驱动开发合规解析
驱动开发·risc-v
嵌入式小企鹅5 天前
RISC-V爆发、AI编程变天、半导体涨价潮
物联网·学习·ai编程·开发工具·risc-v·芯片·工具链
BackCatK Chen6 天前
突破硅基极限!中国无极芯片技术解析:二维半导体如何实现后摩尔时代换道超车
risc-v·自主可控·后摩尔时代·无极芯片·二维半导体·二硫化钼·中国芯片
CappuccinoRose7 天前
计算机系统体系结构及其组成 - 汇总篇
cpu·计算机体系结构·总线·计算机组成·指令系统·并行处理机·码制
国科安芯7 天前
面向商业航天的高可靠电机控制系统:从环境约束到芯片实现
单片机·嵌入式硬件·架构·risc-v·安全性测试
嵌入式小企鹅7 天前
阿里编程模型赶超、半导体涨价蔓延、RISC-V新品密集上线
人工智能·学习·ai·程序员·risc-v·芯片
Kang.lee7 天前
2026.4.5【soc设计经验分享】soc信息安全之jtag鉴权
soc·risc-v·asic
avi91117 天前
万事课程:AMD CPU 结构 和虚拟化---入门讲解
cpu·amd·系统工程师
fe7tQnVan7 天前
.NET 11 预览版 1 中的新兴架构演进:RISC-V 与 LoongArch 支持的深度技术解析与生态展望
架构·.net·risc-v