RISC-V指令格式
RISC-V指令格式
- 1 RISC-V指令集命名规范
- 2 RISC-V指令集组成
- 2.1 基础整数指令集
- 2.2 扩展指令集
- 3 RISC-V指令格式
- 3.1 指令表述
- 3.2 指令格式
本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。
1 RISC-V指令集命名规范
前面提到过RV32I,这是什么含义呢?
我们看看RISC-V的命名规范,是如何定义的,就明白了。
RISC-V命名规范:RV[###][abc……xyz]
- RV:用于标识 RISC-V 体系架构的前缀,即 RISC-V 的缩写。
- [###]:用于标识处理器的字宽,也就是 处理器的寄存器宽度(单位为 bit),通常可以为32、64、128。
- [abc…xyz]:标识该处理器支持的,指令集模块集合。
因此,RV32I,表示RISC-V的32位整数指令集,它是RISC-V 的核心,是冻结的,永远不会改变。
也就是说,RISC-V的所有指令集合名称,全部是以RV打头,加位宽,加模块名来组成的,后续识别也就很简单了。
2 RISC-V指令集组成
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表示具体扩展指令集,含义见后续。
2.1 基础整数指令集
基础指令集是固定的,永远不会改变。扩展指令集类似一种插件的思想。
RISC-V协议规定的,基础整数指令集,一共有4种,如下所示:
高字长的基础整数指令集向下兼容。
其中嵌入式指令集(Embedded)是基础整数指令集的子集,在一些小型的嵌入式场景中适用。
设计时,只需要从4种指令集中,任选一种即可。
目前RV128I,需要根据实际使用来改进设计规范,因此尚未冻结。
2.2 扩展指令集
RISC-V 允许在实现中以可选的形式实现,其他标准化和非标准化的指令集扩展。
RISC-V协议规定的,扩展指令集,就比较多了,如下所示:
- M:乘法和除法指令(RV32M,RV64M)
- A:原子指令(RV32A,RV64A)
- F:单精度浮点指令(RV32F,RV64F)
- D:双精度浮点指令(RV32D,RV64D)
特定组合“IMAFD”被称为 “通用(General)”组合,用英文字母 G 表示,比如:
它们与RV32I统称为RV32G,或者与RV64I统称为RV64G。
RV32G,表示32位RISC-V通用处理器,指令集组合。
RV64G,表示64位RISC-V通用处理器,指令集组合。
3 RISC-V指令格式
3.1 指令表述
在RISC-V中,指令是通过如下图方式,表述的:
图中,从左到右连接带下划线的字母,即可描述若干条指令。
- 大括号{ } 内列举了每组指令的所有变体。
- 这些变体通过带下划线的字母,和不表示任何字母的下划线_ 区分。
例如,上图表示slt、slti、sltu、sltiu 这4 条RV32I 指令。
3.2 指令格式
RISC-V 只有6 种指令格式,每条指令都是32 位。
- R 型指令,用于寄存器间操作
- I 型指令,用于短立即数和取数(load)操作
- S 型指令,用于存数(store)操作
- B 型指令,用于条件分支跳转
- U 型指令,用于长立即数
- J 型指令,用于无条件跳转
这6 种指令格式定义,如下图所示:
- opcode,表示操作码,固定占用[6:0]。
- rd (Destination Register),表示目的寄存器,固定占用[11:7](若存在)。
- funct3,表示操作字段,固定占用[14:12](若存在)。
- funct7,表示操作字段,固定占用[31:25](若存在)。
- rs1 (Source Register #1),表示第一个源操作数寄存器,固定占用[19:15](若存在)。
- rs2 (Source Register #2),表示第二个源操作数寄存器,固定占用[24:20](若存在)。
- imm,表示立即数,位域位置不固定,不同类型指令有不同定义。
RISC-V的所有指令,全部都是基于这6种格式来建立的。
为帮助程序员,所有位全为0 的指令,是一条非法的指令。因此,错误地易于编程/编译/链接跳转到被清零的内存区域将立即触发自陷,从而帮助调试。
类似地,所有位全为1 的指令,也是非法指令,这能在发生其他常见错误时触发自陷,如访问未编程的非易失性内存设备、断开连接的内存总线或损坏的内存芯片。
相关文章:

RISC-V指令格式
RISC-V指令格式 1 RISC-V指令集命名规范2 RISC-V指令集组成2.1 基础整数指令集2.2 扩展指令集 3 RISC-V指令格式3.1 指令表述3.2 指令格式 本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。 1 RISC-V指令集命名规范 前面提到过RV32I,这是…...

Linux 文件比较工具
在Linux系统中,文件比较是一种常见的任务,用于比较两个文件之间的差异。文件比较可以帮助我们找出两个文件的不同之处,或者确定它们是否完全相同。在Linux中,有多种方法可以进行文件比较。 1. diff 在Linux中,diff命…...
【GAMES101】Lecture 17 材质
目录 材质 漫反射 镜面反射 折射-Snell’s Law Fresnel Reflection / Term(菲涅耳项) 微表面模型 各向同性与各向异性 BRDF的性质 测量BRDF 材质 渲染方程中的BRDF描述了物体是如何与光线作用的,而物体的材质决定了它看起来是怎么样…...

数模.matlab画图
一、mesh函数 上图是平常用到的方式 例题: 上图的meshgrid函数相当于上上图的前三个指令(temp,x,y) mash函数: mashc函数: mashz函数: 上图subplot函数的作用是将下标为index的图片放到对应的x&…...

[word] word表格表头怎么取消重复出现? #媒体#笔记#职场发展
word表格表头怎么取消重复出现? word表格表头怎么取消重复出现?在Word中的表格如果过长的话,会跨行显示在另一页,如果想要在其它页面上也显示表头,更直观的查看数据。难道要一个个复制表头吗?当然不是&…...

vue项目开发vscode配置
配置代码片段 步骤如下: 文件->首选项->配置用户代码片段新增全局代码片段起全局代码片段文件名“xxx.code-snippets” 这里以配置vue2初始代码片段为例,配置具体代码片段 {"name": "vue-sph","version": "…...

BUUCTF-Real-[Tomcat]CVE-2017-12615
目录 漏洞描述 一、漏洞编号:CVE-2017-12615 二、漏洞复现 get flag 漏洞描述 CVE-2017-12615:远程代码执行漏洞 影响范围:Apache Tomcat 7.0.0 - 7.0.79 (windows环境) 当 Tomcat 运行在 Windows 操作系统时,且启用了 HTTP P…...
Qt应用软件【协议篇】http协议get、post示例
文章目录 QT Http的APIHTTP GET 请求示例HTTP POST 请求示例伪装chrome浏览器get请求QT Http的API QNetworkAccessManager 作用:管理所有的网络请求,是发送请求和接收响应的中心点。主要功能: 发送HTTP请求(GET, POST, PUT, DELETE等)。处理网络请求的异步回调。管理网络…...
如何选择Centos的替代者
开篇废话:许久许久没有更新博客了。寒假回到故土,大雪虽然没有封路,还是增加了不出门的决心,虽然年岁已高,但是不学习还是不踏实,那就借着写作再继续前行。 背景:信息化部门,掌管着…...

【Java数据结构】ArrayList和LinkedList的遍历
一:ArrayList的遍历 import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** ArrayList的遍历*/ public class Test {public static void main(String[] args) {List<Integer> list new ArrayList<>();list.add(5);list…...

springboot163美食推荐商城的设计与实现
简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计,课程设计参考与学习用途。仅供学习参考, 不得用于商业或者非法用途,否则,一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

[机器学习]K-means——聚类算法
一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成(n_samples:样本点,centers&…...

并发编程 java锁机制
1、什么是锁,为什么需要锁? 并发环境下,会存在多个线程对同一个资源进行争抢的情况,假设线程A对资源正在进行修改,此时线程B又对同一资源进行了修改,就会导致数据不一致的问题。为了解决这个问题ÿ…...

Onerugged三防平板厂家丨三年质保承诺丨三防平板PAD
行业领先产品——Onerugged三防平板。凭借着十年的经验,我们深知终端设备在各个行业中的重要性,因此致力于为用户提供高可靠性的解决方案。 Onerugged三防平板以其卓越的性能和全方位的保护功能,在市场上脱颖而出。首先,它拥有IP…...

Android 系统启动流程
一.Android系统启动流程基本框架 Android系统完整的启动过程,从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤,下面就从具体的细节来解读 And…...
鸿蒙学习-app.json5配置文件
官网文档参考:https://developer.harmonyos.com/cn/docs/documentation/doc-guides-V3/app-configuration-file-0000001427584584-V3 位于AppScope下的app.json5配置文件 一、基础属性 {"app": {/*包名*/"bundleName": "com.example.dem…...

华为OD机试 - 智能成绩表( Python C C++ JavaGo JS PHP)
题目描述 小明是一名新老师,他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧! 输入描述 第一行包含两个整数 n 和 m,分别代表学生人数和科目数量。 0 < n < 1000 < m &…...

训练集,验证集,测试集比例
三者的区别 训练集(train set) —— 用于模型拟合的数据样本。验证集(validation set)—— 是模型训练过程中单独留出的样本集,它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时…...
Altium Designer(AD)加载常用元器件库到工程图文教程及视频演示
🏡《专栏目录》 目录 视频演示1,概述2,加载方法3,总结视频演示 Altium Designer(AD)加载常用元器件库到工程 欢迎点击浏览更多高清视频演示 1,概述...

Java学习笔记2024/2/8
面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 ,所以我们也常常说万物皆对…...
【杂谈】-递归进化:人工智能的自我改进与监管挑战
递归进化:人工智能的自我改进与监管挑战 文章目录 递归进化:人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管?3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

python/java环境配置
环境变量放一起 python: 1.首先下载Python Python下载地址:Download Python | Python.org downloads ---windows -- 64 2.安装Python 下面两个,然后自定义,全选 可以把前4个选上 3.环境配置 1)搜高级系统设置 2…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...

华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

初探Service服务发现机制
1.Service简介 Service是将运行在一组Pod上的应用程序发布为网络服务的抽象方法。 主要功能:服务发现和负载均衡。 Service类型的包括ClusterIP类型、NodePort类型、LoadBalancer类型、ExternalName类型 2.Endpoints简介 Endpoints是一种Kubernetes资源…...

vulnyx Blogger writeup
信息收集 arp-scan nmap 获取userFlag 上web看看 一个默认的页面,gobuster扫一下目录 可以看到扫出的目录中得到了一个有价值的目录/wordpress,说明目标所使用的cms是wordpress,访问http://192.168.43.213/wordpress/然后查看源码能看到 这…...

第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10+pip3.10)
第一篇:Liunx环境下搭建PaddlePaddle 3.0基础环境(Liunx Centos8.5安装Python3.10pip3.10) 一:前言二:安装编译依赖二:安装Python3.10三:安装PIP3.10四:安装Paddlepaddle基础框架4.1…...

麒麟系统使用-进行.NET开发
文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的,如果需要进行.NET开发,则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET,所以要进…...