跳转至

RISC-V 常用指令和伪指令系统分类总结

算术运算指令

  • 基本算术运算
指令 格式 功能描述
add add rd, rs1, rs2 寄存器加法 (rd = rs1 + rs2)
sub sub rd, rs1, rs2 寄存器减法 (rd = rs1 - rs2)
addi addi rd, rs1, imm 立即数加法 (rd = rs1 + sign-extended imm)
mul mul rd, rs1, rs2 有符号乘法 (RV32M/RV64M)
div div rd, rs1, rs2 有符号除法 (RV32M/RV64M)
  • 逻辑运算
指令 格式 功能描述
and and rd, rs1, rs2 按位与
or or rd, rs1, rs2 按位或
xor xor rd, rs1, rs2 按位异或
andi andi rd, rs1, imm 立即数按位与
ori ori rd, rs1, imm 立即数按位或
xori xori rd, rs1, imm 立即数按位异或
  • 移位运算
指令 格式 功能描述
sll sll rd, rs1, rs2 逻辑左移 (rd = rs1 << rs2[4:0])
srl srl rd, rs1, rs2 逻辑右移
sra sra rd, rs1, rs2 算术右移
slli slli rd, rs1, shamt 立即数逻辑左移
srli srli rd, rs1, shamt 立即数逻辑右移
srai srai rd, rs1, shamt 立即数算术右移

数据传输指令

  • 加载指令
指令 格式 功能描述
lb lb rd, offset(rs1) 加载字节 (符号扩展)
lh lh rd, offset(rs1) 加载半字 (符号扩展)
lw lw rd, offset(rs1) 加载字 (32位)
ld ld rd, offset(rs1) 加载双字 (RV64)
lbu lbu rd, offset(rs1) 加载无符号字节
lhu lhu rd, offset(rs1) 加载无符号半字
lwu lwu rd, offset(rs1) 加载无符号字 (RV64)
  • 存储指令
指令 格式 功能描述
sb sb rs2, offset(rs1) 存储字节
sh sh rs2, offset(rs1) 存储半字
sw sw rs2, offset(rs1) 存储字
sd sd rs2, offset(rs1) 存储双字 (RV64)

控制流指令

  • 无条件跳转
指令 格式 功能描述
jal jal rd, offset 跳转并链接 (rd = pc+4)
jalr jalr rd, offset(rs1) 间接跳转并链接
j j offset 直接跳转 (伪指令)
  • 条件分支
指令 格式 功能描述
beq beq rs1, rs2, offset 相等时分支
bne bne rs1, rs2, offset 不等时分支
blt blt rs1, rs2, offset 有符号小于时分支
bge bge rs1, rs2, offset 有符号大于等于时分支
bltu bltu rs1, rs2, offset 无符号小于时分支
bgeu bgeu rs1, rs2, offset 无符号大于等于时分支

伪指令

  • 常用伪指令
伪指令 实际指令 功能描述
nop addi x0, x0, 0 空操作
mv rd, rs addi rd, rs, 0 寄存器复制
not rd, rs xori rd, rs, -1 按位取反
neg rd, rs sub rd, x0, rs 取负值
j offset jal x0, offset 无条件跳转
ret jalr x0, 0(x1) 从子程序返回
call offset auipc x1, offset[31:12]
jalr x1, offset[11:0](x1)
调用远过程
tail offset auipc x0, offset[31:12]
jalr x0, offset[11:0](x0)
尾调用
  • 地址加载伪指令
伪指令 实际指令 功能描述
la rd, symbol auipc rd, symbol[31:12]
addi rd, rd, symbol[11:0]
加载绝对地址
li rd, imm 根据立即数大小选择不同指令序列 加载立即数

系统指令

  • CSR操作
指令 格式 功能描述
csrrw csrrw rd, csr, rs1 CSR读后写
csrrs csrrs rd, csr, rs1 CSR读后置位
csrrc csrrc rd, csr, rs1 CSR读后清除
csrr csrr rd, csr CSR读 (伪指令 = csrrs rd, csr, x0)
csrw csrw csr, rs1 CSR写 (伪指令 = csrrw x0, csr, rs1)
  • 特权指令
指令 格式 功能描述
ecall ecall 环境调用
ebreak ebreak 断点
wfi wfi 等待中断
mret mret 从机器模式异常返回
sret sret 从监管模式异常返回

原子操作指令 (A扩展)

指令 格式 功能描述
lr.w lr.w rd, (rs1) 加载保留 (32位)
sc.w sc.w rd, rs2, (rs1) 条件存储 (32位)
amoswap.w amoswap.w rd, rs2, (rs1) 原子交换 (32位)
amoadd.w amoadd.w rd, rs2, (rs1) 原子加 (32位)
amoand.w amoand.w rd, rs2, (rs1) 原子与 (32位)

浮点指令 (F/D扩展)

  • 基本浮点运算
指令 格式 功能描述
fadd.s fadd.s rd, rs1, rs2 单精度浮点加
fsub.s fsub.s rd, rs1, rs2 单精度浮点减
fmul.s fmul.s rd, rs1, rs2 单精度浮点乘
fdiv.s fdiv.s rd, rs1, rs2 单精度浮点除
fsqrt.s fsqrt.s rd, rs1 单精度平方根
  • 浮点转换
指令 格式 功能描述
fcvt.w.s fcvt.w.s rd, rs1 单精度转有符号字
fcvt.s.w fcvt.s.w rd, rs1 有符号字转单精度