首页/指令库/无符号最大值
MAXU

RISC-V MAXU 指令详解

指令手册R-type

返回 rs1 和 rs2 按无符号比较的最大值。

指令语法

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

指令行为说明

MAXU 是 Zbb 整数最值指令,比较 x[rs1] 与 x[rs2] 后把按无符号关系较大的原始 XLEN 位值写入 rd。

MAXU 指令解析与执行动画

从机器码字段解析开始,依次展示操作数读取、该指令专属语义计算和 ISA 可见状态更新。

rd
rs1
rs2
maxu
,
,
执行环境
t1(x6)
0x00000014
a0(x10)
0x00001000
31..25
24..20
19..15
14..12
11..7
6..0
0000101
funct7
01010
rs2
00110
rs1
111
funct3
00101
rd
0110011
opcode
执行数据路径
instruction
0x0AA372B3
opcode
0110011 -> OP
funct3
111 -> MAXU
funct7
0000101 -> Zbb MIN/MAX selector
rd / rs1 / rs2
t0(x5) / t1(x6) / a0(x10)
integer comparison and selection
unsigned: 0x00000014 (20) >= 0x00001000 (4096) -> select rs2 = 0x00001000
x5
t0(x5) = 0x00001000
当前步骤

概念步骤:拿到 32-bit 指令编码

机器码按当前指令格式切成字段,动画从 encoding/decode 开始。

encoding: 0x0AA372B3
syntax : maxu t0(x5), t1(x6), a0(x10)
result : t0(x5) = 0x00001000
架构可见结果
t0(x5) = 0x00001000

该动画展示 ISA 可见的解码和状态变化,不表示任何特定 CPU 的流水线、缓存、预测或时序实现。

快速理解与检索要点

MAXU 按无符号关系在 rs1 与 rs2 间选择,并返回被选中的原始 XLEN 位模式,而不是比较结果位。

带 U 的形式按无符号整数排序;不带 U 的形式按二进制补码有符号整数排序。
MAXU 的操作数和结果均为 XLEN 位整数寄存器值。

常见使用场景

整数比较

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

整数最值

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

使用前检查清单

语法检查
  • 确认 rd、rs1、rs2(及 rs3)是合法 GPR。
  • 确认 funct3 与 funct7 字段编码正确。
语义检查
  • 确认结果是否会影响后续分支或地址计算。
  • 确认 rd 寄存器不会被其他指令覆盖。

容易混淆 / 常见误区

MAXU 使用无符号比较;有符号场景使用 MAX。
结果是被选中的原始寄存器值,不是布尔 0/1。
MAXU 与 MAX 的区别只在比较的有符号性;写回的是选中的原始位模式。

常见问题

MAXU 返回 0/1 吗?

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

MAXU 和 max 怎么选?

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