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

10分钟快速搭建OpenClaw(基于Windows+飞书)

OpenClaw 是一款功能强大的 AI 智能体工具,能够帮助用户管理邮件、日历等日常事务。本文详细介绍了在 Windows11 系统上安装和配置 OpenClaw 的完整步骤,包括 Node.js 环境搭建、Git 安装、OpenClaw 部署以及飞书机器人创建与对接。通过简单的命令行操作和可视化界面配置,用户可以快速完成 AI 助手部署,实现智能办公自动化。文中还提供了飞书机器人权限设置等关键环节的图文指引,帮助用户轻松完成系统集成。

Hello, New World! 2924

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

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

m0_57354609的博客 1225

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 457

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

达妙电机MIT模式调参实战:如何从‘曲线偏离’到‘完美追踪’正弦波?

本文详细解析了达妙电机MIT模式调参实战,从曲线偏离到完美追踪正弦波的方法论。通过MATLAB实时曲线分析,深入探讨位置环(kp)和速度环(kd)的双重调节技巧,帮助工程师优化参数组合,提升电机控制精度和稳定性。

weixin_29053073的博客 730

避坑指南:STM32CubeMX配置SDIO4bit模式时为什么卡在HAL_SD_ConfigWideBusOperation?

本文深入分析了使用STM32CubeMX配置SDIO 4位模式时,程序在HAL_SD_ConfigWideBusOperation函数处卡死的常见问题。文章从硬件连接、CubeMX配置、初始化序列及HAL库底层实现等多个维度剖析根源,并提供了从初始化流程优化到增强代码鲁棒性等实战解决方案,帮助开发者彻底解决这一棘手难题。

pca5navigator的博客 825

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

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

weixin_42596246的博客 978

零基础搭建本地AI绘画环境:Stable Diffusion 3.5保姆级安装教程(含中文优化方案)

本文提供零基础搭建本地AI绘画环境的详细教程,重点介绍Stable Diffusion 3.5的安装与中文优化方案。从硬件配置检查到软件依赖安装,再到核心组件配置与中文语义增强,教程涵盖全流程操作指南,帮助用户快速掌握AI文生图模型的本地部署技巧,提升创作效率。

weixin_30752699的博客 312

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

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

gitblog_00155的博客 674

4. SAP ABAP OData 服务 Data Provider Class 的 GET_ENTITYSET 方法实现指南

首先第19行CREATEDATA创建er_entityset实例,指定其类型为zcl_zbook_manage_mpc=>tt_book,接着把这个引用映射到刚刚第五行定义的FIELD-SYMBOLS变量上去,这样的话,接下来我们对FIELD-SYMBOLS进行的操作,就会自动反应回引用变量er_entityset.因为我们可能在这个方法里,返回多条图书信息,所以需要用内表类型,而非单条记录的ts_book.ts_book代表一本图书的数据结构。......

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2961

从 VS Code 登录 ABAP Destination,一次把前后端连接跑通

最近很多 ABAP 开发者开始把 VS Code 纳入日常开发环境,原因很直接,VS Code 的轻量体验、命令面板、文件树、插件生态和 AI 编程能力,已经深深影响了现代开发者的工作方式。SAP 官方发布的 ABAP Development Tools for VS Code,也把 ABAP Cloud 开发模型带进了这个编辑器里。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 223

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

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

zoomdy's blog 9903

FortiWeb 相对路径遍历漏洞复现(CVE-2025-64446)

FortiWeb是Fortinet公司推出的企业级Web应用防火墙(WAF),专为保护Web应用和API抵御高级威胁设计。它集成人工智能与机器学习技术,通过双层检测引擎(HMM模型与SVM向量机)精准识别异常流量,可防御OWASP Top 10攻击、SQL 注入、XSS、DDoS及恶意机器人。其核心功能包括API自动化保护、虚拟补丁集成(兼容Acunetix等第三方扫描工具)及智能流量分析,支持HTTP/2、WebSocket等现代协议。(CVE-2025-64446)

iSee857的博客 467

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

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

xiaoheshang_123的博客 391

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

weixin_30781775的博客 323

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

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

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

weixin_33709364的博客 370

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

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

余额充值