操作系统基础知识介绍之指令集体系结构:RISC-V寄存器(掺杂与ARM和X86部分比对)

news2024/11/17 7:46:26

ra : 返回地址寄存器,用来保存函数或宏的返回地址 。
sp : 栈指针寄存器,用来指向栈顶的内存地址 。
gp : 全局指针寄存器,用来指向全局变量的内存地址 。
tp : 线程指针寄存器,用来指向线程局部变量的内存地址 。
t0 - t6 : 临时寄存器,用来保存临时数据或函数调用的返回值 。
s0 - s11 : 保存寄存器,用来保存函数或宏调用前后不变的数据 。
a0 - a7 : 参数寄存器,用来传递函数或宏的参数 。

ISA(指令集架构) :今天几乎所有的 ISA 都被归类为通用寄存器架构,其中操作数是寄存器或内存位置。 80x86 有 16 个通用寄存器和 16 个可以保存浮点数据的寄存器,而 RISC-V 有 32 个通用寄存器和 32 个浮点寄存器。

内存寻址:几乎所有台式机和服务器,包括 80x86、ARMv8 和 RISC-V,都使用字节寻址来访问内存操作数。 一些体系结构,如 ARMv8,80x86 和 RISC-V 不需要对齐,但如果操作数对齐,访问通常会更快。

内存寻址对不对齐是指数据在内存中的位置是否与处理器的内存访问粒度相匹配。内存访问粒度是指处理器一次能够读写的内存字节数,比如2字节、4字节、8字节等。数据在内存中的位置可以用一个地址来表示,地址是一个二进制数,可以被处理器的内存访问粒度整除或不能整除。如果能整除,就称为对齐的地址;如果不能整除,就称为不对齐的地址。

举个例子,假设处理器的内存访问粒度是4字节,那么地址0x00000000、0x00000004、0x00000008等都是对齐的地址,因为它们都能被4整除;而地址0x00000001、0x00000003、0x00000005等都是不对齐的地址,因为它们都不能被4整除。

内存寻址对不对齐会影响处理器访问数据的效率和正确性。如果数据在内存中是对齐的,那么处理器可以一次读写一个或多个数据,比如一个4字节的整数或两个2字节的短整数;如果数据在内存中是不对齐的,那么处理器可能需要多次读写才能获取一个或多个数据,比如一个跨越两个4字节边界的8字节浮点数。

寻址模式:除了指定寄存器和常量操作数之外,寻址模式还指定内存对象的地址。 RISC-V 寻址模式有寄存器、立即数(用于常量)和位移,其中将常量偏移量添加到寄存器以形成内存地址。 80x86 支持这三种模式,外加三种位移变体:无寄存器(绝对)、两个寄存器(基于位移索引)和两个寄存器,其中一个寄存器乘以操作数的大小(以字节为单位)(基于缩放索引和位移) ). 它更像后三种模式,减去位移字段,加上寄存器间接、索引和基于缩放索引。 ARMv8 具有三种 RISC-V 寻址模式加上 PC 相对寻址、两个寄存器的总和以及两个寄存器的总和(其中一个寄存器乘以操作数的字节大小)。 它还具有自动递增和自动递减寻址,其中计算出的地址替换了用于形成地址的其中一个寄存器的内容。 

操作数的类型和大小:与大多数 ISA 一样,80x86、ARMv8 和 RISC-V 支持 8 位(ASCII 字符)、16 位(Unicode 字符或半字)、32 位(整数或字)的操作数大小, 64 位(双字或长整数),以及 32 位(单精度)和 64 位(双精度)的 IEEE 754 浮点数。 80x86 还支持 80 位浮点(扩展双精度)。

运算:运算的一般类别是数据传输、算术逻辑、控制和浮点数。 RISC-V 是一种简单易流水化的指令集架构,是 2017 年使用的 RISC 架构的代表。

控制流指令:几乎所有 ISA都支持条件分支、无条件跳转、过程调用和返回。 这三个都使用 PC 相对寻址,其中分支地址由添加到 PC 的地址字段指定。 有一些小差异。 RISC-V 条件分支(BE、BNE 等)测试寄存器的内容,而 80x86 和 ARMv8 分支测试条件代码位设置为算术/逻辑运算的副作用。 ARMv8 和 RISC-V 过程调用将返回地址放在寄存器中,而 80x86 调用 (CALLF) 将返回地址放在内存中的堆栈中。

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

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

相关文章

OpenGL加载模型 之网格

基础知识点 我们的工作就是去解析这些导出的模型文件,并将其中的模型数据存储为OpenGL能够使用的数据。一个常见的问题是,导出的模型文件通常有几十种格式,不同的工具会根据不同的文件协议把模型数据导出到不同格式的模型文件中。有的模型文…

【镜像取证篇】仿真碎片-记一次镜像仿真失败的复盘过程

【镜像取证篇】仿真碎片-记一次镜像仿真失败的复盘过程 这个是很久以前的一个镜像实验,当时仿真可以看到Windows的启动界面,但却一直无法正常进入系统,不断的尝试修复,都是显示错误,最后把类型改为IDE后,成…

ESP32-设备驱动TMP102数字温度传感器驱动

TMP102数字温度传感器驱动 文章目录 TMP102数字温度传感器驱动1、TMP102介绍2、硬件准备3、软件准备4、驱动实现1、TMP102介绍 TMP102 器件是一款数字温度传感器,非常适合需要高精度的 NTC/PTC 热敏电阻更换。 该器件提供 0.5C 的精度,无需校准或外部组件信号调理。 器件温度…

Spring Task

1.1介绍 Spring Task是Spring框架提供的任务调度工具,可以按照约定的时间自动执行某个代码逻辑。 定位:定时任务框架 作用:定时自动执行某段Java代码 为什么要在Java程序中使用Spring Task? 应用场景: 1).信用卡每…

C learning_11 (数组和在内存存储的理解、数组越界、数组作为形参)

目录 数组的理解 数组越界 数组作为函数参数 数组的理解 数组的含义 在C语言中,用于存储多个相同类型的元素。它可以被简单地定义为包含多个元素的容器。数组中每个元素都可以通过索引来访问,索引从零开始递增。 C语言中的数组可以包含任何基本数据类…

力扣---LeetCode141/142. 环形链表 (I)和(II) (代码详解+流程图+数学逻辑拓展)

文章目录 前言141. 环形链表 I1.1 链接:1.2 思路:1.3 代码:快慢指针1.4 流程图: 142. 环形链表 II2.1 链接:2.2 思路:2.3 代码:2.4 流程图: 拓展问题及证明(面试常问):3.…

【雅特力】单片机AT32F421系列入门资料

1. 命名规则 AT32 全系列MCU选型手册.PDF AT32F421F8P7 AT32F421C8T7 (雅特力厂商送样的两个芯片版本) 2. 数据手册 【 数据手册】AT32F421系列引脚定义、电气特性与封装特性.PDF 3. 技术手册 【技术手册】AT32F421系列各外设(Peripheral)完整说明与各寄存器(Register)定…

[架构之路-190]-《软考-系统分析师》-4-据通信与计算机网络-5-图解CRC计算方法与步骤

目录 一、概述: 二、实战演示 假设: 第1步:把多项多项式转化为除数 第2步:把发送数据转换为被除数:在信息序列后加0 第3步:信息序列除以多项式序列 第4步:获得余数(CRC校验值…

OpenCV4.x图像处理实例-搭建身份识别系统

搭建身份识别系统 文章目录 搭建身份识别系统1、人脸识别系统介绍2、人脸特征数据提取3、人脸识别模型训练4、从静态图像进行身份识别5、从视频流识别身份在本文中,将介绍如何使用 OpenCV 搭建一个人脸检测与身份识别系统。 为了构建我们的人脸识别系统,我们将首先执行人脸检…

对称加密与非对称加密、证书、SSL/TLS握手过程

文章目录 对称加密(Symmetrical Encryption):非对称加密(Asymmetric Encryption):区别:SSL证书TLS1.2握手过程 对称加密(Symmetrical Encryption): 对称加密,是一种既简单速度又快的加密方式,加密与解密使用…

大数据之PySpark的RDD介绍

文章目录 前言一、RDD简介二、RDD的特性三、RDD的特点总结 前言 #博学谷IT学习技术支持# 之前的文章主要介绍Spark基础知识,例如集群角色、Spark集群运行流程等,接下来会进一步讨论Spark相对核心的知识,让我们拭目以待,同时也期待…

Linux安装Harbor亲测成功

Harbor简介 Harbor 是为企业用户设计的容器镜像仓库开源项目,包括了权限管理(RBAC)、LDAP、审计、安全漏洞扫描、镜像验真、管理界面、自我注册、HA 等企业必需的功能,同时针对中国用户的特点,设计镜像复制和中文支持等功能。 虽然Docker官方…

Android framework学习指南之Launcher启动过程原理分析

前言 Launcher是一个用来显示系统中已经安装的应用程序的应用程序,Launcher 在启动过程中会请求PackageManagerService 返回系统中已经安装的应用程序的信息,并将这些信息封装成一个快捷图标列表显示在系统屏幕上,这样用户可以通过点击这些快…

Flask框架的入门使用

Flask框架的入门使用 Flask框架Flask概述常用扩展包 Flask的基本使用环境准备创建helloworld.py文件启动运行访问 参数配置Flask对象配置应用程序配置读取配置信息加载配置信息配置对象与环境变量结合 app.run参数 开发服务器启动方式在命令行中运行Python程序中手动启动Pychar…

2.2.3开机流程中的BIOS与UEFI开机检测程序

操作系统的系统软件产生,是为了计算机所有硬件系统的资源合理分配。操作系统会控制所有的硬件并且提供核心功能,因此我们的计算机就能够认识硬盘内的文件系统,并且进一步的读取硬盘内的软件文件与执行该软件来达成各项软件的执行目的。 基本上…

【Redis】封装Redis缓存工具解决缓存穿透与缓存击穿问题

基于StringRedisTemplate封装一个缓存工具,主要有一下几个方法 方法1:将任意Java对象序列化为json并存储在String的指定key中且设置TTL 方法2:将任意Java对象序列化为json并存储在String的指定key中,并可以设置逻辑过期时间&…

【python可视化】常用数据类型

🙋‍ 哈喽大家好,本次是python数据分析、挖掘与可视化专栏第二期 ⭐本期内容:常用数据类型 🏆系列专栏:Python数据分析、挖掘与可视化 👍欢迎大佬指正,一起学习,一起加油&#xff01…

【Frida-实战】EA游戏平台的文件监控(PsExec.exe提权)

▒ 目录 ▒ 🛫 问题描述环境 1️⃣ 代码编写开源代码搜索自己撸代码procexp确定句柄对应的文件名并过滤 2️⃣ PsExec.exe提权定位找不到EABackgroundService.exe的问题 PsExec.exe提权PsExec.exe原理 🛬 结论📖 参考资料 🛫 问题…

4年Android开发,面试通过全靠狂刷这份面试题,从11K涨到25K+(内含答案)

在博主认为,对于Android面试以及进阶的最佳学习方法莫过于刷题博客书籍总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现面试并不难,其次就是在刷题的过程中有没有去思考&am…