ARM指令的多数据传输(STM、LDM)中,提到:多寄存器的Load和Store指令分为2组:
一组用于数据的存储与读取,对应于IA、IB、DA、DB,
一组用于堆栈操作,对应于FD、ED、FA、EA,
两组中对应的指令含义相同。
IA:increase after ;表示数据传输后地址增加
IB:increase before
DA: decrease after
DB: decrease before
即:
STMIB(地址先增而后完成操作)
STMFA(满递增堆栈)
STMIA(完成操作而后地址递增)
STMEA(空递增堆栈)
STMDB(地址先减而后完成操作)
STMFD(满递减堆栈)
STMDA(完成操作而后地址递减)
STMED(空递减堆栈)
上述各组2个指令含义相同只是适用场合不同,同理有:
LDMIB、LDMED;
LDMIA、LDMFD;
LDMDB、LDMEA;
LDMDA、LDMFA。
IA模式表示:每次传送后地址+4;(After Increase)
DB模式表示:每次传送前地址-4;(Before Decrease)
多寄存器加载/存储指令共有8种模式(4个用与数据块的传输,4个用于栈操作)
STMDB和LDMIA指令一般配对使用,STMDB用于将寄存器压栈,LDMIA用于将寄存器弹出栈,作用是保存使用到的寄存器。
例子1:
指令:stmdb sp!,{r0-r12,lr}
含义:sp = sp - 4,先压lr,sp = lr(即将lr中的内容放入sp所指的内存地址)。sp = sp - 4,再压r12,sp = r12。sp = sp - 4,再压r11,sp = r11......sp = sp - 4,最后压r0,sp = r0。
如果想要将r0-r12和lr弹出,可以用ldmia指令:ldmia sp!,{r0-r12,lr}
例子2:
STMIA, 比如当前r0指向的内存地址是 0x1000,STMIA R0!,{R1-R7} 就是 首先把r1存入 0x1000,然后r2存入0x1004,然后r3存入0x1008,如果是32位的处理器就是每次加4个字节,以此类推把 r1-r7按照递增的地址存入,这个r0!就是从r0的地址开始存的意思。STMDB则是地址从r0开始减少,依次存储。
例子3:
LDMIA:LDM是多寄存器存取的意思,后面参数以“,”分隔,第一个参数是首地址;第二个参数是寄存器列表,并以“{}”括起来。
LDMIA R0!, {R1-R4};R0表示要操作的存储空间首地址,要操作的数据个数由寄存器列表决定,现在是R1到R4,共4个数据(每个数据是32bits的)
具体:
地址为R0的存储空间中的数据赋值给R1
地址为R0+4的存储空间中的数据赋值给R2
地址为R0+8的存储空间中的数据赋值给R3
地址为R0+12的存储空间中的数据赋值给R4
所有的示例指令执行前的存储空间和寄存器情况:
mem32[0x1000C] = 0x04
mem32[0x10008] = 0x03
mem32[0x10004] = 0x02
mem32[0x10000] = 0x01
r0 = 0x00010000
r1 = 0x00000000
r3 = 0x00000000
r4 = 0x00000000
执行后存储空间不变,寄存器变化:
r0 = 0x00010010
r1 = 0x01
r2 = 0x02
r3 = 0x03
r4 = 0x04
关键字:ARM 汇编
引用地址:
ARM汇编:汇编中IA、IB、DA、DB和FD、ED、FA、EA什么意思?
推荐阅读最新更新时间:2024-11-11 14:51
ARM7与FPGA相结合的应用
工业控制中往往需要完成多通道故障检测及多通道命令控制(这种多任务设置非常普遍),单独的CPU芯片由于其外部控制接口数量有限而难以直接完成多路检控任务,故利用ARM芯片与FPGA相结合来扩展检控通道是一个非常好的选择。这里介绍用Atmel公司ARM7处理器(AT91FR40162)和ALTERA公司的低成本FPGA芯片(cyclone2)结合使用完成多通道检控任务的一种实现方法。 各部分功能简介 图1为此系统的结构连接框图。如图所示,ARM芯片与FPGA芯片之间通过数据总线、地址总线及读写控制线相连,而与终端PC则通过串口通信;FPGA与目标设备通过命令控制总线和故障检测总线相连。 图1 系统结构框
[单片机]
arm 学习笔记--C程序基础
数据类型 arm 基本数据类型包括 整数型和 浮点数类型。 整数类型: Char 长度为8位的字节数据; Short 长度为16位的半字数据; Int 长度为32位的字数据; Long 长度为32位的字数据; Long Long 长度为64位的双字数据; 浮点型: Float 长度为32位的浮点数; Double 长度为64位的浮点数; c语言操作中,如果遇到无符号数和有符号数之间的操作,编译器会自动转化为无符号数来进行处理,符号位作为数值位处理。 字符由单引号及其所引起来的字符表示。 字符串由双引号及其所引起来的字符表示。 结构体中,为了地址边界对齐,避免被编译器填充无意义的填充位,浪费了存储空间,应该把位数小的数据放在结
[单片机]
利用ADS1.2和JLINK V8搭建ARM7开发平台
硬件资源:一块以ARM7(LPC2119)为核心的电路板,Jlink v8仿真器,LONGWEIPS-305DM直流稳压电源,笔记本电脑(安装win7旗舰版) 软件资源:ADS1.2 Jlink v8驱动Setup_JLinkARM_V408i 最近需要用到LPC2119这款芯片,可手头没有这款芯片的仿真器,上网一查周立功公司的仿真器AK100某宝上最便宜也要1.8K,这个....囊中羞涩啊。LZ我忽然想到以前用ADS1.2搞S3C2440开发时用的是Jlink v8仿真器,这个仿真器能不能用到LPC2119这款芯片呢?于是乎赶忙问度娘,查资料得知有Jlink v8支持LPC2119芯片,欣喜万分,立马开始尝试。 由于
[单片机]
嵌入式平台ARM的C代码优化方法
本文介绍了ARM平台的C代码优化方法,从数据类型选择、数据结构组织、局部变量选择、函数inline内联、编译器选项、循环展开、条件执行、数据操作的转化、存储器的优化、代码尺寸的优化等角度给出常用的优化方法。 C数据类型 C语言的程序优化与编译器和硬件系统都有关系,设置某些编译器选项是最直接最简单的优化方式。在默认的情况下,armcc是全部优化功能有效的,而GNU编译器的默认状态下优化都是关闭的。ARM C编译器中定义的char类型是8位无符号的,有别于一般流行的编译器默认的char是8位有符号的。所以循环中用char变量和条件 i 0时,就会出现死循环。为此,可以用fsigned - char(for gcc)或者-zc(for
[单片机]
技术文章—MIPI D-PHY物理层自动一致性测试
对低功耗高清显示器的需求,正推动着对高速串行总线的采用,特别是移动设备。MIPI D-PHY是一种标准总线,是为在应用处理器、摄像机和显示器之间传送数据而设计的。该标准得到了MIPI联盟的支持,MIPI联盟是由多家公司(主要来自移动设备行业)组成的协会。该标准由联盟成员使用,而一致性测试则在保证设备可靠运行及各厂商之间互操作方面发挥着重要作用。自动测试系统采用可靠的示波器和探头,帮助设计人员加快测试速度,改善可重复性,简化报告编制工作。 高速运行的物理层 D-PHY的物理层由一个时钟和四条数据通路 组成,可以以非常高的速度运行。物理层可以支持不同的协议层。例如,摄像机捕捉的影像可以通过采用CSI-2协议的D-PHY物理层传
[测试测量]
D类放大器电路板布局指南
如果没有遵循一些基本的布局指南,PCB设计将会限制D类放大器的性能或降低其可靠性。下面描述了D类放大器一些好的PC板布局实践经验。采用带有两个BTL输出的STA517B(每通道175瓦)数字功率放大器作为范例,但对所有的D类放大器而言,其基本概念是一致的。
地平面
利用过孔将电路板的顶层器件与电路板底层的地平面连接。但是,过孔仍会堵塞电流回流到地平面,因此须灵活的使用这些过孔。
直接在放大器之下的区域须敷铜。如果放大器在其封装的底部有一个裸露的焊盘或插件,那么IC必须焊接到放大器下放的地,如此可以作为放大器的扇热区。在这种情况下,地必须从IC正下方向两边引出,这样可以确保其裸露。放大器下面的地须打上许多过孔,通过过孔
[电源管理]
ARM7-LPC2132驱动LCM的接口说明
显示设计是所有嵌入式系统的重要组成部分之一。显示器件包括LED、字符LCM、图形LCM、VFD等,其中图形LCM(如128x64、192x64等点阵)可显示ASCII字符、汉字和图形,且性价比较高,在嵌入式系统中的应用日趋广泛,虽在MCS-51系列中的设计已非常成熟。但由于ARM与MCS-51有许多不同之处,其设计方法当然也有差别,下面以LPC2132和192x64点阵LCM为例进行说明。 与液晶显示模块(LCM)的硬件接口设计 1) 电平匹配:LPC2132系列操作电压范围:3.0~3.6 V,选择3V的LCM当然没有问题,但市场上3V的LCM价格常常比5V贵,而LPC2132的I/O口可承受5V的最大电压,所以可采用5V的LC
[单片机]
13.ARM协处理器的知识
在处理器中有协处理器来辅助处理器完成部分功能的,主要是协助作用。 协处理器: 协处理器用于执行特定的处理任务,如:数学协处理器可以控制数字处理,以减轻处理器的负担。ARM可支持多达16个协处理器,其中CP15是最重要的一个。 在ARM9、ARM11、cortexa8等核中,CP15的功能都是一样的。 在ARM11核的文档看到图1-1: The section gives an overall view of the system control coprocessor. For detail of the registers in the system control coprocessor, see System contr
[单片机]