C.J

RISC-V C.J 指令详解

指令手册C-type

无条件跳转(±2KiB)。CJ格式。

指令语法

c.j offset
操作数说明
压缩指令仅 16 位,寄存器选择通常限制在 x8–x15。
立即数字段较窄,查看特定压缩指令的完整编码。
C压缩指令

指令行为说明

C.J (CJ格式)执行无条件跳转,偏移量符号扩展后加到pc,范围±2KiB。展开为jal x0,offset。

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

此可交互模型只展示架构可见的解码、操作数、状态更新;不表示流水线、缓存或时序。

c.j
执行环境
编码字段
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
执行数据路径
解码
CJ: permuted offset
操作数
PC = 0x00001000
执行
PC + 32 = 0x00001020
状态
PC <- 0x00001020

无条件更新 PC,不写链接寄存器。

架构可见结果

等待状态更新:上方高亮显示当前步骤的字段和计算,尚未提交架构可见结果。

快速理解与检索要点

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

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

常见使用场景

分支与跳转

结合 «c.j 128 # jump to pc+128» 等实际代码理解该场景。

循环与迭代

结合 «c.j 128 # jump to pc+128» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认压缩指令 16 位编码只在支持 C 扩展的 CPU 上可用。
  • 确认 rd/rs1'/rs2' 字段映射到 x8–x15。
语义检查
  • 注意压缩指令的操作数空间有限。
  • 确认这条压缩指令有对应的 32 位展开形式。

容易混淆 / 常见误区

跳转范围仅±2KiB(32位JAL为±1MiB)
不保存返回地址
偏移为 0 仍是合法编码;它把 PC 更新为当前指令地址

常见问题

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

不会;它对应 jal x0, offset。