C.NOP

RISC-V C.NOP 指令详解

指令手册CI format

固定 16 位空操作。CI 格式;相邻的 rd=x0、imm≠0 编码是 HINT。

指令语法

c.nop
操作数说明
c.nop 无显式操作数。
CI 编码固定 rd=x0、imm=0、funct3=000、op=01,即 0x0001。
rd=x0 且 imm≠0 的相邻码点是 HINT;固定字段不表示读取寄存器。
CZca压缩指令

指令行为说明

普通 C.NOP 为固定 16 位 CI 编码 0x0001:funct3=000、rd=x0、imm=0、op=01,无显式操作数。它不改变用户可见状态,例外是推进 PC 两字节并递增适用性能计数器;展开为 nop(规范编码 addi x0, x0, 0)。同一编码空间 rd=x0、imm≠0 的码点是 HINT。C.NOP 可用于 RV32I/RV64I 加 C 或 Zca。

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

RV32I/RV64I + C(或 Zca);16 位,IALIGN=16。

c.nop

执行环境

假设取指成功、无异步中断及额外扩展检查;同名寄存器共用一份初值。

C.NOP: 没有寄存器或内存写入;仅推进 PC 并递增适用性能计数器。
PC ← 0x00002002
16-位编码0x0001
funct3 [15..13]
000
imm[5] [12]
0
rd=x0 [11..7]
00000
imm[4:0] [6..2]
00000
op [1..0]
01
rd=x0; imm[5]|imm[4:0]=000000 → 0; C.NOP

还原压缩操作数

还原完整寄存器字段或固定操作数;先区分普通编码、HINT 和保留编码。

寄存器和内存不变; PC=0x00002000
当前架构状态(提交前)

这是架构效果的教学步骤,不代表处理器流水线或周期。

快速理解与检索要点

固定 16 位空操作。CI 格式;相邻的 rd=x0、imm≠0 编码是 HINT。

0x0001 对应 funct3=000、imm[5]=0、rd=x0、imm[4:0]=00000、op=01。
HINT 不修改架构状态,例外是推进 PC 和适用性能计数器。

常见使用场景

16 位空操作

RV32I/RV64I + C/Zca,PC=0x2000:c.nop 成功后 PC=0x2002,寄存器和内存不变,适用性能计数器递增。

使用前检查清单

语法检查
  • RV32I/RV64I + C 或 Zca;16 位编码,IALIGN=16。
  • 普通 c.nop 无显式操作数;固定编码 0x0001,rd=x0、imm=0。
语义检查
  • 不写寄存器或内存;imm≠0 的相邻编码是 HINT。
  • 普通成功执行后 PC+2;C.NOP/HINT 仍推进 PC 和适用性能计数器。

容易混淆 / 常见误区

普通 c.nop 无显式立即数操作数;imm=0 是固定编码字段。
rd=x0、imm≠0 的相邻编码是 HINT。
空操作仍推进 PC,并递增适用性能计数器。

常见问题

C.NOP 会冻结 PC 吗?

不会。成功执行 16 位 C.NOP 后 PC 推进两字节;寄存器和内存不变,适用性能计数器仍按架构规则递增。