ARM汇编:汇编中IA、IB、DA、DB和FD、ED、FA、EA什么意思?

     ARM汇编:汇编中IA、IB、DA、DB和FD、ED、FA、EA什么意思?
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
————————————————
版权声明:本文为CSDN博主「魏波.」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weibo1230123/article/details/84061189

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值