RISC-V指令与寄存器

RISC-V学习笔记(二):RISC-V寄存器和指令系统 摆烂才是王道 阅读详情


前言

在RISC-V项目调试和项目开发过程中,难免会遇到RISC-V体系结构和汇编的问题。比如笔者在利用编译生成的dump文件,对Nuclie处理器指令执行进行调试的过程中,就遇到了指令长度和指令操作的问题。


下面参考《基于FPGA和RISC-V的嵌入式系统设计》,以RISC-V 地址空间/ RV32I 通用寄存器与函数调用约定/ RV32I 指令格式三个角度介绍。

一、RISC-V 地址空间

内存地址空间可以用来分配给代码、数据,或者作为寄存器的内存映射(Memory
Mapped Registers)。在物理实现时,代码和数据可以共用存储(von Neumann,
冯·诺依曼架构),也可以分别存储(Harvard,哈佛架构)。和其他的处理器一样,
RISC-V 的处理器也是通过程序计数器(Program Counter,PC)来指示当前正在执
行的指令地址的。
在寄存器的内存映射部分,大部分的外围设备寄存器都会被映射到这个空间,
其中也包括机器模式的定时器(Mtime)和定时器触发值(Mtimecmp)。

在这里插入图片描述
RV32I 指令集包含 32 个通用寄存器,32位处理器中每个通用寄存器x0…x10…x31都是占4个字节。
在 RISC-V 的特权架构部分还对控制与状态寄存器(Control Status Register,
CSR)做了定义,并单独分配了 12 位的地址空间。在用户指令集中,则专门定义
了 Zicsr 指令集扩展来对 CSR 进行操作。

二、 RV32I 通用寄存器与函数调用约定

RV32I 基础指令集总共定义了 32 个 32 位的通用寄存器。它们分别被标记为
x0 ~ x31。其中零号寄存器 x0 是只读寄存器,其值永远为零。
在用汇编语言编写时,这 32 个寄存器
的名称也根据其在调用约定中的职能而被重新命名。具体如下表:
在这里插入图片描述
需要指出的是,除了硬件指令集会对函数调用约定产生影响外,高级
语言的编译器也会对其有影响。
例如,对下面的函数:

void dummy(int a,int b,int c,int d,int e);

不同的编译器可能对函数参数压栈的顺序有不一致的理解。有的会从左到右,以
a、b、c、d、e 的顺序压栈;有的则反之,从右到左压栈。

三、RV32I 指令格式

RV32I 的基本指令格式只有 4 种,分别是寄存
器类型(R-TYPE)、短立即数类型(I-TYPE)、内存存储类型(S-TYPE)、高位立即数类型(U-TYPE)。
为了方便跳转指令,RV32I 还包含两种衍生格式 B-TYPE(Branch,条件跳转)
与 J-TYPE(Jump,无条件跳转)。B-TYPE 衍生于 S-TYPE,B-TYPE 除了立即数
的位排列与 S-TYPE 不一样外,其他的格式都与 S-TYPE 一样。J-TYPE 也是通过
类似的方式衍生于 U-TYPE。用这种方式衍生新格式的目的是便于硬件产生目标
地址。
这些指令格式非常规整,其操作码、源寄存器和目标寄存器总是
位于相同的位置上,简化了指令解码器的设计。
在这里插入图片描述

总结

RISC-V的设计有自己独到的地方,还需要我们结合实际的场景去不断深入理解。下一篇就以“RV32I 算术与逻辑指令”为视角,看看指令格式与汇编code的对照关系。

RISC-V寄存器全解析:从x0到x31,这些隐藏功能你都知道吗? 本文深入解析RISC-V架构中31个通用寄存器的实战应用与隐藏功能。从硬连零的x0寄存器的高效清零与条件判断技巧,到临时寄存器(t0-t6)的敏捷开发与陷阱规避,再到参数寄存器(a0-a7)的函数调用约定与优化策略,以及保存寄存器(s0-s11)和栈指针在构建稳固运行时环境中的作用,最后探讨了控制与状态寄存器(CSR)在中断与异常处理中的核心应用。文章为嵌入式开发、操作系统移植及性能优化提供了详实的操作指南与避坑心得。 阅读详情

相关推荐

【RISC-V 指令集】RISC-V 向量V扩展指令集介绍(二)-向量元素到向量寄存器状态的映射

以下图表说明了根据当前的SEW和LMUL设置以及实现的VLEN,如何将不同宽度的元素打包到向量寄存器的字节中。元素被打包到每个向量寄存器中,其中最低有效字节位于最低编号的位中。选择这种映射是为了为软件提供最简单和最可移植的模型,但在某些操作上,对于更宽的向量数据路径,可能会产生较大的布线成本。向量指令集是专门设计的,以支持内部重新排列不同SEW的向量数据以减少数据路径布线成本的实现,同时在外部保留简单的软件模型。

u011376987的博客 2362

RISV-V架构的寄存器介绍

(1) 通用寄存器:寄存器的功能没有提前定义,是给编写代码的程序员使用的,具体寄存器里保存的数据是什么含义,是由编写代码的程序员决定;(2)系统寄存器:和处理器模式相关的寄存器,寄存器的每个bit都已经提前定义好,程序员只能按照规则来操作系统寄存器。比如:M、S、U各个模式下的系统寄存器,每个寄存器的每个bit都已经定义好了含义;

weixin_42031299的博客 1万+

编译器 实验4RISC-V目标代码生成 指令选择 寄存器分配 栈的管理

对于中间代码中的全局变量,我们可以直接映射到目标代码的上,这是比较简单的。但是除此之外,我们还使用了数目不受限的变量和临时变量,但处理器所拥有的寄存器数量是有限的。因此我们需要将中间代码中的变量映射到寄存器上,这个过程就是寄存器分配。

telnet3000的博客 890

【RISC-V】RISC-V寄存器

【代码】【RISC-V】RISC-V寄存器简介。

qq_43194080的博客 1万+

RISC-V特权级架构详解:从寄存器到指令的实战指南

在计算机体系结构中,特权级是实现硬件级别隔离和保护的核心机制,它通过不同权限层级控制软件对系统资源的访问。其基本原理是构建一个权限环,低特权级代码无法直接执行高特权级操作,任何越权尝试都会触发异常,由更高特权级软件处理。这一机制为操作系统稳定运行提供了基础保障,尤其在嵌入式系统和操作系统开发中至关重要。从技术价值看,特权级管理是实现内存保护、进程隔离和安全性的基石,它确保了用户程序不会干扰内核或其它关键系统组件。在RISC-V架构中,这一机制通过M、S、U三个特权模式具体实现,涉及关键寄存器如mstatus

weixin_33816946的博客 483

RISC-V指令集

RV32I有32个通用寄存器,以及一个PC寄存器。其中有一个通过硬件设置的值恒为 0 的 x0 寄存器。

m0_47329175的博客 2万+

RISC-V 指令集的模块化和寄存器结构

0 前言 RISC-V 指令集架构是加州大学伯克利分校研发的第五代精简指令集架构,先后经历了四代精简指令集的发展,旨在设计一个完全开放、免费的和性能强大的指令集架构。它和X86/ARM相比,一大优势就是支持模块化,下面我们就来介绍一下RISC-V指令集的模块化结构,顺便再介绍下其寄存器结构。 一、模块化结构 RISC-V 指令集架构一改传统增量 ISA 模式,采用模块化 ISA 模式,它被定义为基本的整数指令集架构,以及几个标准的扩展子集,可以自定义指令扩展,如下表所示。 它的核心为RV32I的基础整数指

耐心的小黑的博客 6020

risc-v指令集手册(非特权架构)- ‘Zicsr’控制和状态寄存器(CSR)指令V2.0(已批准)

RISC-V定义了与每个hart关联的4096个控制和状态寄存器的单独地址空间。本章定义了在这些CSR上运行的完整CSR指令集。虽然CSR主要由特权体系结构使用,但非特权代码中有多种用途,包括用于计数器和计时器以及浮点状态。计数器和计时器不再被视为标准基本ISA的必需部分,因此访问它们所需的CSR指令已从基本ISA章节移至该单独的章节。

baidu_19375199的博客 3411

RISC-V特权级寄存器及指令文档

RISC-V特权级寄存器及指令文档 M态寄存器 1. ISA寄存器 misa(read-write) base域: 1.编码了内部支持的ISA宽度. 2.当重置时,总是设置为支持的最宽ISA extensions域: 功能: 1.编码了现有的标准扩展。依照每个字母一位的方式 ,第0位代表A,第25位代表Z。 保留位总返回0 2.重置时为最大的扩展集合 2. mstatus 寄存器 XLEN-bit read/write register 寄存器结构: 位描述: xIE域: 当硬件线程运行于x模式,

Pandacooker的博客 2万+

【RISC-V】寄存器及 PCS(过程调用标准)

为了确保函数的正确执行,需要保存这些寄存器的值,以便在函数执行完毕后能够恢复调用者原来的寄存器值。通过将这些寄存器的值保存到堆栈中,函数可以在执行期间使用堆栈空间来保存自己的局部变量和临时值,而不会覆盖调用者的寄存器值。具体来说,它将寄存器的值保存在栈指针(sp)指向的内存位置上,每个寄存器的值占据4个字节的空间。这段代码的作用是将之前保存在栈上的寄存器值恢复到相应的寄存器中,通常用于函数返回之前的清理工作。函数调用时需要保存这些寄存器的原因是为了保护调用者的寄存器值,以便函数执行时不会干扰调用者的代码。

tyustli 2346

生态位宽度计算&可视化展示(R语言)

物种的生态位越宽,该物种的特化程度就越小,倾向于泛化种(generalist species);物种的生态位越窄,倾向于是一个特化种(specialists species)。生态位宽度是指物种(或其它生物单位)在群落中所利用的各种不同资源的总和。本篇所使用为生态位宽度指数即**Levins的生态位宽度指数。

weixin_53705272的博客 4435

浅谈RISC-V指令集与寄存器

risc-v指令集与寄存器介绍。以rv32I为例。

m0_57354609的博客 1225

从零开始:在Ubuntu 22.04上配置Isaac Gym Preview 3环境(含常见错误解决方案)

本文提供了在Ubuntu 22.04系统上从零开始配置Isaac Gym Preview 3环境的完整实战指南。内容涵盖NVIDIA驱动安装、Conda环境搭建、CUDA与PyTorch版本精准匹配、Isaac Gym核心安装与验证,并重点介绍了针对四足机器人等复杂系统的强化学习训练环境配置、常见错误解决方案及性能调优技巧,旨在帮助开发者高效部署这一高性能物理仿真平台。

weixin_29048775的博客 392

(一)RISC-V 指令集及寄存器介绍

RISC-V 念作 “risk-five”,代表着 Berkeley 所研发的第五代精简指令集。该项目 2010 年始于加州大学伯克利(Berkeley)分校,希望选择一款 ISA用于科研和教学。List itemX86:太复杂,IP 问题List itemARM:一样的复杂,而且在 2010 年之前还不支持 64 位,以及同样的 IP 问题。risc-v 有32个通用寄存器(简写 reg),标号为x0 - x31,每个通用寄存器都有各自的用途。

heyangge的博客 1899

h5支付不能打开支付宝 ios_iOS支付宝H5支付无法返回APP解决方案

本文前大段在讲楼主是如何解决这个问题的,以及中间遇到的麻烦。赶时间的同学可以直接看最后的 最终解决方案。在讨论之前,我们先看看官方文档上的一句话:注意:在iOS系统中,唤起支付宝App支付完成后,不会自动回到浏览器或商户APP。用户可手工切回到浏览器或商户APP;支付宝H5收银台会自动跳转回商户return_url指定的页面。what? 官方直接跟我们说GG了?楼主不甘心,还是想尝试一下。借鉴之前...

weixin_39864101的博客 854

matlab 三维绘图 抛光,瓷砖抛光过程建模与仿真

:瓷砖抛 光过程 建模与仿真朱 成 就(广 东工业大学 机 电工程 学院, 广东广州 )摘要 :瓷砖的抛磨影响 因素众 多 ,实际磨削加工时容易出现漏抛 、返抛现象 。对陶瓷抛光机磨头进行运动学分析 ,并基于不 同粒度号 的磨 粒在一定压力下的加工深度模型 ,探讨抛光机磨 头转 速 、横梁摆动频率 、传送速度对瓷砖抛光加工表 面均匀性 的影响,然 后结合 磨削机理使 用 对陶瓷抛光过程进行仿真 ...

weixin_36331058的博客 747

RISC-V指令集学习路线图:从寄存器到简单程序

深入浅出地讲解RISC-V指令集的核心组成,从寄存器结构到编写第一个简单程序,帮助初学者建立系统认知,掌握risc-v指令集的关键特性和实际应用方法。

weixin_42596246的博客 978

论文分享|ECCV2022,PATnet,Cross-Domain Few-Shot Semantic Segmentation,CDFSS新基准,文末有复现教程

这篇论文提出的跨域小样本语义分割(CD-FSS)任务,旨在将源域学习的分割能力迁移到目标域,仅需少量标注样本。针对传统小样本分割方法在跨域场景性能下降的问题,作者提出了基于金字塔锚点变换的网络(PATNet),通过将域相关特征转换为域无关特征,并引入任务自适应微调推理(TFI)提升目标域适应能力。实验表明,PATNet在1-shot和5-shot设置下分别比现有方法提升8.49%和10.61%的准确率。同时,作者构建了CD-FSS基准并设计了任务难度评估指标。代码和数据集已开源,复现难度中等。

m0_74277350的博客 1094

RISC-V汇编完全解析:核心寄存器与指令集架构详解

RISC-V汇编语言是开源指令集架构RISC-V的基础,掌握其核心寄存器与指令集架构对于理解嵌入式开发、操作系统内核设计以及编译器优化至关重要。本文将从寄存器结构、指令分类到实际应用场景,全面解析RISC-V汇编编程的核心知识,帮助新手快速入门这一高效灵活的指令集。 ## 一、RISC-V寄存器架构:从通用到专用的完整体系 RISC-V架构的寄存器设计遵循精简指令集原则,同时通过扩展支持多样化

gitblog_00155的博客 674

【自适应滤波】自适应UKF,基于新息自适应调节Q和R,场景为雷达跟踪与滤波、MATLAB实现

本文提出了一种基于新息协方差匹配的自适应UKF(CM-AUKF)算法,用于解决噪声统计未知或时变场景下的目标跟踪问题。通过实时调整过程噪声协方差Q和观测噪声协方差R,CM-AUKF显著提升了跟踪精度和稳定性。仿真结果表明,相比传统UKF,CM-AUKF在位置和速度估计误差上分别降低了约50%和30%,且无需人工调参。该算法适用于无人机导航、雷达跟踪等动态环境,MATLAB代码可直接运行复现结果。自适应曲线显示算法能有效收敛到真实噪声参数,验证了其自适应能力。

985工科博士毕业,专攻定位、导航和滤波等算法研究。从业10年,主要使用MATLAB 329

动态视频目标追踪系统:基于YOLOv11+DeepSORT的从入门到实战全流程指南

仅保留车辆类别(假设车辆类别ID为2)if det.class_index == 2: # 车辆类别ID通过本指南,你已完成从环境搭建数据准备模型训练到追踪系统与UI界面的全流程,搭建了一套完整的动态视频目标追踪系统。该系统在安防监控、交通管理等场景中具有实用价值,可实现目标的实时稳定追踪。未来,你可尝试结合多模态特征(如目标外观+运动特征)提升追踪鲁棒性,或探索轻量化模型部署(如TensorRT加速),让系统在边缘设备上也能高效运行。

LXY_LOVE36的博客 142

RISC-V反汇编显示原始指令和寄存器编号

反汇编时添加 `-M no-aliases,numeric`选项,输出原始指令和寄存器编号。

zoomdy's blog 9903

在Ubuntu系统中安装和使用wxPython进行Python图形用户界面(GUI)开发

在本文中,我将向您展示如何在Ubuntu系统上安装和使用wxPython,并提供一些示例代码来帮助您开始使用这个强大的工具。在MyFrame的构造函数中,我们创建了一个wx.Panel和一个按钮,并将按钮的点击事件绑定到一个自定义的方法on_button_click上。最后,我们创建了一个wx.App的实例,创建了一个MyFrame对象并显示它,最后通过调用app.MainLoop()启动应用程序的主事件循环。这只是一个简单的示例,但它演示了如何使用wxPython创建一个基本的GUI应用程序。

qq_37934722的博客 1038

手把手教你玩转RISC-V指令集--RISC-V基础入门 1.2 RISC-V架构基础 RISC-V的寄存器与数据类型

第一部分:RISC-V基础入门 1.2 RISC-V架构基础 RISC-V的寄存器与数据类型。

xiaoheshang_123的博客 391

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

RISC-V寄存器探秘:如何用CSR指令玩转mstatus和mtvec寄存器?

本文深入解析RISC-V架构中mstatus和mtvec寄存器的核心功能与操作技巧。通过CSR指令的原子操作特性演示,详细讲解特权模式切换机制及中断处理优化方法,并分享GDB调试实战经验,帮助开发者掌握RISC-V底层开发的关键技术。

weixin_30781775的博客 323

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

RISC-V特权架构入门:手把手教你用CSR指令读写mtvec和mstatus寄存器

本文详细介绍了RISC-V特权架构中CSR寄存器的操作指南与异常排查方法。通过实战案例,讲解如何正确读写mtvec和mstatus寄存器,避免常见错误,并提供调试技巧和工具链使用建议,帮助开发者快速掌握RISC-V底层开发。

weixin_33709364的博客 370

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

上一篇: VS常见编译选项总结
下一篇: QEMU启动OVMF shell超时分析
Cerman
博客等级 码龄11年 63粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值