当前位置: 首页 > news >正文

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的遍历

一&#xff1a;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 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…...

[机器学习]K-means——聚类算法

一.K-means算法概念 二.代码实现 # 0. 引入依赖 import numpy as np import matplotlib.pyplot as plt # 画图依赖 from sklearn.datasets import make_blobs # 从sklearn中直接生成聚类数据# 1. 数据加载 # 生成&#xff08;n_samples&#xff1a;样本点&#xff0c;centers&…...

并发编程 java锁机制

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

Onerugged三防平板厂家丨三年质保承诺丨三防平板PAD

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

Android 系统启动流程

一.Android系统启动流程基本框架 Android系统完整的启动过程&#xff0c;从系统层次角度可分为 Linux 系统层、Android 系统服务层、Zygote进程模型三个阶段&#xff1b;从开机到启动 Home Launcher 完成具体的任务细节可分为七个步骤&#xff0c;下面就从具体的细节来解读 And…...

鸿蒙学习-app.json5配置文件

官网文档参考&#xff1a;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)

题目描述 小明是一名新老师&#xff0c;他需要将学生按考试总分或单科分数进行排名。学生的信息包括姓名、科目和对应的分数。帮助小明完成这个任务吧&#xff01; 输入描述 第一行包含两个整数 n 和 m&#xff0c;分别代表学生人数和科目数量。 0 < n < 1000 < m &…...

训练集,验证集,测试集比例

三者的区别 训练集&#xff08;train set&#xff09; —— 用于模型拟合的数据样本。验证集&#xff08;validation set&#xff09;—— 是模型训练过程中单独留出的样本集&#xff0c;它可以用于调整模型的超参数和用于对模型的能力进行初步评估。 通常用来在模型迭代训练时…...

Altium Designer(AD)加载常用元器件库到工程图文教程及视频演示

🏡《专栏目录》 目录 视频演示1,概述2,加载方法3,总结视频演示 Altium Designer(AD)加载常用元器件库到工程 欢迎点击浏览更多高清视频演示 1,概述...

Java学习笔记2024/2/8

面向对象 //面向对象介绍 //面向: 拿、找 //对象: 能干活的东西 //面向对象编程: 拿东西过来做对应的事情 //01-如何设计对象并使用 //1.类和对象 //2.类的几个不错注意事项 1. 类和对象 1.1 类和对象的理解 客观存在的事物皆为对象 &#xff0c;所以我们也常常说万物皆对…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06&#xff08;十亿美元&#xff09;。漏洞扫描服务市场行业预计将从 2024 年的 3.48&#xff08;十亿美元&#xff09;增长到 2032 年的 9.54&#xff08;十亿美元&#xff09;。预测期内漏洞扫描服务市场 CAGR&#xff08;增长率&…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术&#xff0c;它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton)&#xff1a;由层级结构的骨头组成&#xff0c;类似于人体骨骼蒙皮 (Mesh Skinning)&#xff1a;将模型网格顶点绑定到骨骼上&#xff0c;使骨骼移动…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

为什么要创建 Vue 实例

核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

MySQL:分区的基本使用

目录 一、什么是分区二、有什么作用三、分类四、创建分区五、删除分区 一、什么是分区 MySQL 分区&#xff08;Partitioning&#xff09;是一种将单张表的数据逻辑上拆分成多个物理部分的技术。这些物理部分&#xff08;分区&#xff09;可以独立存储、管理和优化&#xff0c;…...

在golang中如何将已安装的依赖降级处理,比如:将 go-ansible/v2@v2.2.0 更换为 go-ansible/@v1.1.7

在 Go 项目中降级 go-ansible 从 v2.2.0 到 v1.1.7 具体步骤&#xff1a; 第一步&#xff1a; 修改 go.mod 文件 // 原 v2 版本声明 require github.com/apenella/go-ansible/v2 v2.2.0 替换为&#xff1a; // 改为 v…...

如何在Windows本机安装Python并确保与Python.NET兼容

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…...