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

单端反激电源的RCD钳位电路吸收设计

反激电源尖峰电压和特点: 反激开关电源主要适用于中小功率<100W的电源设计中,特点是电路简单、成本低、可靠性高、宽稳压范围、转换效率PF高。但是由于本身变压器的漏感和其他参数的影响,变压器在高速开关关断瞬间会产生很大的尖峰电压,截止时产生的尖峰电压是由电路中的储能元件释放的电流引起的突变,过高的尖峰电压会影响开关管的正常工作,需要对尖峰电压采取措施抑制尖峰电压。 如上图所示,尖峰电压的钳位抑制方式有很多种。 TVS成本偏高,属于硬件导通,元件的可靠性较差,在低电压工作效果不理想。 RCD回路吸收

qq_31687191的博客 8488

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

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

m0_57354609的博客 1225

Vue3实战:从零构建ElementPlus后台管理系统全流程

本文详细介绍了从零开始使用Vue3和ElementPlus构建后台管理系统的全流程。内容涵盖环境准备、项目初始化、Vite配置、SCSS样式体系搭建、ElementPlus组件库引入与配置,以及封装可复用的SvgIcon组件进行图标管理,旨在帮助开发者快速搭建现代化、可维护的中后台应用。

weixin_29011239的博客 159

(一)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

三、STM32F103ZET6最小系统

stm32最小系统除去主控CPU外,需要包含,电源电路,复位电路,BOOT电路,时钟电路(因为stm32有内置时钟,对时钟要求不高的话,可以不要)。NRST引脚其实芯片已经用一个约40K的电阻上拉了,所以理论上来说是不需要再外接上拉电阻的,但我看大家都是有外接上拉的,心里没有底,不管这么多,先预留着。吃过亏,特意查看了芯片手册资料,下图是官方建议的供电方案,图片来自stm32f103zet6数据手册。首先明白目标,单纯的学习软件知识并不是我希望的,我还希望会硬件设计,这样后面才能摆脱开发板。

sevendecsdn的博客 6450

手把手教你用Cadence Virtuoso仿真一个5GHz CMOS分频器:从原理图到后仿,避开那些教科书上没写的坑

本文详细介绍了在Cadence Virtuoso环境中设计5GHz CMOS分频器的完整流程,从原理图设计到后仿真优化,特别关注实际工程中容易被忽视的关键问题。内容涵盖分频器核心指标解析、锁存器拓扑选择、接口设计匹配以及后仿真优化策略,为射频集成电路设计提供实用避坑指南。

weixin_26934905的博客 262

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

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

weixin_42596246的博客 978

【SpringBoot 4.x 第2节】夯爆了,学习 Spring Boot 4.x 前,需要具备哪些 Java 基础?

🏆 本文收录于 《滚雪球学 Spring Boot 4.x》 专栏。 本专栏面向 有一点 Java 基础,但没有系统学过 Spring Boot 的读者,采用“滚雪球式学习法”:先跑通、再理解、再重构、再上线,最终带你从第一个 Hello API 一路完成一个可部署、可监控、可扩展的后端项目。

**My Coding Family** 4566

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

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

gitblog_00155的博客 674

QT 实现QStackedWidget切换页面右移动画

首先截取当前界面的图片,渲染到一个QLabel上,然后设置QPropertyAnimation动画,动画的作用对象就是这个QLabel,不断的改变geometry;当动画结束的时候,隐藏并释放这个QLabel。以下是一个QStackedWidget,放了两个QPushButton在上面,点击切换不同的界面。为了方便查看动画特效,设置了每个界面的背景图片。

希望能帮助大家,希望大家多多支持,你们的支持是我前进的动力。 882

Python爬虫教程:爬取法院司法拍卖数据全流程实战(附反爬+数据分析方案)

Python爬虫爬取法院司法拍卖数据的核心是模拟真人行为规避反爬+精准解析页面数据+合理处理数据。新手不用一开始就追求高级的反爬技巧和复杂的数据分析,先把基础的分页爬取和数据保存功能跑通,再逐步优化。我做的这个工具现在每周帮朋友爬取全国10个城市的法拍房数据,自动生成分析报告,他说这让他的投资决策效率提升了一倍。如果你们在开发过程中遇到问题,比如反爬失败、数据解析错误,都可以在评论区留言,我会尽力解答。后续我还会出一期爬取京东司法拍卖数据的教程,帮助大家获取更多的法拍数据来源。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2177

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

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

zoomdy's blog 9903

AUTOSAR从入门到精通-诊断事件管理模块(DEM)(四)

在 Autosar 中,诊断事件是指在车辆电子系统中发生的特定事件,可以用于诊断和故障排除。DEM模块通过EventId和相关的EventName来表示每个诊断事件。诊断事件的状态代表了监控器的结果,DEM模块通过RTE或其他BSW模块从SW-C接收监控器的结果。DEM模块使用EventId来管理系统中每个诊断事件的状态,并对各个测试结果执行所需的操作,例如存储冻结帧/拓展帧。所有监控器和BSW模块使用EventId作为符号化的EventName来管理诊断事件。

getusushu的博客 1508

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

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

xiaoheshang_123的博客 391

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

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

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

weixin_30781775的博客 323

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

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

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

weixin_33709364的博客 370
上一篇: 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、付费专栏及课程。

余额充值