首页/指令库/CZERO-NEZ
CZERO.NEZ

RISC-V CZERO.NEZ 指令详解

指令手册R-type

条件置零:若rs2非零则rd=0,否则rd=rs1

指令语法

czero.nez rd, rs1, rs2
操作数说明
rd、rs1、rs2:整数寄存器 x0–x31;x0 读取为零,写入丢弃。
rs1 提供数据值,rs2 只提供零/非零条件;没有立即数。
RV32/RV64 Zicond;rs2 不等于零时 rd=0,否则 rd=rs1,不执行分支。
rd 对两个源都有语法依赖;重叠操作数使用写回前的值。
Zicond条件操作

指令行为说明

czero.nez 是 Zicond 条件置零指令。若 rs2 不等于 0,rd 写 0;否则 rd 写 rs1。

CZERO.NEZ 指令解析与执行动画

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

rd
rs1
rs2
czero.nez
,
,
执行环境

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

t1(x6)
0x00000014
t2(x7)
0x00000007
31..25
24..20
19..15
14..12
11..7
6..0
0000111
funct7
00111
rs2
00110
rs1
111
funct3
00101
rd
0110011
opcode
执行数据路径
instruction
0x0E7372B3
opcode
0110011 -> OP
funct3
111 -> CZERO.NEZ
funct7
0000111 -> Zicond conditional-zero selector
rd / value rs1 / condition rs2
t0(x5) / t1(x6)=0x00000014 / t2(x7)=0x00000007
conditional zero
尚未计算
x5
t0(x5) = 0x00003001; pc = 0x00002000
当前步骤

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

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

encoding: 0x0E7372B3
syntax : czero.nez t0(x5), t1(x6), t2(x7)
结果: 尚未计算
当前架构状态
t0(x5) = 0x00003001; pc = 0x00002000

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

快速理解与检索要点

czero.nez 是 Zicond 条件置零指令。若 rs2 不等于 0,rd 写 0;否则 rd 写 rs1。

Zicond 在 RV32 和 RV64 上均提供此 R-type 指令;rs1 是数据值,rs2 是零/非零条件。
可用于构造无分支条件选择序列,但架构语义本身只是条件写 0。
rd 对 rs1 和 rs2 都有语法依赖,官方手册专门定义了这些依赖关系。

常见使用场景

构造无分支条件选择序列

结合 «czero.nez x10, x11, x12 ; x10 = (x12 != 0) ? 0 : x11» 等实际代码理解该场景。

使用前检查清单

语法检查
  • rd、rs1、rs2:整数寄存器 x0–x31;x0 读取为零,写入丢弃。
  • rs1 提供数据值,rs2 只提供零/非零条件;没有立即数。
语义检查
  • RV32/RV64 Zicond;rs2 不等于零时 rd=0,否则 rd=rs1,不执行分支。
  • rd 对两个源都有语法依赖;重叠操作数使用写回前的值。

容易混淆 / 常见误区

它只选择 0 或 rs1,不执行分支,也没有显式数据内存访问。
条件只测试 rs2 是否为零,不比较 rs1 与 rs2。

常见问题

czero.nez 是条件跳转吗?

不是。它按顺序继续执行,只根据 rs2 是否为零选择写 0 或 rs1。

czero.nez 会比较两个寄存器大小吗?

不会。条件只看 rs2 是否为零。