链接地址
JAL 会把下一条指令地址(pc+4)写入 rd。使用 rd=x0 时不会保存返回地址,因此可作为无条件跳转。
RISC-V Unprivileged ISA, RV32I control transfer instructions以PC相对偏移跳转,并将返回地址(PC+4)写入rd
JAL 使用 opcode 1101111(0x6f)。21 位立即数编码跳转偏移(±1 MiB),rd 接收返回地址(pc+4)。
JAL指令采用J型格式(opcode=1101111),J型立即数编码以2字节为倍数的有符号偏移量,经符号扩展后与当前JAL指令地址相加得到跳转目标地址。跳转范围为±1MiB。JAL同时将返回地址(PC+4)存入寄存器rd。当rd=x0时即为无条件跳转(伪指令J),当rd=x1或x5时建议硬件使用返回地址栈(RAS)预测优化。若实现只支持4字节指令对齐,跳到非4字节对齐目标会引发指令地址未对齐异常;支持16位压缩指令对齐时该异常条件相应放宽。
JAL 是 PC 相对无条件跳转并链接:目标由 J-type 偏移加当前 PC 得到,同时把 pc+4 写入 rd;rd=x0 时只跳转不保存返回地址。
以下要点按 RISC-V Unprivileged ISA 手册核准,用于补充操作语义、立即数范围和边界行为。
JAL 会把下一条指令地址(pc+4)写入 rd。使用 rd=x0 时不会保存返回地址,因此可作为无条件跳转。
RISC-V Unprivileged ISA, RV32I control transfer instructionsJ-type 立即数表示 2 字节对齐的有符号 PC-relative 偏移,JAL 的目标范围约为当前 PC 的正负 1 MiB。
RISC-V Unprivileged ISA, RV32I control transfer instructions使用 jal ra, label 或 jalr ra, rs, imm。
结合 «jal x1, 0x100 # jump to pc+0x100, x1 = pc+4» 等实际代码理解该场景。
JAL 把下一条指令地址 pc+4 写入 rd。
目标是当前 PC 附近的直接偏移时用 JAL;目标来自寄存器或需要 AUIPC+JALR 序列时用 JALR。