RISV-V架构的寄存器介绍

news2025/1/15 13:13:46

1、RISC-V的通用寄存器

在这里插入图片描述

(1)在编写汇编代码时,使用寄存器的ABI名字,一般不直接使用寄存器的编号;

(2)x0-x31是用来做整形运算的寄存器,f0-f31是用来做浮点数运算的寄存器;RISC-V一定有x0-x31寄存器,但是不一定有f0-f31寄存器,这要看支不支持浮点数运算;

(3)保存者:调用者保存就是在函数跳转前要保存的寄存器,被调用者保存就是在函数执行过程中要使用该寄存器必须将原来的值保存到栈中,在函数返回前要恢复;

(8)x8寄存器除了作为保存数据的寄存器s0,还可以作为栈指针FP。作为栈指针FP时,保存的是栈底,用于栈回溯,就是gdb调试看到的函数调用关系,在《RISC-V 体系结构编程与实战》的4.3节有介绍;

(9)x0寄存器是零寄存器,寄存器的永远是0,这是硬件决定的,读x0寄存器的值永远是0,写x0寄存器则没有效果;

1.2、s0寄存器什么时候作为fp?

(1)不作为FP:若在编译时,GCC使用"-fomit-frame-pointer"编译选项,则s0不会被作为FP, 这样能够避免保存,设置和恢复帧指针的指令,提高程序性能,同时对许多函数提供一个额外的寄存器。但是在大多数机器上将无法调试,因为没法栈回溯;

(2)作为FP: 若在编译时,GCC使用"-fno-omit-frame-pointer"编译选项,则s0被作为FP,可以进行栈回溯,方便调试,会降低程序性能;

2、RISC-V的系统寄存器

2.1、RISC-V的三种处理器模式

模式功能
M(Machine)模式具有对机器的全部访问权限,通常运行SBI
S(system)模式系统模式,通常运行uboot和kernel
U(user)模式用户模式,应用程序运行在此模式

2.2、CSR指令编码

在这里插入图片描述

字段含义
opcode指令操作码,说明该条指令时什么类型指令
rd目标寄存器
funct3功能码,进一步区分指令。比如CSR指令还细分为CSRRW、CSRRS等
rs1源操作数
csrCSR编码,也就是系统寄存器的编码

(1)访问系统寄存器需要通过CSR指令,上面是CSR指令的编码格式;

(2)系统寄存器的编码是12bit,对应CSR指令里的csr字段;

2.3 CSR地址空间映射

在这里插入图片描述

bit数含义
bit[11:10]表示系统寄存器的读写属性:0b11表示只读,其余表示可读可写
bit[9:8]表示允许访问该系统寄存器的处理器模式:0b00表示U模式,0b01表示S模式,0b10表示HS/VS,0b11表示M模式

(1)从地址空间映射可以指定,部分地址已经被RISC-V体系结构占用,用作固定功能系统寄存器的地址,还有部分地址是在RISC-V体系结构中没有定义的,用户在设计RISC-V架构芯片时可以自行增加系统寄存器;

(2)《RISC-V 体系结构编程与实战》的1.3节有介绍;

2.4 各个模式下的系统寄存器

2.4.1、U模式

在这里插入图片描述

2.4.2、S模式

在这里插入图片描述

2.4.3、M模式

在这里插入图片描述

3、什么是通用寄存器、系统寄存器?

(1) 通用寄存器:寄存器的功能没有提前定义,是给编写代码的程序员使用的,具体寄存器里保存的数据是什么含义,是由编写代码的程序员决定;

(2)系统寄存器:和处理器模式相关的寄存器,寄存器的每个bit都已经提前定义好,程序员只能按照规则来操作系统寄存器。比如:M、S、U各个模式下的系统寄存器,每个寄存器的每个bit都已经定义好了含义;

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

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

相关文章

傅里叶变换应用 (01/2):频域和相位

一、说明 我努力理解傅里叶变换,直到我将这个概念映射到现实世界的直觉上。这是一系列技术性越来越强的解释中的第一篇文章。我希望直觉也能帮助你! 二、傅里叶变换中频域简介 声音是一种机械波,是空气中的振动或其他介质。音符对应于波的频率…

【LeetCode75】第五十七题 电话号码的字母组合

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 给我们按下的按键,让我们返回对应按键可能产生的所有可能。 这是一道很经典的递归题,我们首先先拿一个数组把每个…

day45:C++ day5,运算符重载剩余部分、静态成员、继承

#include <iostream> #include <cstring> #define pi 3.14 using namespace std;class Shape { protected:double round;double area; public://无参构造Shape():round(40),area(100){cout<<"Shape::无参构造函数&#xff0c;默认周长为40&#xff0c;面…

C语言入门Day_21 函数的使用

目录 前言&#xff1a; 1.变量作用域 2.代码执行顺序 3.易错点 4.思维导图 前言&#xff1a; 我们是先定义函数&#xff0c;再调用函数。完成了函数的定义以后&#xff0c;我们就可以开始调用函数了&#xff0c;让我们来回顾一下&#xff1a; 调用函数分为两部分&#…

1131. 绝对值表达式的最大值

1131. 绝对值表达式的最大值 原题链接&#xff1a;完成情况&#xff1a;解题思路&#xff1a;求方向一次遍历两度统计 参考代码&#xff1a;求方向一次遍历两度统计 原题链接&#xff1a; 1131. 绝对值表达式的最大值 https://leetcode.cn/problems/maximum-of-absolute-val…

网络安全深入学习第二课——热门框架漏洞(RCE—Thinkphp5.0.23 代码执行)

文章目录 一、什么是框架&#xff1f;二、导致框架漏洞原因二、使用步骤三、ThinkPHP介绍四、Thinkphp框架特征五、Thinkphp5.0.23 远程代码执行1、漏洞影响范围2、漏洞成因 六、POC数据包Windows下的Linux下的 七、漏洞手工复现1、先Burp抓包&#xff0c;把抓到的请求包发送到…

【AI语言大模型】文心一言功能使用介绍

一、前言 文心一言是一个知识增强的大语言模型,基于飞桨深度学习平台和文心知识增强大模型,持续从海量数据和大规模知识中融合学习具备知识增强、检索增强和对话增强的技术特色。 最近收到百度旗下产品【文心一言】的产品,抱着试一试的心态体验了一下,整体感觉:还行! 二…

自动化测试API【软件测试】

自动化测试 selenium 1. 为什么使用selenium&#xff1f; 开源免费支持多浏览器支持多系统支持多语言编程提供了丰富的web自动化测试API 2. API 查找页面元素 find Element() find Elements() 元素定位的方式 xpath selector 通常情况下&#xff0c;不需要手动来编写xpath…

Learn Prompt-经验法则

还记得我们在“基础用法”当中提到的三个经验法则吗&#xff1f; 尝试提示的多种表述以获得最佳结果使用清晰简短的提示&#xff0c;避免不必要的词语减少不精确的描述 现在经过了几页的学习&#xff0c;我认为是时候引入一些新的原则了。 3. 一个话题对应一个chat​ ChatG…

Kafka开篇

前言 从本篇开始对个人Kafka学习做一个总结, 目标有这么几个。 从概念架构角度, 对消息中间件形成概要认知;从使用角度, 掌握其常见用法;从性能角度, 探究其高性能实现机制; 消息中间件的用途 从消息生产和消费的角度, 平衡消费者和消费者的速率差。基于该点可以做到削峰填…

白炽灯对新生儿视力有影响吗?推荐专业的儿童台灯

大家都知道婴儿还在成长发育的重要阶段&#xff0c;身体各方面都是比较脆弱的&#xff0c;对外界事务的感知也很敏感&#xff0c;一点点的刺激都会影响的婴儿。而白炽灯是否适合婴儿使用这个问题&#xff0c;我的建议是尽量不要用白炽灯。 因为白炽灯光线不是很柔和&#xff0c…

周易算卦流程c++实现

代码 #include<iostream> using namespace std; #include<vector> #include<cstdlib> #include<ctime> #include<Windows.h>int huaYiXiangLiang(int all, int& left) {Sleep(3000);srand(time(0));left rand() % all 1;while (true) {if…

许可分析 license分析 第十二章

许可分析是指对软件许可证进行详细的分析和评估&#xff0c;以了解组织内部对软件许可的需求和使用情况。通过许可分析&#xff0c;可以帮助组织更好地管理和优化软件许可证的使用。以下是一些可能的许可分析方法和步骤&#xff1a; 软件许可证的分配和使用权限&#xff1a;制定…

01Spring的Ioc思想和依赖注入手段(DI)

传统方式创建对象的缺陷 连接MySQL实现登录功能 控制层UserController public class UserController {//多态,半面向接口编程private UserService userService new UserServiceImpl();public void login(){String username "admin";String password "1234…

基于 Zookeeper 实现分布式锁

文章目录 前言声明前置知识分布式锁设计原则Zookeeper 分布式锁实现Curator框架实现分布式锁总结 前言 在分布式系统中&#xff0c;确保数据的一致性和避免冲突是一个核心问题&#xff0c;通常我们通过分布式锁来解决&#xff0c;分布式锁本质是一种同步机制&#xff0c;用于控…

【AI】机器学习——支持向量机(线性模型)

支持向量机是一种二分类算法&#xff0c;通过在高维空间中构建超平面实现对样本的分类 文章目录 5.1 SVM概述5.1.1 分类 5.2 线性可分SVM5.2.1 线性可分SVM基本思想5.2.2 策略函数间隔几何间隔硬间隔最大化 5.2.3 原始算法支持向量 5.2.4 对偶形式算法1. 构造并求解对偶问题2. …

【小沐学CAD】嵌入式UI开发工具:GL Studio

文章目录 1、简介2、软件功能3、应用行业3.1 航空3.2 汽车3.3 防御3.4 工业3.5 电力与能源3.6 医疗3.7 空间3.8 科技 结语 1、简介 https://disti.com/gl-studio/ DiSTI 是 HMI 软件、虚拟驾驶舱、仪表、信息娱乐、集群显示器和嵌入式 UI 解决方案的领先提供商。 而它的GL Stu…

kubernetes部署(kubeadmin)

文章目录 1.环境准备2. 安装dokcer3.部署cri-docker4.各个节点安装kubeadm等5.整合kubelet和cri-dockerd配置cri-dockerd配置kubelet 6.初始化集群 1.环境准备 环境和软件版本 OS : ubuntu 20.04 container runtime: docker CE 20.10.22 kubernetes 1.24.17 CRI&#xff1a;cr…

atoi函数

介绍&#xff1a; 头文件: <stdlib.h> 此函数的功能是将数字字符的字符串转化为字面上的整型返回。 例如&#xff1a; char arr1[] "-12"; char arr2[] "12"; char arr3[] " -12"; char arr4[] "-12a";使用atoi 我们…

Postman的高级用法一:重新认识postman核心模块

本请求示例来自于免费天气API&#xff1a; 实况天气接口API开发指南 未来一天天气预报api - 天气API 关于Postman的核心模块 全局变量请求接口请求体预处理脚本 类似beforeTest&#xff0c;在发起请求前的预执行逻辑&#xff0c;通常是生成一些动态变量值 测试用例模块 测试者…