RISCV 6 RISC-V加载存储指令

news2024/11/18 15:37:41

RISCV 6 RISC-V加载存储指令

  • 1 RV32I Load and Store Instructions
    • 1.1 LOAD instructions
      • 1.1.1 加载指令的指令格式
      • 1.1.2 加载指令在使用时需要注意的点
    • 1.2 STORE instructions
      • 1.2.1 存储指令的指令格式
      • 1.2.2 存储指令在使用时需要注意的点
  • 2 RV64 Load and Store Instructions
    • 2.1 Load Instructions
    • 2.2 Store Instructions

RISCV - 1 RV32/64G指令集清单
RISCV - 2 “Zicsr“, CSR Instructions
RISCV -3 RV32I/RV64I基本整型指令集
RISCV - 4 ISA 扩展名命名约定
RISCV 5 RISC-V调用规则

1 RV32I Load and Store Instructions

RV32I is a load-store architecture, where only load and store instructions access memory and arithmetic instructions only operate on CPU registers. RV32I provides a 32-bit address space that is byte-addressed. The EEI will define what portions of the address space are legal to access with which instructions (e.g., some addresses might be read only, or support word access only). Loads with a destination of x0 must still raise any exceptions and cause any other side effects even though the load value is discarded.
RV32I 是一种加载-存储架构,只有加载和存储指令才能访问内存,算术指令只能在 CPU 寄存器上运行。RV32I 提供字节寻址的 32 位地址空间。EEI 将定义地址空间的哪些部分可以用哪些指令合法访问(例如,某些地址可能只允许读取,或只支持字访问)。目标地址为 x0 的加载,即使加载值被丢弃,仍必须引发任何异常并导致任何其他副作用。
The EEI will define whether the memory system is little-endian or big-endian. In RISC-V, endianness is byte-address invariant.
EEI 将定义内存系统是小端位(little-endian)还是大端位(big-endian)。在 RISC-V 中,字节地址不变。
In a system for which endianness is byte-address invariant, the following property holds: if a byte is stored to memory at some address in some endianness, then a byte-sized load from that address in any endianness returns the stored value.
在一个字节地址不变的系统中,存在以下特性:如果一个字节被存储到内存的某个字节地址上,那么在任何字节地址上从该地址进行字节大小的加载都会返回存储的值。
In a little-endian configuration, multibyte stores write the least-significant register byte at the lowest memory byte address, followed by the other register bytes in ascending order of their significance. Loads similarly transfer the contents of the lesser memory byte addresses to the less-significant register bytes.
在 little-endian 配置中,多字节存储将最低有效位的寄存器字节写入最低的内存字节地址,然后按最高有效位递增顺序写入其他寄存器字节。载入时,同样将较小内存字节地址的内容转移到最低有效位的寄存器字节。
In a big-endian configuration, multibyte stores write the most-significant register byte at the lowest memory byte address, followed by the other register bytes in descending order of their significance. Loads similarly transfer the contents of the greater memory byte addresses to the less-significant register bytes.
在 big-endian 配置中,多字节存储将最高有效位的寄存器字节写入最低的内存字节地址,然后按有效位程度降序写入其他寄存器字节。载入时,同样将较大内存字节地址的内容转入较小寄存器字节。

The LW instruction loads a 32-bit value from memory into rd. LH loads a 16-bit value from memory, then sign-extends to 32-bits before storing in rd. LHU loads a 16-bit value from memory but then zero extends to 32-bits before storing in rd. LB and LBU are defined analogously for 8-bit values.
LW 指令将内存中的 32 位数值加载到 rd 中。LH 从内存中载入 16 位数值,然后符号扩展到 32 位,再存入 rd。LHU 从内存加载一个 16 位数值,但在存储到 rd 之前将零扩展到 32 位。LB 和 LBU 的定义与 8 位值类似。
The SW, SH, and SB instructions store 32-bit, 16-bit, and 8-bit values from the low bits of register rs2 to memory.
SW、SH 和 SB 指令将寄存器 rs2 低位的 32 位、16 位和 8 位数值存储到内存中。

1.1 LOAD instructions

Loads are encoded in the I-type format
加载指令以 I 型格式编码
I类型指令编码格式:
在这里插入图片描述

1.1.1 加载指令的指令格式

加载指令的编码格式
在这里插入图片描述

其对应的立即数的编码格式如下所示:

  • 立即数的bit0从在加载指令的bit[20]位去获取,bit1-4是从加载指令的bit[24:21]获取,而bit 5~10则是从加载指令的bit[30:25]获取,符号位则是加载指令的bit[31],立即数的 bit11 ~31都按照加载指令的bit[31]做符号扩展。

在这里插入图片描述

1.1.2 加载指令在使用时需要注意的点

加载指令时I类型的指令编码,其立即数是有符号的立即数,在处理时需要考虑其符号位,立即数的范围为[-2048 ~ 2047]
在这里插入图片描述
因此当使用加载指令去处理offset小于-2048以及大于2047时会报offset的异常错误。
lb t1, (-2048 ~ 2047)(t0)是合法的加载指令
lb t1, -2049(t0)或者lb t1, 2048(t0)则是非法加载操作。

1.2 STORE instructions

Stores are encoded in the S-type.
存储指令以 S 类型编码。
在这里插入图片描述

1.2.1 存储指令的指令格式

存储指令的指令格式
在这里插入图片描述
其对应的立即数的编码格式如下所示:

  • 立即数的bit0从在加载指令的bit[7]位去获取,bit1-4是从加载指令的bit[11:8]获取,而bit 5~10则是从加载指令的bit[30:25]获取,符号位则是加载指令的bit[31],立即数的 bit11 ~31都按照加载指令的bit[31]做符号扩展。
    在这里插入图片描述

1.2.2 存储指令在使用时需要注意的点

存储指令时S类型的指令编码,其立即数是有符号的立即数,在处理时需要考虑其符号位,立即数的范围为[-2048 ~ 2047]
在这里插入图片描述

因此当使用加载指令去处理offset小于-2048以及大于2047时会报offset的异常错误。
sw t1, (-2048 ~ 2047)(t0)是合法的加载指令
sw t1, -2049(t0)或者lb t1, 2048(t0)则是非法加载操作。

2 RV64 Load and Store Instructions

RV64 的加载存储指令和RV32的加载存储指令时类似的。
RV64I extends the address space to 64 bits. The execution environment will define what portions of the address space are legal to access.
RV64I 将地址空间扩展到 64 位。执行环境将确定地址空间的哪些部分可以合法访问。

Load byte(lb):从内存中加载一个字节并将其扩展为32位。例如,lb x1, 0(x2)表示从寄存器x2指向的地址偏移0处的内存位置加载一个字节,并将其扩展为64位后存储在寄存器x1中。

Load half-word(lh):从内存中加载半个字(16位)并将其扩展为32位。例如,lh x1, 0(x2)表示从寄存器x2指向的地址偏移0处的内存位置加载一个半个字,并将其扩展为64位后存储在寄存器x1中。

Load word(lw):从内存中加载一个字(32位)。例如,lw x1, 0(x2)表示从寄存器x2指向的地址偏移0处的内存位置加载一个字,并将其扩展为64位后存储在寄存器x1中。

Load double-word(ld):从内存中加载两个字(64位)。例如,ld x1, 0(x2)表示从寄存器x2指向的地址偏移0处的内存位置加载一个双字,并将其存储在寄存器x1中。

Store byte(sb):将一个字节存储到内存中。例如,sb x1, 0(x2)表示将寄存器x1中的低8位存储到从寄存器x2指向的地址偏移0处的内存位置。

Store half-word(sh):将半个字存储到内存中。例如,sh x1, 0(x2)表示将寄存器x1中的低16位存储到从寄存器x2指向的地址偏移0处的内存位置。

Store word(sw):将一个字存储到内存中。例如,sw x1, 0(x2)表示将寄存器x1中的值存储到从寄存器x2指向的地址偏移0处的内存位置。

Store double-word(sd):将两个字存储到内存中。例如,sd x1, 0(x2)表示将寄存器x1中的值存储到从寄存器x2指向的地址偏移0处的内存位置

2.1 Load Instructions

The LD instruction loads a 64-bit value from memory into register rd for RV64I.
LD 指令将内存中的 64 位值加载到 RV64I 的寄存器 rd 中。
在这里插入图片描述

2.2 Store Instructions

在这里插入图片描述

The SD, SW, SH, and SB instructions store 64-bit, 32-bit, 16-bit, and 8-bit values from the low bits of register rs2 to memory respectively.
SD、SW、SH 和 SB 指令分别将寄存器 rs2 低位的 64 位、32 位、16 位和 8 位数值存储到内存中。

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

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

相关文章

BES SDK平台编译原理与编译方法

+他V hezkz17进数字音频系统研究开发交流答疑群(课题组) 2300YP 输入 编译命令 make T=best2300p_ep_anc DEBUG=1 清除 make T=best2300p_ep_anc allclean 2700 编译命令:make T=best1603_ibrt -j 清除命令 : make T=best1603_ibrt clean -j: 这也是一个参数,用于指…

THINKPHP 微联云投票系统源码独立版 + 支持刷礼物

THINKPHP 微联云投票系统源码独立版 支持刷礼物 nginxphp7.2以上 mysql5.6以上 简单测试后台基本没什么问题,暂时发现H5前端有bug,自行修复。

Alions 8.6 下 Redis 7.2.0 集群搭建和配置

Redis 7.2.0 搭建和集群配置 一.Redis 下载与单机部署1.Redis 下载2.虚拟机配置3.Redis 单机源码安装和测试4.Java 单机连接测试1.Pom 依赖2.配置文件3.启动类4.配置类5.单元测试6.测试结果 二.Redis 集群部署1.主从1.从节点配置2.Java 测试 2.哨兵1.哨兵节点配置2.复制一个哨兵…

使用 ChatGPT 创建 PowerPoint 演示文稿

让 ChatGPT 成为您的助手来帮助您编写电子邮件很简单,因为众所周知,它非常能够生成文本。很明显,ChatGPT 无法帮助您做饭。但您可能想知道它是否可以生成文本以外的其他内容。在上一篇文章中,您了解到 ChatGPT 只能通过中间语言为您生成图形。在这篇文章中,您将了解使用中…

无涯教程-PHP - intval() 函数

PHP 7引入了一个新函数 intdiv()&#xff0c;该函数对其操作数执行整数除法并将该除法返回为int。 <?php$valueintdiv(10,3);var_dump($value);print(" ");print($value); ?> 它产生以下浏览器输出- int(3) 3 PHP - intval() 函数 - 无涯教程网无涯教程网…

Matlab绘制二值图像

二值化介绍 只有黑白两种颜色的图像称为黑白图像或单色图像&#xff0c;是指图像的每个像素只能是黑或者白&#xff0c;没有中间的过渡&#xff0c;故又称为二值图像。其特点是二值图像的像素值只能为0和1&#xff0c;分别代表黑色和白色&#xff0c;图像中的每个像素值用1位存…

C++ 网络编程项目fastDFS分布式文件系统(六)--qt(client)+login

目录 1. 登录和注册协议 1.1 注册协议 1.2 登录协议 2. 单例模式 1. 登录和注册协议 1.1 注册协议 # URL http://192.168.1.100:80/reg # post数据格式 { userName:xxxx, nickName:xxx, firstPwd:xxx, phone:xxx, email:xxx } 2. 服务器端 - Nginx 服务器端的配置。 loc…

数据结构初阶--排序

目录 一.排序的基本概念 1.1.什么是排序 1.2.排序算法的评价指标 1.3.排序的分类 二.插入排序 2.1.直接插入排序 2.2.希尔排序 三.选择排序 3.1.直接选择排序 3.2.堆排序 重建堆 建堆 排序 四.交换排序 4.1.冒泡排序 4.2.快速排序 快速排序的递归实现 法一&a…

基于OpenCV实战(基础知识一)

目录 简介 1.计算机眼中的图像 2.图片的读取、显示与保存 3.视频的读取与显示 简介 OpenCV是一个流行的开源计算机视觉库&#xff0c;由英特尔公司发起发展。它提供了超过2500个优化算法和许多工具包&#xff0c;可用于灰度、彩色、深度、基于特征和运动跟踪等的图像处理和…

蓝帽杯半决赛2022

手机取证_1 iPhone手机的iBoot固件版本号:&#xff08;答案参考格式&#xff1a;iBoot-1.1.1&#xff09; 直接通过盘古石取证 打开 取证大师和火眼不知道为什么都无法提取这个 手机取证_2 该手机制作完备份UTC8的时间&#xff08;非提取时间&#xff09;:&#xff08;答案…

[虚幻引擎 UE5] EditableText(可编辑文本) 限制只能输入数字并且设置最小值和最大值

本蓝图函数可以格式化 EditableText 控件输入的数据&#xff0c;让其只能输入一定范围内的整数。 蓝图函数 调用方法 下载蓝图&#xff08;5.2.1版本&#xff09;https://dt.cq.cn/archives/618

yolo笔记

目录 输入端Mosaic数据增强数据增强Copy-paste数据增强- MixUp数据增强- Albumentations数据增强- Augment HSV (Hue, Saturation, Value)色度、饱和度、浓度数据增强- Random horizontal flip自适应锚框计算自适应图片缩放 BackboneFocus结构CSP结构CSP结构Neck 损失函数IOU_L…

【hello git】初识Git

目录 一、简述Git 二、Linux 下 Git 的安装&#xff1a;CentOS 2.1 基本命令 2.2 示例&#xff1a; 三、Linux 下 Git 的安装&#xff1a;ubuntu 3.1 基本命令 3.2 示例&#xff1a; 一、简述Git Git &#xff1a;版本控制器&#xff0c;记录每次的修改以及版本迭代的一个管…

OpenEuler 安装mysql

下载安装包 建议直接使用在openEuler官方编译移植过的mysql-5.7.21系列软件包 参考&#xff1a;操作系统迁移实战之在openEuler上部署MySQL数据库 | 数据库迁移方案 | openEuler社区官网 MySQL 5.7.21 移植指南&#xff08;openEuler 20.03 LTS SP1&#xff09; | 数据库移植…

java Spring Boot将不同配置拆分入不同文件管理

关于java多环境开发 最后还有一个小点 我们一般会将不同的配置 放在不同的配置文件中 好处肯定就在于 想换的时候非常方便 那么 我们直接看代码 我们将项目中的 application.yml 更改代码如下 spring:profiles:active: dev这里 意思是 我们选择了dev 环境 然后创建一个文件 …

进行Stable Diffusion的ai训练怎么选择显卡?

Stable Diffusion主要用于从文本生成图像&#xff0c;是人工智能技术在内容创作行业中不断发展的应用。要在本地计算机上运行Stable Diffusion&#xff0c;您需要一个强大的 GPU 来满足其繁重的要求。强大的 GPU 可以让您更快地生成图像&#xff0c;而具有大量 VRAM 的更强大的…

如何使用CSS实现一个响应式轮播图?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 使用CSS实现响应式轮播图的示例⭐ HTML 结构⭐ CSS 样式 (styles.css)⭐ JavaScript 代码 (script.js)⭐ 实现说明⭐ 写在最后 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带…

前端进阶Html+css10----定位的参照对象(高频面试题)

1.relative的参照对象 1&#xff09;元素按照标准流进行排布&#xff1b; 2&#xff09;定位参照对象是元素自己原来的位置&#xff0c;可以通过left、right、top、bottom来进行位置调整&#xff1b; 2.absolute&#xff08;子绝父相&#xff09; 1&#xff09;元素脱离标准流…

SpringBoot +Vue3 简单的前后端交互

前端&#xff1a;Vue3 创建项目&#xff1a; npm create vuelatest > cd <your-project-name> > npm install > npm run dev 项目结构图如下&#xff1a; 1、查看入口文件内容&#xff1a;main.js 代码如下&#xff1a; import ./assets/main.css impor…

AWS 提示证书签名过期无法自动更新

如果域名没有通过验证的话&#xff0c;证书的过去是没有办法自动更新的。 验证的方式也非常简单&#xff0c;通过下面的配置&#xff0c;把 CNAME添加到你的域名上面&#xff0c;AWS 就可会自动完成验证了。 当添加完成后&#xff0c;AWS 验证需要的时间大致在 30 分钟到 1 个…