当前位置: 首页 > news >正文

RISCV 6 RISC-V加载存储指令

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 位数值存储到内存中。

相关文章:

RISCV 6 RISC-V加载存储指令

RISCV 6 RISC-V加载存储指令 1 RV32I Load and Store Instructions1.1 LOAD instructions1.1.1 加载指令的指令格式1.1.2 加载指令在使用时需要注意的点 1.2 STORE instructions1.2.1 存储指令的指令格式1.2.2 存储指令在使用时需要注意的点 2 RV64 Load and Store Instruction…...

木叶飞舞之【机器人ROS2】篇章_第二节、turtlebot3安装

没有真实小车的情况下,利用gazebo的仿真,操作小乌龟来学习ros2。废话不多说,直接上命令。 Install Gazebo sudo apt install ros-humble-gazebo-*Install Cartographer 假如前一节未安装源码版本的cartographer,那就安装apt版本…...

【论文阅读】自动驾驶安全的研究现状与挑战

文章目录 摘要1.引言1.1.自动驾驶安全1.2.攻击面1.3.内容和路线图 2.自动驾驶技术2.1.组成2.2.技术 3.传感器安全3.1.照相机3.2.GNSS(全球导航系统)/IMU(惯性测量单元)3.3.超声波传感器3.4.毫米波雷达3.5.激光雷达3.6.多传感器交叉…...

标签打印小工具 选择图片打印,按实际尺寸打印。可旋转图片

您可以尝试使用以下标签打印工具: 柯尼卡美能达标签打印机:功能齐全、易于使用的打印机,支持各种标签尺寸和类型。 赛门铁克标签打印机:高速打印、可靠性强的打印机,支持多种操作系统和软件。 齐柏林标签打印机&…...

什么是深拷贝和浅拷贝?

面试回答 在计算机内存中,每个对象都有一个地址,这个地址指向对象在内存中存储的位置。当我们使用变量引用一个对象时,实际上是将该对象的地址赋值给变量。因此,如果我们将一个对象复制到另一个变量中国,实际上是将对象…...

安装docker服务及docker基本操作

一、docker安装(yum安装) 基于centos7 1.添加docker-ce 源信息 安装依赖包(yum-utils 提供了 yum-config-manager ,并且 device mapper 存储驱动程序需要device-mapper-persistent-data 和 lvm2) yum install yum-…...

【项目经验】:项目中下拉框数据太多造成页面卡顿(二)

一.项目需求 下拉框下拉列表数据是由后端返回的,而且他会变化,所以数据不是写死的而且数据量大。上一篇博客http://t.csdn.cn/sSNTa我们是用的数据懒加载的方式,这次我们使用远程搜索的方式解决这个问题。 二.用到的组件方法介绍 filterabl…...

Prompt本质解密及Evaluation实战(一)

一、基于evaluation的prompt使用解析 基于大模型的应用评估与传统应用程序的评估不太一样,特别是基于GPT系列或者生成式语言模型,因为模型生成的内容与传统意义上所说的内容或者标签不太一样。 以下是借用了ChatGPT官方的evaluation指南提出的对结果的具…...

linux 在系统已有python2版本下安装python3

方法一:使用包管理器安装 更新包索引: sudo apt update 安装Python3: sudo apt install python3 安装Python3的pip(如果你需要): sudo apt install python3-pip 验证Python 2和3的安装: pyt…...

IO多路转接 ——— select、poll、epoll

select初识 select是系统提供的一个多路转接接口。 select系统调用可以让我们的程序同时监视多个文件描述符的上的事件是否就绪。 select的核心工作就是等,当监视的多个文件描述符中有一个或多个事件就绪时,select才会成功返回并将对应文件描述符的就绪…...

FPGA原理与结构——FIFO IP核原理学习

一、FIFO概述 1、FIFO的定义 FIFO是英文First-In-First-Out的缩写,是一种先入先出的数据缓冲器,与一般的存储器的区别在于没有地址线, 使用起来简单,缺点是只能顺序读写数据,其数据地址由内部读写指针自动加1完成&…...

【Linux操作系统】Linux中的信号回收:管理子进程的关键步骤

在Linux中,我们可以通过捕获SIGCHLD信号来实现对子进程的回收。当一个子进程终止时,内核会向其父进程发送SIGCHLD信号。父进程可以通过注册信号处理函数,并在处理函数中调用wait()或waitpid()函数来回收已终止的子进程。 文章目录 借助信号捕…...

Spark大数据分析与实战笔记(第一章 Scala语言基础-1)

文章目录 章节概要1.1 初识Scala1.1.1 Scala的概述1.1.2 Scala的下载安装1.1.3 在IDEA开发工具中下载安装Scala插件1.1.4 开发第一个Scala程序 章节概要 Spark是专为大规模数据处理而设计的快速通用的计算引擎,它是由Scala语言开发实现的,关于大数据技术…...

R语言03-R语言中的矩阵

概念 在R语言中,矩阵(Matrix)是一个二维的数据结构,由行和列组成,其中所有元素必须具有相同的数据类型。矩阵可以用于存储数值型数据,常用于线性代数运算、统计计算以及数据处理等领域。 代码示例 # 创建…...

“深入理解JVM:探索Java虚拟机的工作原理与优化技巧“

标题:深入理解JVM:探索Java虚拟机的工作原理与优化技巧 摘要:本文将深入探索Java虚拟机(JVM)的工作原理及优化技巧。我们将介绍JVM的架构和组成部分,解释JVM是如何将Java字节码转换为可执行代码的。我们还…...

SQL注入原理

SQL、SQL注入是什么? 结构化查询语言(Structured Query Language,SQL),是一种特殊的编程语言,用于数据库的标准数据查询。1986 年10 月美国国家标准协会对SQL 进行了规范后,以此作为关系型数据库系统的标准语言。1987 …...

PIL.Image和base64,格式互转

将PIL.Image转base64 ##PIL转base64 import base64 from io import BytesIOdef pil_base64(image):img_buffer BytesIO()image.save(img_buffer, formatJPEG)byte_data img_buffer.getvalue()base64_str base64.b64encode(byte_data)return base64_str将base64转PIL.Image …...

vue父子组件传值(v-model)

父组件使用v-model传值给子组件 <template><!-- 按钮 --> <el-button click"addMenu(new)">打开弹框</el-button><!-- 自定义组件,下面这两种写法都可以&#x1f447; --> <MediaDialog :name"name" v-model:visible&qu…...

Java接口详解

接口 接口的概念 在现实生活中&#xff0c;接口的例子比比皆是&#xff0c;比如&#xff1a;笔记本上的USB口&#xff0c;电源插座等。 电脑的USB口上&#xff0c;可以插&#xff1a;U盘&#xff0c;鼠标&#xff0c;键盘等所有符合USB协议的设备 电源插座插孔上&#xff0c;…...

Windows共享文件夹,用户密码访问

Windows共享文件夹&#xff0c;用户密码访问 小白教程&#xff0c;一看就会&#xff0c;一做就成。 1.先创建一个用户 计算机右键----管理----本地用户和组----点击用户进去---右键新建用户 这里以kk为例 2.找到你想共享的文件夹 3.共享-想共享的文件夹---右键---属性---共…...

Mac更新node

查看本机node版本 node -v 删除node相关内存 sudo npm cache clean -f 安装n sudo npm install n -g 更新node版本 sudo n stable // 把当前系统的 Node 更新成最新的 “稳定版本” sudo n lts // 长期支持版 sudo n latest // 最新版 sudo n 18.17.1 // 指定安装版本 可以顺便…...

2023国赛数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…...

Wireshark数据抓包分析之ARP协议

一、实验目的&#xff1a; 通过wireshark的数据抓包了解这个ARP协议的具体内容 二、预备知识: 1.Address Resolution Protocol协议&#xff0c;就是通过目标IP的值&#xff0c;获取到目标的mac地址的一个协议 2.ARP协议的详细工作过程&#xff0c;下面描述得非常清晰&#xff…...

6个比较火的AI绘画生成工具

随着人工智能技术的发展&#xff0c;市场上出现了越来越多的人工智能图像生成工具。这些人工智能图像生成工具可以自动创建惊人的图像、艺术作品和设计&#xff0c;以帮助设计师和创意人员更快地实现他们的创造性想法。在本文中&#xff0c;我们将推荐7种最近流行的人工智能图像…...

静力水准仪说明介绍

静力水准仪是测量两点间或多点间相对高程变化的仪器。由储液器、高精度芯体和特别定制电路模块、保护罩等部件组成。沉降系统由多个同型号传感器组成&#xff0c;储液罐之间由通气管和通液管相连通&#xff0c;基准点置于一个稳定的水平基点&#xff0c;当测点相对于基准点发生…...

HAProxy 高级功能与配置

HAProxy 高级功能与配置 配置和验证的环境看这篇文章:HAProxy 各种调度算法介绍 一.基于 cookie 的会话保持 使用cookie关键字来配置后端服务器基于 cookie 的会话持久连接。 配置格式 cookie <name> [ rewrite | insert | prefix ] [ indirect ] [ nocache ][ post…...

cuda编程002—流

没有使用同步的情况&#xff1a; #include <stdio.h> #include <cuda_runtime.h>__global__ void test_kernel(){printf("Message from Device.\n"); } void test(){test_kernel<<<1, 1>>>(); } #include <cuda_runtime.h> #i…...

2023年国赛 高教社杯数学建模思路 - 案例:粒子群算法

文章目录 1 什么是粒子群算法&#xff1f;2 举个例子3 还是一个例子算法流程算法实现建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 什么是粒子群算法&#xff1f; 粒子群算法&#xff08;Pa…...

【C#学习笔记】数据类中常用委托及接口——以List<T>为例

文章目录 List\<T\>/LinkedList \<T\>为什么是神&#xff1f;&#xff08;泛型为什么是神&#xff09;一些常见&#xff0c;通用的委托和接口ComparisonEnumerator List<T>/LinkedList <T>为什么是神&#xff1f;&#xff08;泛型为什么是神&#xff0…...

idea的断点调试

1、行断点 首先在代码的最左侧点击会显示红色的圆圈 第二步在main方法中右键选中debug run进行运行 会出现下面图片的情况 出现上图之后&#xff0c;点击console 下一步 这个时候就可以看到调试的结果了 6、方法调用栈&#xff1a;这里显示了该线程调试所经过的所有方法&…...

网站建设公司比较/seo系统培训班

第五章 泛型 23、 请不要在新代码中使用原生态类型 声明中具有一个或者多个类型参数的类或者接口&#xff0c;就是泛型类或者泛型接口。泛型类和接口统称为泛型。 每种泛型可以定义一种参数化的类型&#xff0c;格式为&#xff1a;先是类或者接口的名称&#xff0c;接…...

wordpress divi 教程/在seo优化中

自己写的程序CPU占用率过高&#xff0c;无法锁定原因时&#xff0c;可以用VS2013帮忙检测 1. 打开VS 性能分析 2. 启动项目进行检测 3. 选择CPU采样 完成 4. 分析一段时间 然后停止分析 5. 选择显示代码 6. 阿萨德 可以查看具体函数的占用比了 原文:http://blog.csdn.n…...

程序员前端和后端的区别/青岛seo优化公司

《[C#] int与System.Int32有什么区别》 最近园里的TeamOne写了一篇《[C#] int与System.Int32有什么区别》&#xff0c;发现里面有不少精彩的评论&#xff0c;所以忍不住想这篇文章总结一下:> 本文的主要参考资料&#xff1a; 1.《理解C#中的System.Int32和int&#xff1a…...

投注类网站怎么做自动软件/2024年新冠疫情最新消息今天

风格化Stylize阈值 Threshold与 Ps 中的阈值调整命令一致&#xff0c;将灰度或彩色图像转换纯黑与纯白效果。画笔描边 Brush Strokes与 Ps 滤镜库中的画笔描边中的喷溅效果基本一致&#xff0c;对图像应用粗糙的绘画外观效果。卡通 Cartoon模拟实色填充或描线的绘画。半径越大&…...

公司网站背景图片/推广方案应该有哪些方面

当今时代&#xff0c;在全球竞争激烈的大市场中&#xff0c;无论是流程式还是离散式的制造业&#xff0c;无论是单件生产、多品种小批量生产、少品种重复生产还是标准产品大量生产的制造&#xff1b;制造业内部管理都可能遇到以下一些问题&#xff1a;如企业可能拥有卓越的销售…...

电子商务网站建设开发文档/搜索引擎优化哪些方面

这道题是让求派出机器人的最少数量&#xff0c;乍一看以为是简单的求最小路径覆盖&#xff0c;后来发现错了&#xff0c;因为有的点可以走多次&#xff0c;而二分中每个点只能走一次&#xff0c;所以要先用floyd进行传递闭包&#xff0c;然后用二分 #include<stdio.h> #i…...