🧩 RV32M 扩展指令集(乘除法类)详细说明


🧩 一、RV32M 指令汇总表

指令 类型 功能说明 运算类型
MUL R 型 有符号乘法(取低 32 位) rd = (rs1 * rs2)[31:0]
MULH R 型 有符号 × 有符号 → 取高 32 位 rd = (rs1 * rs2)[63:32]
MULHSU R 型 有符号 × 无符号 → 取高 32 位 rd = (signed(rs1) * unsigned(rs2))[63:32]
MULHU R 型 无符号 × 无符号 → 取高 32 位 rd = (unsigned(rs1) * unsigned(rs2))[63:32]
DIV R 型 有符号除法 rd = signed(rs1) / signed(rs2)
DIVU R 型 无符号除法 rd = unsigned(rs1) / unsigned(rs2)
REM R 型 有符号取余 rd = signed(rs1) % signed(rs2)
REMU R 型 无符号取余 rd = unsigned(rs1) % unsigned(rs2)

🧩 二、RV32M 指令编码格式

所有 RV32M 指令都属于 R-Type(寄存器型)格式

| funct7 | rs2 | rs1 | funct3 | rd | opcode |
| 31..25 |24..20|19..15|14..12|11..7| 6..0  |

🧩 三、RV32M 指令编码表

指令 funct7 rs2 rs1 funct3 rd opcode 说明
MUL 0000001 rs2 rs1 000 rd 0110011 有符号乘法(低 32 位)
MULH 0000001 rs2 rs1 001 rd 0110011 有符号乘法(高 32 位)
MULHSU 0000001 rs2 rs1 010 rd 0110011 有符号 × 无符号(高 32 位)
MULHU 0000001 rs2 rs1 011 rd 0110011 无符号乘法(高 32 位)
DIV 0000001 rs2 rs1 100 rd 0110011 有符号除法
DIVU 0000001 rs2 rs1 101 rd 0110011 无符号除法
REM 0000001 rs2 rs1 110 rd 0110011 有符号取余
REMU 0000001 rs2 rs1 111 rd 0110011 无符号取余

🧩 四、编码示例:MUL x5, x6, x7

假设:

rd = x5
rs1 = x6
rs2 = x7

对应字段:

字段 二进制位宽 说明
funct7 0000001 [31:25] RV32M 扩展标识
rs2 00111 [24:20] x7
rs1 00110 [19:15] x6
funct3 000 [14:12] MUL
rd 00101 [11:7] x5
opcode 0110011 [6:0] R-Type 算术类

组合成机器码:

0000001 00111 00110 000 00101 0110011

16进制表示:

0x02E302B3

🧩 五、结果验证示例

asm
    li  x6, 3
    li  x7, 4
    mul x5, x6, x7   # x5 = 12

执行结果:

x5 = 12

🧩 六、指令分组回顾

扩展 名称 功能
I 基础整数指令 加减、逻辑、移位、跳转、加载存储
M 乘除法扩展 乘、除、取余(有符号/无符号)
A 原子扩展 读-改-写操作(多核)
F/D 浮点扩展 单/双精度浮点运算
C 压缩扩展 16 位短指令(提高密度)

✅ 七、总结

分类 指令 功能 对应 funct3
乘法类 MUL / MULH / MULHSU / MULHU 乘法(低/高位,有符号/无符号) 000–011
除法类 DIV / DIVU / REM / REMU 除法与取余(有符号/无符号) 100–111
统一特征 funct7 = 0000001, opcode = 0110011 皆为 R-Type 格式