首页/指令库/无符号小于置位
SLTU

RISC-V SLTU 指令详解

指令手册R-type

若rs1无符号比较小于rs2,则置rd为1,否则置0

指令语法

sltu rd, rs1, rs2
操作数说明
rd:选择 x0–x31;rd 与源重叠时使用写回前的源值;写入 x0 被丢弃。
rs1、rs2:两个 XLEN 位源值,均按无符号整数比较。
小于时 rd=1,否则 rd=0;没有条件分支。
RV32IRV64I算术运算比较

指令行为说明

SLTU指令采用R型格式。将rs1和rs2作为无符号整数比较,若rs1<rs2则在rd写入1,否则写入0。funct7=0000000, funct3=011。SLTU rd,x0,rs2即检测rs2是否为非零值,非零则rd=1(伪指令SNEZ)。

SLTU 指令解析与执行动画

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

rd
rs1
rs2
sltu
,
,
执行环境

本例使用固定寄存器初值和初始 PC=0x2000;取指成功,没有异步中断或额外扩展检查。异常分支只显示普通提交停止,陷入后的 PC 和处理程序状态由 EEI 决定。

tp(x4)
0x00000004
s1(x9)
0x00000009
31..25
24..20
19..15
14..12
11..7
6..0
0000000
funct7
01001
rs2
00100
rs1
011
funct3
00101
rd
0110011
opcode
执行数据路径
instruction
0x009232B3
opcode
0110011 -> OP
funct3
011 -> SLTU
funct7
0000000 -> base ALU op
rd / rs1 / rs2
t0(x5) / tp(x4) / s1(x9)
ALU
尚未计算
x5
t0(x5) = 0x00003001; pc = 0x00002000
当前步骤

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

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

encoding: 0x009232B3
syntax : sltu t0(x5), tp(x4), s1(x9)
待提交结果: 尚未计算
当前架构状态
t0(x5) = 0x00003001; pc = 0x00002000

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

快速理解与检索要点

SLTU 执行无符号比较 rs1 < rs2;条件为真时 rd=1,否则 rd=0。它适合把比较结果转成可继续参与运算或分支的整数值。

寄存器版本比较 rs1 与 rs2。
有符号和无符号比较只改变解释位模式的方式,不改变寄存器宽度。

常见使用场景

比较与判断

结合 «sltu x5, x6, x7 # x5 = (x6 < x7) ? 1 : 0 (unsigned)» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 寄存器选择 x0–x31;重叠操作数读取写回前的值。
  • 该 R-type 形式没有立即数;SRA 只使用 rs2 的有效低位。
语义检查
  • 比较的有符号/无符号解释与算术右移的符号填充须符合本指令定义。
  • rd=x0 为 HINT,不改变通用寄存器;SRAI 的 x0,x0,7 为 semihosting 退出标记。

容易混淆 / 常见误区

有符号比较请使用SLT
x0作为rs1时等价于检测rs2是否非零
rd=x0 时 SLTU 是供自定义用途的 HINT,不改变通用寄存器;PC 正常前进。

常见问题

SLTU 写入什么结果?

比较成立时写入 1,否则写入 0。

SLT 和 SLTU 有什么区别?

SLT/SLTI 按有符号整数比较;SLTU/SLTIU 按无符号整数比较。