RISC-V指令集之RV32A

RISC-V指令集之RV32A

  • 1 原子操作
  • 2 RV32A的指令

本文属于《 RISC-V指令集基础系列教程》之一,欢迎查看其它文章。

1 原子操作

RV32A是RISC-V规范定义的用于原子操作的指令集。
RV32A 用于同步的原子操作有两种:

  • 原子内存操作(atomic memory operation,AMO)
    AMO 指令对内存中的操作数执行一次原子操作,并将原内存值写入目的寄存器。“原子” 表示内存读写之间既不会发生中断,也不会被其他处理器修改内存值。

  • 预订取数/条件存数(load reserved / store conditional)
    预订取数/条件存数为两者之间的操作提供原子性。预订取数读出一个内存字,写入目的寄存器,并记录该内存字的预订信息。条件存数往源寄存器中的地址写入一个字,前提是该目标地址被预订。若写入成功,则向目的寄存器写入0;否则向其写入一个非0 的错误码。

为何RV32A 要提供两种原子操作?答案是有两种区别很大的使用场景。
简洁编程语言开发者假定底层的体系结构提供原子的比较-交换操作:比较某寄存器值与用另一寄存器寻址的内存值,若相等,则将第3
个寄存器的值与内存值交换。这是一种通用的同步原语,基于它能实现其他任意单字同步操作。

2 RV32A的指令

在这里插入图片描述
RV32A具备的所有指令,如下所示:
在这里插入图片描述
RV32A 是可选的,一个不支持它的RISC-V 处理器会更简单。然而,正如爱因斯坦所言,一切事物都应该尽量简单,但不能过分简单。RV32A 正是如此,许多场景都离不开它。

本文中的这些指令较多,具体指令详细含义,见RISC-V指令手册,不再赘述。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++ Qt 网络连接

1、基础概念 1.1 TCP/UDP TCP 是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、 数据无失序、数据无重复到达的通信) 适用情况: 1.SN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议 2、适合于对传输质量要求较…

JAVA学习笔记12

1.键盘输入语句 1.1 介绍 ​ *在编程中,需要接收用户输入的数据,就可以使用键盘输入语句来获取。 1.2 步骤 ​ 1.导入该类的所在包,java.util.* ​ 2.创建该类对象(声明变量) ​ 3.调用里面的功能 import java.…

Android之UI Automator框架源码分析(第九篇:UiDevice获取UiAutomation对象的过程分析)

前言 通过UiDevice的构造方法,UiDevice对象持有的几个对象一部分是在构造方法中创建的(初始化),它持有的每个对象都是分析的重点 备注:当前对象持有的对象,它的位置一般在实例变量创建时或者构造方法中&…

2024年老薛主机开工大吉活动:云服务器5折起,续费同价!

2024年老薛主机开工大吉活动开始了,香港/美国云服务器季付7折,半年付6折,年付5折,续费同价! 活动地址: 点此直达老薛主机官网 活动详情: 老薛主机2024开年促销活动,香港/美国云服…

机器学习:朴素贝叶斯算法(Python)

一、朴素贝叶斯算法的实现 naive_bayes_classifier.py import numpy as np import collections as cc # 集合的计数功能 from scipy.stats import norm # 极大似然估计样本的均值和标准方差 from data_bin_wrapper import DataBinsWrapperclass NaiveBayesClassifier:"…

OpenCV 16 - Qt使用opencv视觉库

1 下载好opencv视觉库 不知道怎么下载和编译opencv视觉库的可以直接使用这个 : opencvcv_3.4.2_qt 2 解压opencv包 3 打开opencv的安装目录 4.打开x86/bin 复制里面所有的dll文件,黏贴到C/windows/syswow64里面 5 新建Qt项目 6 修改pro文件:添加对应的头文件和库文件…

Windows计划任务执行日志和文件输出路径修改

在日常工作中,针对需重复执行的操作,通常都会使用系统的任务计划程序功能; 1、大家可以运行中,执行taskschd.msc来调用任务计划程序对话窗口,也可以在服务器管理的-工具菜单中-选择任务计划程序来调用对话窗口。 2、…

java面向对象高级

一、静态 static读作静态,可以用来修饰成员变量,也能修饰成员方法。我们先来学习static修饰成员变量。 1.1 static修饰成员变量 Java中的成员变量按照有无static修饰分为两种:类变量、实例变量。它们的区别如下图所示: 由于静态…

SQL注入漏洞解析--less-46

我们先看一下46关 他说让我们先输入一个数字作为sort,那我们就先输入数字看一下 当我们分别输入1,2,3可以看到按照字母顺序进行了排序,所以它便是一个使用了order by语句进行排序的查询的一种查询输出方式 当输入时出现报错提示,说…

【软件测试】--功能测试1

一、测试介绍 什么是软件? 控制计算机硬件工作的工具。 什么是软件测试? 使用技术手段验证软件是否满足需求 软件测试的目的? 减少软件缺陷,保证软件质量。 测试主流技能 1、功能测试 2、自动化测试 3、接口测试 4、性能测试 ​…

图解 Electron 进程模型

此前,已经介绍了《如何从 0 开始,创建一个 Electron 的 App》,每个人就有了一个梦开始的地方。如果想实现一个功能丰富的 App,了解一点基础知识,是非常必要的。比如,Electron 的进程模型。 一、简介 Chrome…

数据湖delta lake

Table of Content1. 课程2. 前置技能3. 一、数据湖概念[了解] 3.1. 1.1 企业的数据困扰 3.1.1. 困扰一:互联网的兴起和数据孤岛3.1.2. 困扰二:非结构化数据3.1.3. 困扰三:保留原始数据3.1.4. 补充:什么是结构化? 3.1.4…