C.JR

RISC-V C.JR 指令详解

指令手册C-type

通过寄存器跳转:目标为 rs1 且最低位清零。CR格式。rs1!=x0。

指令语法

c.jr rs1
操作数说明
C.JR 使用 16 位 CR 格式,完整 5 位 rs1 选择 x1-x31;rs1=x0 保留。
rs2 字段固定为 00000;对应 jalr x0, 0(rs1),没有显式立即数。
目标为 x[rs1] 清零 bit 0;不写链接寄存器。
C压缩指令

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

指令行为说明

C.JR (CR格式)按 jalr x0,0(rs1) 的语义跳转:目标由 rs1 得到并将最低位清零。仅rs1≠x0有效(rs1=x0保留);不保存返回地址。

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

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

c.jr
执行环境

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

c.jr → PC ← 0x00002000; 不写链接寄存器

16 位编码字段

0x8082

15..12
funct4
1000
11..7
rs1
00001
6..2
rs2
00000
1..0
op
10
操作数与计算
恢复压缩操作数
rs1=00001 → x1; rs2=00000; rd=x0; imm=0
计算
尚未计算
提交结果
待提交
架构可见结果

尚未提交架构结果。

快速理解与检索要点

C.JR 使用 CR 格式并等价于 jalr x0,0(rs1):目标最低位清零,且不写返回地址。

rs1 不能为 x0;该编码保留。
C.JR 使用完整的 5 位 rs1 字段,不限于 x8-x15。

常见使用场景

间接跳转与返回

结合 «c.jr ra # ra=x1=0x2001 -> PC=0x2000; no link write» 等实际代码理解该场景。

使用前检查清单

语法检查
  • 确认 RV32C / RV64C 与 16 位指令编码条件。
  • C.JR 使用 16 位 CR 格式,完整 5 位 rs1 选择 x1-x31;rs1=x0 保留。
语义检查
  • rs2 字段固定为 00000;对应 jalr x0, 0(rs1),没有显式立即数。
  • 目标为 x[rs1] 清零 bit 0;不写链接寄存器。

容易混淆 / 常见误区

rs1=x0 的编码保留,不是 C.JR。
完整 5 位 rs1 选择 x1-x31;不限制到 x8-x15。
目标最低位清零;C 扩展下 IALIGN=16,不要求目标为 4 的倍数。

常见问题

C.JR 为什么清零目标最低位?

它采用 jalr x0,0(rs1) 的语义;JALR 在形成目标后清零最低位。