嵌入式:ARM多寄存器存取指令详解

news2024/11/17 23:50:12

文章目录

    • 多寄存器存取指令的二进制编码
    • 指令汇编格式
    • 举例
    • 注意事项

多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。如:可将寄存器列表保存到堆栈,也可将寄存器列表从堆栈中恢复。
这种指令有两个特殊用法:
(1)允许操作系统加载或存储用户模式寄存器来保护或恢复用户处理状态。
(2)作为异常处理返回的一部分,完成从SPSR中恢复CPSR。
这种指令与单寄存器存取指令相比,多寄存器数据存取可用的寻址模式更加有限。

多寄存器存取指令的二进制编码

二进制编码的低16位对应R15~R0的寄存器列表。

存储器地址可以通过基址寄存器Rn和寻址模式的定义来实现,在传送一个字前或后基址将增加或减少。如果W=1,则支持自动变址,则当指令完成时,基址寄存器将增加或减少所传送的字节数。

S位是该指令的特殊用法。如果PC在读取多寄存器的寄存器列表中,且S位置位,则当前模式的SPSR将被拷贝到CPSR。但这种指令不能用在用户模式下,因为用户模式下没有SPSR。如果PC不在寄存器列表中且S位置位,在非用户模式下,执行读取和存入多寄存器指令将传送用户模式下寄存器(虽然使用的是当前模式的基址寄存器),这使得操作系统可以保存和恢复用户处理状态。

指令汇编格式

  LDM/STM{<cond>}<add mode>  Rn{!},  <registers> 

这里<add mode>指定一种寻址模式,表明地址的变化是操作前还是执行后,是在基址基础上增加还是减少。
“!”表示是自动变址(W=1)。

<registers>是寄存器列表,用大括号将寄存器组括起来。列表中的寄存器的次序是不重要的,它不影响存取的次序和指令执行后寄存器的值,因为这里有个约定:编号低的寄存器在存储数据或者加载数据时,对应于存储器的低地址。也就是说,编号最低的寄存器保存到最低地址,或从最低地址取数。其他依次递增。

举例

LDMIA  R1,{R0,R2,R5};R0←mem32[R1]
                          ;R2←mem32[R1+4]
                          ;R5←mem32[R1+8]
STMDB R1!,{R3-R6,R11,R12} ;R12→mem32[R1-4] 
                                ;R11→mem32[R1-8]
                                ;R6→mem32[R1-12]
                                ;R5→mem32[R1-16]
                                ;R4→mem32[R1-20]
                                ;R3→mem32[R1-24]
                                ;R1 ← R1-24
STMED  SP!,{R0-R7,LR}  ;现场保存,将R0~R7、LR入栈
                              ;R14→mem32[R13]
                              ;R7→mem32[R13-4]
                              ;……
                              ;R0→mem32[R13-32]
                              ;R13 ← R13-36

注意事项

  • 如果在保存多寄存器指令的寄存器列表中指定了PC ,则保存的值与体系结构实现方式有关,因此,一般应避免在STM指令中指定PC。
  • 如果在读取或存入多寄存器指令的传送列表中包含基址寄存器,则在该指令中不能使用回写模式,因为这样做的结果是不可预测的。
  • 如果基址寄存器包含的地址不是字对齐的,则忽略最低2位。一些ARM系统则可能产生异常。

参考文献:

孟祥莲.嵌入式系统原理及应用教程(第2版)[M].北京:清华大学出版社,2017.

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

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

相关文章

李书福旗下亿咖通纳斯达克上市:作价38亿美元 路演PPT曝光

雷递网 雷建平 12月21日亿咖通科技控股&#xff08;简称“ECARX”、“亿咖通科技”&#xff09;今日与特殊目的公司COVA Acquisition Corp.&#xff08;简称“COVA”&#xff09;完成合并&#xff0c;并在美国纳斯达克股票市场&#xff08;Nasdaq Stock Market LLC&#xff09;…

[UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容

[UE5]在多个固定摄像机视角间切换&#xff0c;切换多个摄像机&#xff0c;显示不同摄像机所看内容1.写在前面01.作者碎碎念02.结果演示截图演示视频视频教程源码链接03.实现思路实现思路04.同步的博客CSDN掘金博客园知乎2.需要准备的软件3.步骤大神步骤&#xff1a;详细步骤&am…

再写java探针

大家好&#xff0c;我是烤鸭&#xff1a; 以前写过一篇全链路探针实现的文章&#xff0c;最近同事间搞技术分享&#xff0c;再整理一篇。可惜这两年没有继续搞这方面的技术&#xff0c;算是两年前的拓展篇吧。很多技术只放了图&#xff0c;文字就不写了&#xff0c;可以参考…

笔记本加固态小白怎么设置

​最近有用户说电脑硬盘空间不够用了&#xff0c;于是问笔记本加固态小白怎么设置&#xff0c;打算将系统安装在这上面。但由于原先的系统盘有很多重要的数据&#xff0c;该用户就问到有没有什么办法不需要重装&#xff0c;关于笔记本加固态小白操作方法。 工具/原料&#xff…

Redis集群的三种方式详解(附优缺点及原理区别)

Redis提供了三种集群方式&#xff0c;下面我重点详解Redis三种集群方式的原理及优缺点等区别mikechen 目录 Redis主从复制模式Redis哨兵模式Redis集群模式 Redis主从复制模式 1.Redis主从复制定义 主从模式是三种模式中最简单的&#xff0c;主从模式指的是使用一个Redis实例…

Redis入门及Redis基本数据类型的相关命令

1.1、Redis简介 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker&#xff0c;翻译为: Redis是一个开源的内存中的数据结构存储系统&#xff0c;它可以用作∶数据库、缓存和消息中间件。官网: https:…

2023,AIGC能赚到钱吗?

2022年&#xff0c;AIGC&#xff08;生成式AI&#xff09;是当之无愧的网红。AI作画在各大社交平台刷屏&#xff0c;ChatGPT火爆国内外出尽了风头&#xff0c;依靠AI生成语音和表情、动作的数字人也频频露脸。2022年12月&#xff0c;Science杂志发布了2022年度科学十大突破&…

vue-element-template模板

vue-element-template模板 vue-element-admin是一个非常全面的系统&#xff0c;提供了很多现成的方案&#xff0c;我们可以在写项目的时候过来参考&#xff0c;但是也有缺点&#xff1a;不太好进行二次开发&#xff0c;因为要删减的东西太多了。于是就有另外一个子系统vue-elem…

Linux 安装nginx, 搭建nginx文件服务器

在linux安装nginx web 服务器&#xff0c;安装后再修改配置文件&#xff0c;将该主机作为一个文件服务器&#xff0c;最终效果如下图&#xff1a; 安装nginx 安装依赖包 yum install -y gcc pcre-devel zlib-devel openssl openssl-devel &#xff08;若安装的Redhat7&…

JVM数据结构一览及分析

JVM总体一张图&#xff1a; 整体上来看&#xff1a;类文件从类加载子系统&#xff0c;加载完成之后&#xff0c;主要存放在方法区&#xff08;JRockit和H9没有方法区&#xff0c;这里指的是HotSpot&#xff09;。运行时的数据主要是存放在运行时数据区&#xff0c;代码的解释编…

✿✿✿JavaScript --- 常见样式案例

目录 1.下拉框复选框单选框的事件样式 和 禁止喜欢中文字与鼠标右键 2.点击按钮后样式发生变化 3.表格追随鼠标更换颜色 4.点击更换背景 5.点击不同的选择栏&#xff0c;内容展示在一个板块内 6.排他思想&#xff0c;许多按钮&#xff0c;点击谁谁就有样式 7.按钮全选反…

微机原理接口

目录 接口的基本概念 什么是接口&#xff1f;(背会) 接口电路的功能&#xff1f;&#xff08;背会2019年 &#xff09; 接口电路基本结构 什么是端口 &#xff08;背&#xff09; 接口的控制原理 数据的传送方式&#xff08;知道并行串行的特点就可以&#xff09; 并行传…

校园二手交易WEB

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 方达影院系统总共分两个模块&#xff0c;用户模块和管理员模块&#xff0c; 用户模块&#xff1a;登录和注册功能&#…

【Pytorch_Geometric】(GCN)基本使用:数据集与邻接矩阵格式,图形(点)的可视化展示

声明:仅学习使用~ 目录 过程记录1、Graph Neural Networks2、数据集描述3、edge_index3、模型定义与训练方法4、输出特征展示5、训练模型(半监督,semi-supervised)过程记录 1、Graph Neural Networks 致力于解决不规则数据结构(图像和文本相对格式都固定,但是社交网络与…

陪诊系统app开发,一个应用可切换不同身份

随着人口老龄化&#xff0c;年轻人工作压力大&#xff0c;经常加班&#xff0c;或在外地定居&#xff0c;出差等原因&#xff0c;没时间陪长辈。对于一些有慢性疾病的困扰&#xff0c;需要长期陪伴而延伸出来的一个新型行业-陪诊。陪诊职业出现就被人认可是因为人们对这个职业有…

什么是多模态深度学习?有哪些应用场景?

深度多模态学习能够更全面地理解数据&#xff0c;在准确性和效率上均有大幅提升。但首先&#xff0c;什么是多模态深度学习&#xff1f;它有哪些应用场景&#xff1f;本文将从定义、应用与前景三个角度来回答这两个问题。随着深度神经网络的发展&#xff0c;深度学习也逐渐向多…

基于事件触发的二阶多智能体领导跟随一致性

【无限嚣张&#xff08;菜菜&#xff09;】&#xff1a;hello您好&#xff0c;我是菜菜&#xff0c;很高兴您能来访我的博客&#xff0c;我是一名爱好编程学习研究的菜菜&#xff0c;每天分享自己的学习&#xff0c;想法&#xff0c;博客来源与自己的学习项目以及编程中遇到问题…

基于java+springboot的人事招聘信息网站-计算机毕业设计

运行环境 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven 项目介绍 在这个计算…

教你一招,解决头疼的DCOM配置问题

一、背景 OPC通信技术是工业通信领域中一套广为流行的方案&#xff0c;能够帮助大量的使用不同通信协议的下层现场设备数据与上位机应用程序进行交互。实现OPC通信需要基于Winodows上的COM/DCOM技术&#xff0c;只有在服务器和客户端都进行DCOM配置&#xff0c;开放相应的权限…

【矩阵论】6. 范数理论——非负/正矩阵

6.5 非负/正矩阵 6.5.1 定义 a. 非负/正矩阵定义 一个实矩阵 A(aij)∈RmnA(a_{ij})\in R^{m\times n}A(aij​)∈Rmn 若对每一 iii 和 jjj &#xff0c;aij≥0a_{ij}\ge 0aij​≥0 &#xff0c;则称A是非负矩阵&#xff0c;A≥0A\ge 0A≥0 若对每一 iii 和 jjj &#xff0c;…