C.J

RISC-V C.J 指令详解

指令手册C-type

16 位 CJ 无条件跳转:PC 加符号扩展的偶数字节偏移,不保存返回地址。

指令语法

c.j offset
操作数说明
C.J 使用 16 位 CJ 格式,没有显式寄存器操作数;对应 jal x0, offset。
offset 是相对当前指令 PC 的偶数字节偏移,范围 -2048 到 2046;零偏移合法。
符号扩展偏移后加到 PC,不写链接寄存器。
C压缩指令

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

指令行为说明

C.J 使用 16 位 CJ 格式,无条件跳到当前指令 PC 加符号扩展偏移形成的地址。字节偏移是 -2048 到 2046 的偶数,零偏移合法;对应 jal x0, offset,不保存返回地址。

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

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

c.j
执行环境

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

c.j → PC ← 0x00001020; 不写链接寄存器

16 位编码字段

0xA005

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

尚未提交架构结果。

快速理解与检索要点

C.J 使用 CJ 格式,以符号扩展的 2 字节倍数偏移无条件更新 PC,不写链接寄存器。

偏移范围为 -2048 到 2046 字节。
C.J 的零偏移是合法编码,不是保留编码。

常见使用场景

分支与跳转

结合 «c.j 128 # PC=0x1000 -> PC=0x1080; no link write» 等实际代码理解该场景。

循环与迭代

结合 «c.j 128 # PC=0x1000 -> PC=0x1080; no link write» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认 RV32C / RV64C 与 16 位指令编码条件。
  • C.J 使用 16 位 CJ 格式,没有显式寄存器操作数;对应 jal x0, offset。
语义检查
  • offset 是相对当前指令 PC 的偶数字节偏移,范围 -2048 到 2046;零偏移合法。
  • 符号扩展偏移后加到 PC,不写链接寄存器。

容易混淆 / 常见误区

字节偏移只能为 -2048 到 2046 的偶数;bit 0 隐含为 0。
不保存返回地址
偏移为 0 仍是合法编码;它把 PC 更新为当前指令地址

常见问题

C.J 会保存返回地址吗?

不会;它对应 jal x0, offset。