把riscv32位系统弄懂1:riscv32 CPU指令学习

 Riscv手册

首先下载手册:文件下载----中国开放指令生态(RISC-V)联盟

从这个页面下载riscv-spec-v2.1中文版  

也可以下载中科大的这本:RISC-V手册

Riscv32指令集包括基础指令集和一些扩展指令集,比如在ESP32C3技术手册中,写到ESP32C3的ESP-RISC-V-CPU的介绍:ESP-RISC-V CPU 是基于RISC-VISA的32位内核,包括基本整数(I),乘法/除法(M)和压缩(C)标准扩展。

也就是ESP-RISC-V CPU这款CPU包含基本整数集I,乘法/除法集M和压缩标准扩展指令集C

汇编器向RISCV ISA中增加了60条伪指令,是的代码更易于读写,并且不增加硬件开销。

基本指令格式

在基本ISA中,有四种核心指令格式:R/I/S/U,所有的指令都是固定32位长度,并且在存储器中必须在四字节边界对齐。当发生一个条件分支或者无条件转移而且目标地址不是对齐到4字节时,将会产生一个指令地址不对齐的异常。

RISC-V四种指令格式

RISC-V有四种指令格式:R、I、S、U

R类指令:功能码与寄存器

I类指令:立即数操作

S类指令:存储与加载

U类指令:无条件跳转

按照高位到低位的顺序排列的RISC-V四种指令格式的介绍:

1. R型指令(寄存器类型)

  • 格式(高位到低位)‌:
    • funct7(7位):功能码的一部分,用于区分不同的寄存器操作。
    • rs2(5位):第二个源寄存器索引。
    • rs1(5位):第一个源寄存器索引。
    • funct3(3位):功能码的另一部分,与funct7共同确定具体操作。
    • rd(5位):目标寄存器索引。
    • opcode(7位):操作码,用于区分不同类型的指令。
  • 特点‌:所有操作数都是寄存器,没有立即数。这种指令格式适用于需要两个源寄存器和一个目标寄存器的操作,如加法、减法、逻辑运算等。
  • 示例‌:ADD rd, rs1, rs2(将rs1rs2的值相加,结果存储在rd中)。

2. I型指令(立即数类型)

  • 格式(高位到低位)‌:
    • imm(12位,但通常分为高5位和低7位两部分在指令中编码):立即数值,用于算术运算或加载操作的偏移量。
    • rs1(5位):源寄存器索引。
    • funct3(3位):功能码,用于区分不同的立即数操作。
    • rd(5位):目标寄存器索引。
    • opcode(7位):操作码。
  • 特点‌:有一个源寄存器、一个立即数和一个目标寄存器。这种指令格式适用于需要一个源寄存器、一个立即数和一个目标寄存器的操作,如算术运算、逻辑运算以及加载操作等。

  • 示例‌:ADDI rd, rs1, imm(将rs1的值与立即数imm相加,结果存储在rd中)。

3. S型指令(存储类型)

  • 格式(高位到低位)‌:
    • imm[11:5](7位):偏移量的高7位(立即数的一部分)。
    • rs2(5位):源寄存器索引,存储的数据来源。
    • rs1(5位):基地址寄存器索引,用于计算存储地址。
    • funct3(3位):功能码,用于区分不同的存储操作。
    • imm[4:0](5位):偏移量的低5位(与前面的7位组成12位偏移量)。
    • opcode(7位):操作码。
  • 特点‌:有两个源寄存器(一个作为基地址寄存器,另一个作为源数据寄存器)和一个立即数作为偏移量。这种指令格式用于将源寄存器的值存储到基地址寄存器加上偏移量所指定的内存地址中。

  • 示例‌:SW rs2, imm(rs1)(将rs2的值存储到rs1 + imm地址的内存位置)。

4. B型指令(分支类型)

  • 格式(高位到低位)‌:
    • imm[12|10:5](1位和6位,共7位,但编码时分散在指令中):偏移量的一部分,用于计算跳转地址。
    • rs2(5位):第二个源寄存器索引,通常用于条件比较。
    • rs1(5位):第一个源寄存器索引,通常与rs2一起用于条件比较。
    • funct3(3位):功能码,用于区分不同的分支操作。
    • imm[4:1|11](4位和1位,共5位,与前面的7位组成12位偏移量):偏移量的另一部分。
    • opcode(7位):操作码。
  • 特点‌:有两个源寄存器和一个立即数作为偏移量。这种指令格式用于根据两个源寄存器的值是否满足某个条件来决定是否跳转到当前指令地址加上偏移量所指定的目标地址。
  • 示例‌:BEQ rs1, rs2, imm(如果rs1等于rs2,则跳转到当前指令地址加上imm的目标地址)。

需要注意的是,B型指令的立即数(偏移量)编码比较特殊,它分散在指令的多个位置。这是为了优化指令的编码效率,使得分支指令能够尽可能紧凑地表示。

 

调试

RISCV伪指令学习

RISC-V伪指令简化的详细解释:

  1. RISC-V指令集的设计理念‌:

    • RISC-V的设计理念是简化指令集,通过减少指令的复杂度和数量,提高指令的执行效率。这种设计理念有助于实现高效的处理器设计,降低处理器的功耗,并提高处理器的性能‌1。
  2. 伪指令的作用‌:

    • 伪指令在汇编语言中通常用于表示那些不是处理器直接执行的指令,而是由汇编器在汇编过程中进行解释和转换的指令。它们可以简化程序的编写,使汇编代码更加易读和易于维护。
    • 在RISC-V中,伪指令被用来进一步简化指令集,通过提供更高层次的抽象,使得程序员可以使用更简洁的指令来完成复杂的操作。
  3. 伪指令的简化‌:

    • RISC-V的伪指令经过精心设计,以简化处理器的实现和指令的执行。这些伪指令在汇编过程中被转换成处理器能够直接执行的基本指令,从而减少了指令的数量和复杂度。
    • 通过简化伪指令,RISC-V指令集保持了其简洁性和清晰性,这有助于处理器的高效实现和指令的快速执行。
  4. 简化伪指令的好处‌:

    • 提高指令的执行效率:简化的伪指令可以减少处理器执行指令所需的时间和资源,从而提高指令的执行效率。
    • 降低处理器的功耗:简化的指令集有助于减少处理器的功耗,因为处理器在执行简化的指令时需要消耗更少的能量。
    • 促进处理器的创新和发展:RISC-V的开源性和简洁性吸引了大量的开发者和研究人员。通过简化伪指令,RISC-V为处理器的创新和发展提供了更多的可能性和空间。

综上所述,RISC-V伪指令的简化是为了进一步精简RISC-V指令集,提高指令的执行效率和处理器的性能。这种简化符合RISC-V的设计理念,即简化指令集以提高处理器的效率和性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

全国消费水平系统|Java|SSM|JSP|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、JSP、jquery,html 5⃣️数据库可…

达梦数据库-读写分离集群部署

读写分离集群部署 读写分离集群由一个主库以及一个或者多个(最多可以配置 8 个)实时备库组成,基于实时归档实现的高性能数据库集群,不但提供数据保护、容灾等数据守护基本功能,还具有读写操作自动分离、负载均衡等特性。同时可以配置确认监视…

【ALGC】探秘 ALGC—— 卓越数据处理能力的科技瑰宝

我的个人主页 我的领域:人工智能篇,希望能帮助到大家!!!👍点赞 收藏❤ 在大数据时代,如何高效地处理和分析海量数据是一个核心挑战。ALGC(Advanced Learning and Generalized Comp…

如何提高webpack的构建速度?

提高Webpack构建速度是优化Web开发流程的一个重要方面。以下是一些提升Webpack构建速度的方法: 1. 使用适当的mode选项 开发模式(development):默认情况下,Webpack以较慢的速度进行构建,以便于开发。如果…

docker仓库用户认证

保证实验环境纯净删除启动的docker 1.安装建立认证文件的工具包 [rootlocalhost ~]# yum install httpd-tools -y 2.创建目录存放认证文件 [rootlocalhost ~]# mkdir auth [rootlocalhost ~]# htpasswd -Bc auth/.htpasswd lee #-B 强制使用最安全加密方式,默认用m…

在 Windows 下生成 .tgz 文件的方法

方法 1:使用 7-Zip 7-Zip 是一个流行的免费压缩工具,支持生成 .tar.gz 格式。 步骤: 下载并安装 7-Zip。准备好要压缩的文件或文件夹。右键点击文件或文件夹,选择 7-Zip > 添加到压缩文件...。在弹出的对话框中:…

WPSJS:让 WPS 办公与 JavaScript 完美联动

随着办公自动化需求的日益增长,WPS Office 推出了 WPSJS,这是一款强大的开发者工具,允许开发者通过 JavaScript 脚本与 WPS 办公软件进行互动。无论是在表格中自动填充数据、在文档中修改格式,还是在演示文稿中插入动态内容&#…

(OCPP服务器)SteVe编译搭建全过程

注意:建议使用3.6.0,我升级到3.7.1,并没有多什么新功能,反而电表的实时数据只能看到累计电能了,我回退了就正常,数据库是兼容的,java版本换位java11,其他不变就好 背景:…

Git 的基本概念和使用

Git是一个分布式版本控制系统,它可以帮助开发人员追踪和管理代码的修改。下面是Git的基本概念和使用方式的解释: 仓库(Repository):Git使用仓库来存储代码和版本历史记录。仓库可以位于本地计算机上,也可以…

【IMU:视觉惯性SLAM系统】

视觉惯性SLAM系统简介 相机(单目/双目/RGBD)与IMU结合起来就是视觉惯性,通常以单目/双目IMU为主。 IMU里面有个小芯片可以测量角速度与加速度,可分为6轴(6个自由度)和9轴(9个自由度)IMU,具体的关于IMU的介…

Linux 基本使用和程序部署

1. Linux 环境搭建 1.1 环境搭建方式 主要有 4 种: 直接安装在物理机上。但是Linux桌面使用起来非常不友好,所以不建议。[不推荐]。使用虚拟机软件,将Linux搭建在虚拟机上。但是由于当前的虚拟机软件(如VMWare之类的)存在一些bug&#xff…

c++------------------函数

函数定义 语法格式 函数定义包括函数头和函数体。函数头包含返回类型、函数名和参数列表。函数体是用花括号{}括起来的代码块,用于实现函数的功能。例如,定义一个计算两个整数之和的函数: int add(int a, int b) {return a b; }这里int是返回…

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…

Excel中match()函数

函数功能概述 MATCH 函数是 Excel 中用于在指定区域中查找特定值的位置的函数。它返回指定数值在指定数组区域中的位置。这个位置是相对于查找区域的相对位置,而不是绝对的单元格位置。语法结构 MATCH(lookup_value, lookup_array, match_type)lookup_value&#xf…

解决树形列表中数值层级累加

一、场景 记录解决树形列表中&#xff0c;父级中的某个属性需要由自身和子集累加的一个方法(递归)。 二、解决方案 public static void main(String[] args) throws Exception {List<NewsCategoryStaticDto> dataList new ArrayList<>();/*** 构造树形列表数据*…

【工作流】工作顺序

背景 当时的情况是&#xff1a;没有产品经理&#xff0c;后端直接和需求方对接&#xff1b;前端只能短时间投入大部分时间要忙别的&#xff1b;只有3个角色&#xff1a;需求方&#xff0c;后端&#xff0c;前端&#xff1b; 当时直接执行的 直接使用会议了解需求&#xff0c…

【人工智能-数据集】RML2018 时域信号的时序信号和星座图的图片信号生成方式(可用于多模态特征融合)

RML2018 数据集处理与多模态数据集生成指南 在现代无线通信和机器学习的交叉领域,数据集的质量和多样性对于模型的性能至关重要。RML2018 数据集作为一个涵盖多种调制方式和信噪比(SNR)的丰富资源,广泛应用于信号识别、调制分类等任务。本篇博客将深入介绍如何处理 RML201…

Android 获取屏幕物理尺寸

注&#xff1a;编译 sdk 需要使用 30 因为引入了 WindowMetrics、uild.VERSION_CODES.R 新 sdk 才存在的类和属性 某些场景处理 view &#xff0c;对 view 显示的位置要求比较精确&#xff0c;通常我们使用context.getResources().getDisplayMetrics().widthPixels 获取到的宽、…

sqoop的参数有哪些?

Sqoop 是一款用于在 Hadoop 与关系型数据库之间进行数据传输的工具&#xff0c;它有很多参数&#xff0c;可分为通用参数、导入参数和导出参数等&#xff0c;以下是一些常见的参数介绍&#xff1a; 通用参数 --connect 说明&#xff1a;指定要连接的关系型数据库的 JDBC URL。…

不同路径

不同路径 一个机器人位于一个 m x n 网格的左上角 &#xff08;起始点在下图中标记为 “Start” &#xff09;。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角&#xff08;在下图中标记为 “Finish” &#xff09;。 问总共有多少条不同的路径&#xff…