ARM指令后缀与常用读取指令

发布者:AngelicWhisper最新更新时间:2017-11-27 来源: eefocus关键字:ARM  指令后缀  读取指令 手机看文章 扫描二维码
随时随地手机看文章

一:指令可选后缀

“S”后缀:指令中使用“S”后缀,指令执行后状态寄存器的条件标志位将被刷新;不使用“S”后缀时,指令执行后状态寄存器的条件标志位不会发生变化。此标志经常用于对条件进行测试,例如:是否溢出,是否进位等;根据这些变化,就可以进行一些判断,是否大于,是否相等,从而可能影响指令执行顺序。

“!”后缀

如果指令地址表达式中不含“!”后缀,则基址寄存器中的地址不会发生变化,指令中含有则变化,变化结果如下:

基址寄存器中的值(指令执行后)=指令执行前的值+地址偏移量

注意:

“!”后缀必须紧跟在地址表达式后面,而地址表达式要有明确的地址偏移量。

“!”后缀不能用于R15(PC)的后面

当用于单个寄存器后面时,必须确性这个寄存器有隐性的偏移量,eg:“STMDB SP!,{R3,R5,R7}”此时地址基址寄存器SP的隐性偏移量是4.

二:具体的指令

LDR/STR       字数据加载/存储指令

LDRB/STRB   字节数据加载/存储指令

LDRH/STRH  半字数据加载/存储指令

Eg:LDR R4,START                   ;将存储地址为START的字数据读入R4

       LDR R0,[R1]                      ;将存储地址为R1的字数据读入R0

       LDR R0,[R1,R2]                    ;将存储地址为R1+R2的字数据读入R0

       LDR R0,[R1,#8]                     ;将存储地址为R1+8的字数据读入R0

       LDR R0,[R1,R2,LSL#2]           ;将存储地址为R1+R2<<2的字数据读入R0

       STR R5,DATA1                   ;将R5存入存储地址为DATA1中

       同理可以判断出其他STR的形式所表达的意思。

数据加载与存储(Load-store)指令用于存储器和处理器的寄存器之间数据传输。

Load用于把内存中的数据装载到寄存器中去。

Store用于把寄存器的数据存储到内存中去。

注意:LDRR5,[R6,#0x04]!   是先把R6+4作为地址,把数据传输结束后,在把R6=R6+4.

     LDR R5,[R6],#0x04    是先把R6作为地址,把数据传输结束后,把R6=R6+4

 

STMFDSP!,{R0-R4}         将R0-R4中的数据压入堆栈,R13为堆栈指针。

LDMFDSP!,{R0-R4}         将数据出栈,恢复R0-R4的值。

 

DCD用于分配一段字内存单元,并用伪指令中的expr初始化.DCD伪指令分配的内存需要字对齐,一般可用来定义数据表格或其它常数。


Eg:DATA DCD 4,5,6                DATA指向这块内存起始地址,内存为3个单元,并且内容为4,5,6.

注意,,标号相当与一个常数,所以在 LDR R0,DATA,时,R0中内容就是DATA的值。

 

LR就是ARM中R14,子程序链接寄存器,SP就是ARM中R13栈指针寄存器,R15就是PC,程序计数器。

当执行BL子程序调用指令时,R14中得到R15(程序计数器PC)的备份。

读状态寄存器指令.在 ARM 处理器中,只有 MRS 指令可以状态寄存器CPSR或SPSR读出到通用寄存器中.指令格式如下;


写状态寄存器指令.在 ARM 处理器中.只有 MSR 指令可以直接设置状态寄存器 CPSR或 SPSR.指令格式如下




SPSR是用来备份CPSR的寄存器,当异常发生时,SPSR自动将上一个状态的CPSR备份出来,便于在后面恢复上一个状态。


关键字:ARM  指令后缀  读取指令 引用地址:ARM指令后缀与常用读取指令

上一篇:STM32串口一直进中断解决方法
下一篇:mini2440----keil for AMR之IIC读写EEPROM(AT24C08)

推荐阅读最新更新时间:2024-03-16 15:47

(ARM)程序启动过程
作为一般的嵌入式程序设计工作者,平时大部分工作应该主要涉及应用层部分的事务,只要编译工程生成可执行文件,然后把执行文件download到ROM中,就OK了。很少关注烧写到ROM中的程序是怎么运行起来的这一过程。因为这部分工作大都被集成开发环境给做了。本篇文章,我欲将这不不太被关注的过程给简单介绍下(很少关注不代表不重要,相反,个人感觉对这一部分的理解,对于一个嵌入式程序开发者来说是一个小小的分水岭,当然,另外一个重要的分水岭肯定是操作系统啦)。 1 加载文件(sct ld等) 2 bin/image文件 一个简单的image文件主要包括以下三项: RO区域:程序中的指令和常量,read only RW区域:程序中已经初始化的
[单片机]
基于ARM的移动视频监控系统
   0 引 言   传统的视频监控系统一般采用PC服务器的C/S(Client/Server)结构,视频服务器由计算主机和许多存放视频的磁盘陈列组成,专门用于视频的存储和传输。流式传输采用的是边接收边播放的原则,这需要将多媒体的编、解码和传输技术很好地结合在一起。目前多媒体的编解码技术如MPEG-4,H.264等,可以以较小的带宽开销来实现较高质量的视频传输,然而目前的传输技术却无法满足移动视频监控的需求,因为设备的移动速度和所在位置都会严重影响到传输。传统流媒体系统体积大、成本高、可靠性低且移植性差,不能满足这种特殊场合的应用要求。   针对传统监控技术的不足,本文提出了基于ARM的移动观频监控的设计与实现,设计了一种
[嵌入式]
分析ARM外设flash及SDRAM的地址连接
  先提一下位宽的概念,对于具体器件而言,它的位宽是一定的,所谓位宽,指的是“读/写操作时,最小的数据单元”──别说最小单元是“位”,一般设备上没有单独的“位操作”,修改位时通过把整个字节、字或双字读出来、修改,再回写。AM29L800BB这种nor flash位宽是16位。K4S561632C这种SDRAM位宽是32位。   对于CPU来说,一个地址对应的是一个字节(8位),也就是说CPU的地址线(A0~A20)对应的最小数据单元是字节。   这里需要注意的是,不要把“外设的位宽”和“CPU的位数”这两个概念混淆了。外设的位宽是读写外设的最小数据单元,CPU位数是CPU可以一次处理的字节数,32位CPU可以一次处理4字节
[单片机]
跟我写ARM处理器之一:从写module arm开始
我决定把我写ARM处理器的经验分享给大家。不是自卖自夸,我这个核是非常好的核。一个证明方法是下载入FPGA,看她是不是能工作。这种证明方法,我已经做到了。大家如果可以下载整个工程文件,稍微改造一下,即能验证是否成功。但是这还不是推广她的方法。因为对于大多数人来说,只是知其然不知其所以然。人们对于不熟悉、不了解的事情,总是觉得神秘,那么对于她的应用,就会大打折扣。推广她的最好的方法,就是让她成为人人能够轻松写的核。我希望以此推动大家对于SOC设计的热情。可以想象,如果最神秘,最复杂的CPU核,都可以轻松的写出来的话,那么还有什么能够难得到我们的呢? 在写之前,我要申明两点精神。这两点精神当然不是我创造的,我只是引用起来,让大家更
[单片机]
函数指针数组在ARM异常中断处理中的应用
介绍一种简洁、高效、灵活的ARM异常中断处理方法。 在ARM中,由于所有的中断都使用同一个异常中断入口地址,即0x00000018。因此需要在异常中断处理程序中根据相应的中断号调用对应的中断服务函数。 一般有两种处理方式: 1. 在汇编中保存现场,然后调用C语言编写的中断处理程序,任务处理完成之后,再返回到汇编中恢复现场,并返回到断点。其中C语言编写的中断处理程序,通过switch语句对INTOFFSET进行判断,然后散转执行对应的服务函数。 IMPORT IRQ_EXCEPTION 0x00000018 LDR PC,=IRQ_E
[单片机]
关于ARM CM3的启动文件分析
下面以ARM Cortex_M3裸核的启动代码为例,做一下简单的分析。首先,在启动文件中完成了三项工作: 1、堆栈以及堆的初始化 2、定位中断向量表 3、调用Reset Handler。 在介绍之前,我们先了解一下ARM芯片启动文件中涉及到的一些汇编指令的用法。 补充一下,其中DCD相当于C语言当中的&,定义地址。 1、堆栈以及堆的初始化 1.1 堆栈的初始化 Startup_xxx.s中的堆栈初始化代码   Stack_Size EQU 0x00000400,这个语句相当于Stack_Size这个标号(标号:链接器的术语,下文中提到的所有“标号”,指的都是指的链接器中的标号)等于0x00000400相当于C语言
[单片机]
关于<font color='red'>ARM</font> CM3的启动文件分析
基于ARM和Linux的字符采集与识别系统
传统纸质读物的数字化以及诸如条码识别等字符识别系统都离不开图像的读入与识别,然而目前广泛使用的字符识别设备将这两部分独立开,即由图像读入设备(如扫描仪)和安装于计算机上的识别软件构成,但这样的设备构成离不开安装识别软件的计算机,造成成本上升和使用不便。随着电子产品的普及,具有摄像功能的电子产品及其上的识别软件也可以构成一个字符识别系统,但是这种识别系统的识别速度受到摄像头调焦的限制,难以广泛应用。文中提出的便携式字符采集和识别系统,其硬件平台是基于接触式图像传感器(CIS)与ARM9处理器S3C2410,软件平台是基于嵌入式Linux系统,可以克服以上两种设备的缺点,同时满足方便性和快速性的要求。另一方面,由于设备基于Li-n
[单片机]
基于<font color='red'>ARM</font>和Linux的字符采集与识别系统
AI芯片,开战
春节也没有阻挡AI跨越的脚步,2月16日凌晨,美国OpenAI公司的视频生成模型Sora再次冲击AI界,成为继ChatGPT后又一现象级应用。Sora的问世令世人惊呼:现实不存在了。 短短几日,AI又掀起新一轮浪潮,而作为其核心动力的AI芯片,也迎来巨变。 打倒英伟达 看着英伟达赚钱,市场玩家分外眼红。为了抢占市场,巨头不惜砸大钱布局市场。 先是OpenAI首席执行官山姆·奥特曼(Sam Altman)万亿美元造芯片,再是自嘲为“秃头骗子”的孙正义1000亿美元造AI芯片。 山姆·奥特曼因为万亿美元而登上头条新闻,他曾表示半导体行业需要他,而建立庞大的芯片制造网络需要通过向全球投资者寻求大量资金,他则需要
[嵌入式]
AI芯片,开战
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多每日新闻
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved