历史上的今天
今天是:2024年09月23日(星期一)
2019年09月23日 | ARM汇编:汇编中IA、IB、DA、DB和FD、ED、FA、EA什么意思?
2019-09-23 来源:eefocus
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
史海拾趣
|
WinCE5.0的一个EDB应用程序Debug版可以运行Release版就是老出错 如题: WinCE5.0的一个EDB应用程序Debug版可以运行Release版就是老出错, 痛苦啊! 而且EDB容量还是比较小的,这是烦死了 … 查看全部问答> |
|
各位老师好,我是惠州的小肖。^_^平时有空就搞一下单片机。。对单片机这一块我就一菜鸟。。这不我照着李学海老师的书上我测试了一串口通信程序。李学海老师写的串口程序是用的汇编语言。。我试着把这程序用C语言改写。。可就是不能实现同样的功能( ...… 查看全部问答> |
|
我是一个刚刚到公司实习的新手,由于之前没有学过wince有关的开发,所以想请大虾们帮忙,我有几个问题: 1.开发wince项目需要什么开发工具,什么开发工具是通用的 2.教我如何编写第一个wince程序 3.我需要重点学习wince的哪个部分 重重有赏啊各 ...… 查看全部问答> |
|
一个基于DDS的可移相双通道任意波形发生器的设计,可以出波形,我给的锁相环的频率是100MHz,按理论上来说,输出频率应该可以达到0.4*100MHz=40MHz,但是实际出的波形的频率却只有大概20MHz。我想请问各位大侠利用流水线设计的相位累加器可以提高输 ...… 查看全部问答> |
|
对于航空迷来说,这个视频绝对俘虏了他们的心。该视频YouTube点击已超过270万次数据还在上涨当中。该A380飞模长约4.82米,侧翼长约为5.3米,重约70.8千克,飞机装配10升左右燃油,每分钟燃油1升左右,由四个Jetcat涡轮发动机驱动起飞 $(\'swf_XO8\ ...… 查看全部问答> |
|
在电源问题中经常有人问起纹波和噪声上的问题,从牛人写的电源的书中也能找出一些二者的差异,实际测试中其实也能发现有所不同。输出纹波和输出电流和输出电压都有关系,主要是与电流的关系。通常输出纹波近似等于输出电流 ...… 查看全部问答> |




