C.BNEZ

RISC-V C.BNEZ 指令详解

指令手册C-type

当 x[rs1'] 不等于零时跳到 PC+offset;否则到 PC+2。16 位 CB 格式。

指令语法

c.bnez rs1', offset
操作数说明
16 位 CB 格式;3 位 rs1' 选择 x8-x15,另一个比较操作数固定为 x0。
offset 是 -256 到 254 的偶数字节偏移,符号扩展后加到当前指令 PC;零偏移合法。
C.BNEZ 在寄存器非零时分支,否则 PC+2;没有 rd,不写链接寄存器。
C压缩指令

扩展条件:RV32C / RV64C;本页按 C 扩展版本 2.0 说明。

指令行为说明

C.BNEZ 使用 16 位 CB 格式,rs1' 的 3 位字段选择 x8-x15。若寄存器值不等于零,目标为当前指令 PC 加符号扩展的字节偏移;否则顺序执行到 PC+2。偏移是 -256 到 254 的偶数,可为零;对应 bne rs1', x0, offset,不写链接寄存器。

C.BNEZ 指令解析与执行动画

三个学习步骤展示架构规则;不表示处理器流水线或周期。

c.bnez,
执行环境

RV32C / RV64C;C 扩展下 IALIGN=16,PC 为偶数字节地址。地址计算按 XLEN 回绕。 目标后续取指异常不在本模型中展示。

c.bnez → 条件不成立;PC ← 0x00001002; 不写链接寄存器

16 位编码字段

0xE005

15..13
funct3
111
12
offset[8]
0
11..10
offset[4:3]
00
9..7
rs1'
000
6..5
offset[7:6]
00
4..3
offset[2:1]
00
2
offset[5]
1
1..0
op
01
操作数与计算
恢复压缩操作数
rs1'=000 → x8; rs2=x0=0; offset[8]=0; offset[4:3]=00; offset[7:6]=00; offset[2:1]=00; offset[5]=1; imm=000100000; sext(000100000) = 32 B; imm[0]=0;输入 offset 已是字节偏移,不再缩放。
计算
尚未计算
提交结果
待提交
架构可见结果

尚未提交架构结果。

快速理解与检索要点

C.BNEZ 使用 CB 格式;当受限 rs1' 非零时,PC 加符号扩展偏移。

rs1' 只能编码 x8-x15。
条件不成立时顺序执行到 pc+2。

常见使用场景

与零比较的条件分支

结合 «c.bnez x8, 32 # PC=0x1000: x8!=0 -> PC=0x1020; x8=0 -> PC=0x1002» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认 RV32C / RV64C 与 16 位指令编码条件。
  • 16 位 CB 格式;3 位 rs1' 选择 x8-x15,另一个比较操作数固定为 x0。
语义检查
  • offset 是 -256 到 254 的偶数字节偏移,符号扩展后加到当前指令 PC;零偏移合法。
  • C.BNEZ 在寄存器非零时分支,否则 PC+2;没有 rd,不写链接寄存器。

容易混淆 / 常见误区

源寄存器仅限x8-x15(CB格式)
比较的第二个操作数隐式为x0;该指令没有目标寄存器
字节偏移只能为 -256 到 254 的偶数,bit 0 隐含为 0;目标相对本条指令 PC。

常见问题

C.BNEZ 比较两个可编程寄存器吗?

不比较;第二个操作数固定为 x0。