RISC-V指令集体系结构-RV32I指令集概览
本文概览RV32I指令集中指令的用途。
从RISC-V指令集体系结构-指令集已经了解到RV32I是RISC-V中最基础的指令集,本将概要介绍RV32I的指令。为之后阅读和编写汇编程序做准备。
RV32I指令 链接到标题
RV32I指令分4类,共计47条指令,分别如下:
整数运算指令 链接到标题
总计21条 add/addi 算术加法 sub 算术减法 and/andi 逻辑与 or/ori 逻辑或 xor/xori 逻辑异或 sll/slli 逻辑左移 sra/srai 算术右移 srl/srli 逻辑右移 lui 加载立即数高20bit到寄存器,低12位清0 auipc 将立即数的高20bit和pc相加的结果放入寄存器 slt/sltu/slti/sltiu 小于则置位
速记方式如下:

访存指令 链接到标题
总计8条 lb/lh/lw 将内存内容读取到寄存器 sb/sh/sw 将寄存器内容写到内存 lbu/lhu 将内存内容读取到寄存器,进行无符号扩展
速记方式如下:

条件分支指令 链接到标题
总计8条: beq 相等跳转 bne 不等跳转 bge/bgeu 大于或者等于跳转 blt/bltu 小于跳转 jal/jalr 跳转并将返回的指令地址放到ra或者寄存器
速记方式如下:

其它指令 链接到标题
总计10条 fence 内存访问屏障 fence.i 指令访问屏障 ebreak 转移到调试环境 ecall 向运行环境发出请求(系统调用) csrrc/csrrci 读状态寄存器并清位 csrrs/csrrsi 读状态寄存器并置位 csrrw/csrrwi 读状态寄存器并写入值
速记方式如下:

后记 链接到标题
最为精简指令系统的指令集,RV32I的指令真的非常精简,移除了所有冗余的指令,例如:RV32I中没有非指令,是因为取反可以用异或来实现(异或1可以达到取反的目的). 虽然指令只有很少47条,但也无需花精力去被下来,通过速记方式理解指令功能。具体用法可以在实践中熟悉,看看示例代码,然后使用时再查spec或者示例。
参考 链接到标题
http://crva.io/documents/RISC-V-Reader-Chinese-v2p1.pdf https://github.com/riscv/riscv-isa-manual/releases