前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >嵌入式:Load/Store之单寄存器的存取指令

嵌入式:Load/Store之单寄存器的存取指令

作者头像
timerring
发布于 2022-12-22 00:35:00
发布于 2022-12-22 00:35:00
82600
代码可运行
举报
文章被收录于专栏:TechBlogTechBlog
运行总次数:0
代码可运行

文章目录

ARM处理器是Load/Store型的,即它对数据的操作是通过将数据从存储器加载到片内寄存器中进行处理,处理完成后的结果经过寄存器存回到存储器中,以加快对片外存储器进行数据处理的速度。

ARM的数据存取指令Load/Store是唯一用于寄存器和存储器之间进行数据传送的指令。

在ARM系统中I/O操作是通过存储器映射进行寻址的,对I/O设备的操作可以和对存储器的操作一样,因此,也是使用Load/Store指令完成。

Load/Store指令分类

ARM指令集中有三种基本的数据存取指令:

  • 单寄存器的存取指令(LDR,STR):提供寄存器和存储器之间最灵活的单数据项传送方式,传送的数据可以是8位字节、16位半字或32位字。
  • 多寄存器存取指令(LDM,STM):可有效地用于大批数据的传送。一般这些指令用于进程的进入和退出,保存和恢复工作寄存器以及拷贝存储器中一块数据。
  • 单寄存器交换指令(SWP):用于寄存器和存储器中的数据交换。在一个指令中完成存取操作。该指令常用来完成信号量操作,而信号量是一种解决进程同步和互斥问题的机制。
单寄存器的存取指令

单寄存器存取指令是ARM在寄存器和存储器间传送单个字节和字的最灵活方式。根据传送数据的类型不同,单个寄存器存取指令又可以分为以下两类:

  • 单字和无符号字节的数据传送指令
  • 半字和有符号字节的数据传送指令
1、单字和无符号字节的数据传送指令

这一类数据传送指令的编码格式如下:

指令说明

基址寄存器加上或减去一个无符号立即数或者 寄存器偏移量构成存储器访问地址。 当从存储器读取一个无符号字节数据时,需要将它用0扩展到32位,然后放置到目的寄存器中。 当从一个寄存器向存储器写一个字节的数据时,写的是寄存器的低8位。 前变址的寻址模式使用计算出的地址作为存储器地址进行数据存取操作,然后,当要求回写(W=1)(即自动变址方式),将基址寄存器更新为计算出的地址值。 后变址的寻址模式用未修改的基址寄存器来传送数据,然后将基址寄存器更新为计算出的地址,而不管W位如何。

指令汇编格式

前变址格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   LDR|STR {<cond>} {B} Rd, [Rn, <offset>] {!}

​ 其中B表示是按字节传送,缺省时按字传送,offset可能是±12位立即数,或者±Rm{},这里shift包括移位方式和移位位数,移位位数只能是5位立即数,而不能再来自于寄存器Rs。根据有无{!}选择是否回写(自动变址)。 后变址格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   LDR|STR {<cond>} {B} {T} Rd, [Rn]<offset>

​ 其中T标志只能在非用户模式(即特权模式)下使用,作用是选择用户角度的存储器访问。 相对PC的形式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   LDR|STR {<cond>} {B} Rd, LABEL 

举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LDR  R8,[R10]   ;R8[R10]
LDRNE R1,[R5,#960]!  ;(有条件地)R1[R5+960],R5R5+960
STR  R2,[R9,#consta-struc] ;consta-struc是常量表达式,范围为-4095~4095
STRB R0[R3-R8ASR #2]R0[R3-R8÷4],存储R0的最低有效字节,但R3R8的内容不变
LDR  R1,localdata   ;加载一个字,该字位于标号localdata所在地址。(相对PC形式)
LDR  R0,[R1],R2,LSL #2 ;将地址为R1的内存单元数据读取到R0中,然后R1R1+R2*4
LDRB R0[R2,#3] ;将内存单元(R2+3)中的字节数据读到R0中,R0的高24位被设置为0
LDR  R1[R0-R2LSL #2] ;将R0-R2*4地址处的数据读出,保存到R1中,R0R2的值保持不变。
STR  R0,[R7],#-8   ;R0的内容存到R7中地址对应的内存中,R7R7-8

在编程中,常使用相对PC的形式将R0中的一个字存到外设UART,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       LDR    R1UARTADD
       STR     R0[R1]

​ 或者,使用相对PC形式将外设UART数据读到R0 ,如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
       LDR    R1UARTADD
       LDR    R0[R1]

注意:

这里UARTADD标号在附近4KB范围之内。

使用PC作为基址时,得到的传送地址为当前指令地址加8字节;PC不能用作偏移寄存器,也不能用于任何自动变址寻址模式(包括后变址模式)。

把一个字读到PC可以使程序转移到读取的地址,从而实现程序跳转。但应避免将一个字节读取到PC。应尽量避免把PC存储到存储器,因为不同处理器可能会产生不同的结果。

只要不使用自动变址,Rd=Rn是可以的,但在一般情况下,Rd、Rn和Rm应是不同的。

2、半字和有符号字节的数据传送指令

有符号的字节或半字的传送用“符号位”扩展到32位。无符号半字的传送用0扩展到32位。这类数据传送的二进制编码如下:

立即数偏移量只能8位之内。 寄存器偏移量不可移位得到。 S、H用于定义所传送的数据类型。

S

H

数据类型

1

0

有符号字节

0

1

无符号半字

1

1

有符号半字

指令汇编格式

这一类数据传送指令的汇编格式如下:

前变址格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     LDR|STR{ <cond>} H|SH|SB  Rd,  [Rn, <offest>]{!}

后变址格式

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
     LDR|STR {<cond>} H|SH|SB  Rd,  [Rn]<offest> 

式中是#±<8位立即数>或#±Rm;H|SH|SB选择传送数据类型;其它部分的汇编器格式与传送字和无符号字节相同。所有半字传送应使用半字对齐的地址。

举例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LDREQSH  R11,[R6];(有条件地) R11[R6],加载16位半字,有符号扩展到32LDRH R1,[R0,#20]!R1[R0+20],加载16位半字,0扩展到32STRH  R4,[R3R2] ;R4[R3+R2],存储最低的有效半字到R3+R2
LDRSB R0const ;加载位于标号const地址的字节,有符号扩展
LDRH  R6[R2],#2 ;R2地址上的半字数据读出到R6,高16位用0扩展,R2=R2+2
LDRSH  R1,[R9];R9地址上的半字数据读取到R1中,高16位用符号位扩展
STRNEH  R0[R2,#960] (有条件地)将R0的内容送到(R2+960)的内存中,R2=R2+960

参考文献:

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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-12-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
CVPR2021 分割之“Boundary IoU”,衡量物体边界分割质量的新度量
源码:https://github.com/bowenc0221/boundary-iou-api
CV君
2021/08/06
9370
“先粗后精”的实例分割,BPR:使用Crop-then-Refine的性能提高方法
题目:Look Closer to Segment Better:Boundary Patch Refinement for Instance Segmentation
CV君
2021/08/05
1.2K0
“先粗后精”的实例分割,BPR:使用Crop-then-Refine的性能提高方法
论文阅读理解 - Fully Convolutional Instance-aware Semantic Segmentation
主要基于: - FCNs for Semantic Segmentation 基于FCN的语义分割. 传统FCNs卷积具有平移不变性, 但实例分割需要平移可变. - instance mask proposal 实例 mask 候选
AIHGF
2019/02/18
7790
论文阅读理解 - Fully Convolutional Instance-aware Semantic Segmentation
图像分割【论文解读】快速图像分割的SuperBPD方法 CVPR-2020
提出的super-BPD 与 之前方法MCG相比,精度相当或者更优,而却可以达到 25fps,MCG仅 0.07fps。速度更快且有更好的迁移性,可应用于未见的场景。
马上科普尚尚
2020/06/16
9770
图像分割【论文解读】快速图像分割的SuperBPD方法 CVPR-2020
一文读懂目标检测中的anchor free 和anchor base
作者丨龙场悟道 来源丨知乎https://zhuanlan.zhihu.com/p/273646465 编辑丨AiCharm
AiCharm
2023/06/07
9.2K0
一文读懂目标检测中的anchor free 和anchor base
FCOS进化版PolaMask,实例分割新思路
做过目标检测的应该对FCOS不陌生,是anchor-free的杰出代表。其结构简单、性能优越,在业内受到广泛的关注。本文介绍的PolarMask正式借鉴FCOS的思路来进行实例分割,可以看作FCOS的进化版本,很有借鉴意义。
lujohn3li
2020/12/14
7100
FCOS进化版PolaMask,实例分割新思路
NWD-Based Model | 小目标检测新范式,抛弃IoU-Based暴力涨点(登顶SOTA)
小目标在许多现实世界的应用中无处不在,包括驾驶辅助、大规模监控和海上救援。尽管由于深度神经网络的发展,目标检测取得了显著的进展,但大多数都是用于检测正常大小的目标。而小目标(AI-TOD数据集中小于 像素)往往表现出极其有限的外观信息,增加了识别特征的学习难度,导致小目标检测失败的案例非常多。
集智书童公众号
2021/11/23
1.8K0
NWD-Based Model | 小目标检测新范式,抛弃IoU-Based暴力涨点(登顶SOTA)
Unified-IoU:用于高质量对象检测
https://arxiv.org/pdf/2408.06636 目标检测是计算机视觉领域的重要部分,而目标检测的效果直接由预测框的回归精度决定。作为模型训练的关键,交并比(IoU,Intersection over Union)极大地展示了当前预测框与真实框之间的差异。后续研究人员不断在IoU中加入更多考量因素,如中心距离、纵横比等。然而,仅仅细化几何差异存在上限;新的考量指标与IoU本身之间存在潜在联系,两者之间的直接加减可能导致“过度考量”的问题。基于此,我们提出了一种新的IoU损失函数,称为统一IoU(UIoU),它更关注于不同质量预测框之间的权重分配。具体来说,该损失函数以一种新颖的方式动态地将模型的注意力从低质量预测框转移到高质量预测框,以增强模型在高精度或密集型数据集上的检测性能,并在训练速度上实现平衡。我们的方法在多个数据集上取得了更好的性能,尤其是在高IoU阈值下,UIoU相比其他改进的IoU损失具有更显著的改进效果。我们的代码已公开可用,地址为:https://github.com/lxjdrifter/UIOU_files。
AI浩
2024/10/22
1650
Unified-IoU:用于高质量对象检测
CVPR2019——MonoDepth2论文阅读
逐像素的真实尺度深度数据的大量获取,是具有挑战性的任务。为了克服这个限制,自监督学习已经成为一个有希望的替代训练模型,用来执行单目深度估计。本文中,我们提出了一系列的改进手段,用来提升自监督深度学习深度估计方法的精度。
zjkkk
2020/05/22
4.8K0
CVPR2019——MonoDepth2论文阅读
图像分割2020总结:结构,损失函数,数据集和框架
本文总结了2020图像分割的相关内容,包括架构,损失函数,数据集,框架的整理,内容非常详细完整,适合入门者阅读上手。
深度学习技术前沿公众号博主
2020/12/01
9230
图像分割2020总结:结构,损失函数,数据集和框架
一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)
作者灯会为21届中部985研究生,凭借自己整理的面经,去年在腾讯优图暑期实习,七月份将入职百度cv算法工程师。在去年灰飞烟灭的算法求职季中,经过30+场不同公司以及不同部门的面试中积累出了CV总复习系列,此为目标检测篇。 >>加入极市CV技术交流群,走在计算机视觉的最前沿
AIWalker
2021/07/05
9780
一位算法工程师从30+场秋招面试中总结出的超强面经——目标检测篇(含答案)
CVPR2019目标检测方法进展综述
四期飞跃计划还剩最后一个名额,联系小编,获取你的专属算法工程师学习计划(联系小编SIGAI_NO2)
SIGAI学习与实践平台
2019/03/19
5K0
CVPR2019目标检测方法进展综述
CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?
在目标检测中,人们更关注的往往是模型结构,而在训练过程中投入的注意力相对较少。但是训练过程对于一个目标检测器来说同样关键。在本工作中,作者仔细回顾了检测器的标准训练过程,发现在训练过程中,检测性能往往受到不平衡的限制。这种不平衡往往包括三个方面:sample level(样本层面),feature level(特征层面),objective level(训练目标层面),为了上述三个不平衡对检测性能的影响,本文提出了Libra R-CNN,一个针对目标检测平衡学习的简单有效框架。该框架集成了三个组件:IoU-balanced sampling,balanced feature pyramid,balanced L1 loss,分别对应解决上述的三个不平衡。基于这些改造,Libra R-CNN在AP上的提升有两个多点,可以说是简洁高效。
AI科技大本营
2019/10/14
1.7K0
CVPR 2019论文阅读:Libra R-CNN如何解决不平衡对检测性能的影响?
YoloV8改进策略:IoU改进|Unified-IoU用于高质量对象检测
Unified-Unified-IoU(UIoU)是一种新的边界框回归损失函数,旨在改进目标检测任务中的预测框质量,特别是在高IoU阈值和IoU(UIoU)是一种新的边界框回归损失函数,旨在改进目标检测任务中的预测框质量,特别是在高IoU阈值和密集型数据集上表现出色。密集型数据集上表现出色。以下是Unified-IoU的特点、优点及其如何改进目标检测模型的详细介绍:
AI浩
2024/10/22
4160
YoloV8改进策略:IoU改进|Unified-IoU用于高质量对象检测
【综述笔记】一些弱监督语义分割论文
这里的弱监督信息为image-level的类别信息,即没有像素级的语义分割标签,而仅有图像级的类别标签,即知道每张图里有哪些类别。
公众号机器学习与AI生成创作
2020/04/28
1.8K0
目标检测算法之CVPR2019 GIoU Loss
上周介绍了Gaussian YOLOv3以及GHM Loss,这周我们来看看斯坦福大学和澳大利亚阿德莱德大学在CVPR2019发表的《Generalized Intersection over Union: A Metric and A Loss for Bounding Box Regression》,论文的核心就是提出了一个新的Loss,叫做GIOU Loss,论文原文地址见附录。
BBuf
2019/12/24
9470
论文阅读学习 - Mask R-CNN
Instance Segmentation —— 正确的检测图片中的所有 objects,并精确地分割每一个 instance.
AIHGF
2019/02/18
7840
论文阅读学习 - Mask R-CNN
α-IoU | 再助YOLOv5登上巅峰,造就IoU Loss大一统
Bounding box 回归通过预测目标的bbox来定位图像/视频中的目标,这是目标检测、定位和跟踪的基础。例如,最高级的目标检测器通常由一个bbox回归分支和一个分类分支组成,其中bbox回归分支生成用于定位对象进行分类的bbox。在这项工作中,作者探索了更有效的损失函数。
集智书童公众号
2021/11/05
2.8K0
α-IoU | 再助YOLOv5登上巅峰,造就IoU Loss大一统
实例分割最新最全面综述:从Mask R-CNN到BlendMask
实例分割(Instance Segmentation)是视觉经典四个任务中相对最难的一个,它既具备语义分割(Semantic Segmentation)的特点,需要做到像素层面上的分类,也具备目标检测(Object Detection)的一部分特点,即需要定位出不同实例,即使它们是同一种类。因此,实例分割的研究长期以来都有着两条线,分别是自下而上的基于语义分割的方法和自上而下的基于检测的方法,这两种方法都属于两阶段的方法,下面将分别简单介绍。
BBuf
2020/03/04
13K0
实例分割最新最全面综述:从Mask R-CNN到BlendMask
图像分割必备知识点 | Dice损失 理论+代码
在很多关于医学图像分割的竞赛、论文和项目中,发现 Dice 系数(Dice coefficient) 损失函数出现的频率较多,这里整理一下。使用图像分割,绕不开Dice损失,这个就好比在目标检测中绕不开IoU一样。
机器学习炼丹术
2020/12/02
4.7K0
推荐阅读
相关推荐
CVPR2021 分割之“Boundary IoU”,衡量物体边界分割质量的新度量
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验