| 指令 | 类型 | 功能说明 | 运算类型 |
|---|---|---|---|
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 指令都属于 R-Type(寄存器型)格式。
| funct7 | rs2 | rs1 | funct3 | rd | opcode |
| 31..25 |24..20|19..15|14..12|11..7| 6..0 |
opcode 固定为:0110011funct7 固定为:0000001
(区别于 RV32I 算术类的 funct7=0000000)| 指令 | 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
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 格式 |