首页/指令库/有符号最小值
MIN

RISC-V MIN 指令详解

指令手册R-type

返回 rs1 和 rs2 按有符号比较的最小值。

指令语法

min rd, rs1, rs2
操作数说明
目标寄存器 rd:存放运算结果的通用寄存器。
源寄存器 rs1:第一个操作数寄存器。
源寄存器 rs2:第二个操作数寄存器。
BZbb位操作整数运算

指令编码

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

MIN 使用 opcode 0110011(0x33)、funct3 100、funct7 0000101。rs1 和 rs2 字段选择两个源寄存器,rd 字段选择目标寄存器。

格式: R-type
opcode: 0110011 (0x33)
funct3: 100 (0x4)
funct7: 0000101 (0x05)

指令行为说明

MIN 是 Zbb 整数最值指令,比较 x[rs1] 与 x[rs2] 后把按有符号关系较小的原始 XLEN 位值写入 rd。它不设置条件码,也不分支。

快速理解与检索要点

MIN 常用于无分支 clamp、min/max 选择和比较后保留原值的场景。它直接返回被选中的 rs1 或 rs2 位模式,而不是比较结果位。

带 U 的形式按无符号整数排序;不带 U 的形式按二进制补码有符号整数排序。
Zbb 最值指令不会读取或写入浮点状态,也不会设置整数条件码。

常见使用场景

整数比较

结合 «min x10, x11, x12 ; x10 = signed_min(x11, x12)» 等实际代码理解该场景。

无分支选择

结合 «min x10, x11, x12 ; x10 = signed_min(x11, x12)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认当前指令格式为 R-type。
  • 确认操作数排列顺序与示例一致。
语义检查
  • 确认目标寄存器用途和调用约定兼容。
  • 确认该指令不是伪指令展开后的底层形式。

容易混淆 / 常见误区

MIN 使用有符号比较;无符号场景使用 MINU。
结果是被选中的原始寄存器值,不是布尔 0/1。
该指令不设置条件码;RISC-V 没有隐式整数标志寄存器。

常见问题

MIN 返回 0/1 吗?

不。它返回 rs1 或 rs2 中按比较规则被选中的原始 XLEN 位值。

MIN 和 minu 怎么选?

数据应按有符号二进制补码解释时用不带 U 的形式;按无符号大小解释时用带 U 的形式。