指令格式

RISC-V 指令格式在线查询:R/I/S/B/U/J 编码布局

本页是 RISC-V 指令格式在线查询页面,按 R/I/S/U 基础格式及 B/J 立即数变体展示 32 位指令中的 opcode、rd、rs1、rs2、funct3、funct7 和立即数字段布局。你可以用它快速判断一条指令属于哪种格式、机器码字段如何分配,以及相关指令如何编码。

R-type

R-type:寄存器运算

两个源寄存器和一个目的寄存器。opcode 给出大类,funct3 与 funct7 继续区分具体操作。

funct7
31..25
rs2
24..20
rs1
19..15
funct3
14..12
rd
11..7
opcode
6..0
310
I-type

I-type:12 位立即数 / Load / JALR / SYSTEM

包含 12 位立即数字段和 rs1/rd。立即数运算、加载、JALR、FENCE、CSR 和 SYSTEM 类指令使用此布局或其变体。

imm[11:0]
31..20
rs1
19..15
funct3
14..12
rd
11..7
opcode
6..0
310
S-type

S-type:Store

写入内存。立即数被拆成两段(高 7 位在 31:25,低 5 位在 11:7)。

imm[11:5]
31..25
rs2
24..20
rs1
19..15
funct3
14..12
imm[4:0]
11..7
opcode
6..0
310
示例:swshsbsd
B-type

B-type:条件分支

条件跳转格式。分支偏移以 2 字节为单位编码,立即数字段分散在指令字的多个位置。

imm[12|10:5]
31..25
rs2
24..20
rs1
19..15
funct3
14..12
imm[4:1|11]
11..7
opcode
6..0
310
U-type

U-type:高 20 位立即数

20 位立即数字段位于指令高位。LUI 和 AUIPC 使用此格式。

imm[31:12]
31..12
rd
11..7
opcode
6..0
310
示例:luiauipc
J-type

J-type:JAL 跳转

JAL 使用的跳转格式。跳转偏移以 2 字节为单位编码,立即数字段同样按规范重排。

imm[20|10:1|11|19:12]
31..12
rd
11..7
opcode
6..0
310
示例:jal

特殊编码

CSR 指令

CSR 指令属于 SYSTEM 主 opcode 下的 I-type 变体,csr 字段占用指令的 bits[31:20],funct3 区分读写/置位/清位形式。

系统指令

ECALL/EBREAK 等 SYSTEM 指令使用 I-type 风格的编码空间,但语义由 SYSTEM 类指令定义,不是普通立即数算术。

C 扩展(16 位)

C 扩展提供 16 位压缩编码,用于提升代码密度;压缩指令不是本页 R/I/S/U 基础格式和 B/J 立即数变体的一部分。

继续学习

看懂 B/J/S/U 的立即数字段拼接

格式页展示字段位置;立即数编码页进一步解释 sign extension、branch/jal offset 对齐,以及每个 immediate bit 如何映射到机器码。

打开立即数编码图解
官方规范来源

本页参考以下官方 RISC-V 文档组织架构、ABI、CSR 和伪指令说明;平台或操作系统 ABI 差异仍需按对应规范核验。