前面提到过RV32I,这是什么含义呢?
我们看看RISC-V的命名规范,是如何定义的,就明白了。
RISC-V命名规范:RV[###][abc……xyz]
因此,RV32I,表示RISC-V的32位整数指令集,它是RISC-V 的核心,是冻结的,永远不会改变。
也就是说,RISC-V的所有指令集合名称,全部是以RV打头,加位宽,加模块名来组成的,后续识别也就很简单了。
RISC-V指令集,是以一个基础整数指令集,为核心模块,根据需要再选择多个扩展指令集,组合而成的。
用一个公式简单表达,即:
RISC-V指令集 = 1个基础整数指令集 + 多个可选的扩展指令集
在RISC-V指令集架构中,G表示通用组合,全称为RV32G(32位)或RV64G(64位)。这个通用组合由一系列指令子集模块组成,其中包括I、M、A、D、F等模块。这些模块组合在一起,形成一个完整的指令集。
因此,G是RISC-V指令集架构中通用处理器所包含的指令集的表示。
也就是说,用公式表示,即:
G = I + M + A + D + F
I表示基础整数指令集;M/A/D/F表示具体扩展指令集,含义见后续。
基础指令集是固定的,永远不会改变。扩展指令集类似一种插件的思想。
RISC-V协议规定的,基础整数指令集,一共有4种,如下所示:

高字长的基础整数指令集向下兼容。
其中嵌入式指令集(Embedded)是基础整数指令集的子集,在一些小型的嵌入式场景中适用。
设计时,只需要从4种指令集中,任选一种即可。
目前RV128I,需要根据实际使用来改进设计规范,因此尚未冻结。
RISC-V 允许在实现中以可选的形式实现,其他标准化和非标准化的指令集扩展。
RISC-V协议规定的,扩展指令集,就比较多了,如下所示:

特定组合“IMAFD”被称为 “通用(General)”组合,用英文字母 G 表示,比如:
它们与RV32I统称为RV32G,或者与RV64I统称为RV64G。
RV32G,表示32位RISC-V通用处理器,指令集组合。
RV64G,表示64位RISC-V通用处理器,指令集组合。
在RISC-V中,指令是通过如下图方式,表述的:

图中,从左到右连接带下划线的字母,即可描述若干条指令。
例如,上图表示slt、slti、sltu、sltiu 这4 条RV32I 指令。
RISC-V 只有6 种指令格式,每条指令都是32 位。
这6 种指令格式定义,如下图所示:

RISC-V的所有指令,全部都是基于这6种格式来建立的。
为帮助程序员,所有位全为0 的指令,是一条非法的指令。因此,错误地易于编程/编译/链接跳转到被清零的内存区域将立即触发自陷,从而帮助调试。
类似地,所有位全为1 的指令,也是非法指令,这能在发生其他常见错误时触发自陷,如访问未编程的非易失性内存设备、断开连接的内存总线或损坏的内存芯片。
更多【risc-v-RISC-V指令格式】相关视频教程:www.yxfzedu.com