02.RISC-V速查表

1. 算术运算指令

指令 格式 功能 示例
add add rd, rs1, rs2 加法(rd = rs1 + rs2) add t0, t1, t2
sub sub rd, rs1, rs2 减法(rd = rs1 - rs2) sub t0, t1, t2
addi addi rd, rs1, imm 加立即数(rd = rs1 + imm) addi t0, t1, 10
mul mul rd, rs1, rs2 乘法(rd = rs1 * rs2) mul t0, t1, t2
div div rd, rs1, rs2 除法(rd = rs1 / rs2) div t0, t1, t2
rem rem rd, rs1, rs2 取余(rd = rs1 % rs2) rem t0, t1, t2

2. 逻辑运算指令

指令 格式 功能 示例
and and rd, rs1, rs2 按位与 and t0, t1, t2
or or rd, rs1, rs2 按位或 or t0, t1, t2
xor xor rd, rs1, rs2 按位异或 xor t0, t1, t2
andi andi rd, rs1, imm 与立即数 andi t0, t1, 0xFF
ori ori rd, rs1, imm 或立即数 ori t0, t1, 0x0F
xori xori rd, rs1, imm 异或立即数 xori t0, t1, 0x55

3. 移位指令

指令 格式 功能 示例
sll sll rd, rs1, rs2 逻辑左移 sll t0, t1, t2
srl srl rd, rs1, rs2 逻辑右移 srl t0, t1, t2
sra sra rd, rs1, rs2 算术右移(保留符号位) sra t0, t1, t2
slli slli rd, rs1, imm 立即数逻辑左移 slli t0, t1, 3
srli srli rd, rs1, imm 立即数逻辑右移 srli t0, t1, 2
srai srai rd, rs1, imm 立即数算术右移 srai t0, t1, 4

4. 内存访问指令(Load/Store)

指令 格式 功能 示例
lw lw rd, offset(rs1) 从内存加载字(32位) lw t0, 4(sp)
lh lh rd, offset(rs1) 加载半字(16位,符号扩展) lh t0, 2(s0)
lb lb rd, offset(rs1) 加载字节(8位,符号扩展) lb t0, 1(a0)
sw sw rs2, offset(rs1) 存储字(32位) sw t0, 8(sp)
sh sh rs2, offset(rs1) 存储半字(16位) sh t0, 2(s1)
sb sb rs2, offset(rs1) 存储字节(8位) sb t0, 3(a1)

5. 分支与跳转指令

指令 格式 功能 示例
beq beq rs1, rs2, label 相等时跳转 beq t0, t1, loop
bne bne rs1, rs2, label 不等时跳转 bne t0, t1, exit
blt blt rs1, rs2, label 小于时跳转 blt t0, t1, loop
bge bge rs1, rs2, label 大于等于时跳转 bge t0, t1, exit
jal jal rd, label 跳转并链接(用于函数调用) jal ra, factorial
jalr jalr rd, offset(rs1) 间接跳转(用于返回) jalr ra, 0(ra)

6. 系统调用与环境指令

指令 格式 功能 示例
ecall ecall 触发系统调用 ecall
ebreak ebreak 触发调试断点 ebreak
fence fence 内存屏障(保证指令顺序) fence

7. 伪指令(Pseudo-instructions)

指令 实际指令 功能 示例
mv addi rd, rs, 0 寄存器复制 mv t0, t1
li addi rd, x0, imm 加载立即数 li t0, 42
nop addi x0, x0, 0 空操作 nop
ret jalr x0, 0(ra) 函数返回 ret
j jal x0, label 无条件跳转 j loop

image-20250512224411169