LDMIA、LDMIB、LDMDB、LDMDA、STMIA、LDMFD、LDMFA、LDMED、LDMEA等指令详解

关于多寄存器加载存储指令

1.LDMIA指令、LDMIB指令、LDMDB指令、LDMDA指令

(1)LDMIA指令,IA表示每次传送后地址加4

 

 

 

(2)LDMIB指令,每次传送前地址加四

 

(3)LDMDB指令,每次传送前地址减4,这里还要注意程序中先给R5,还是先给R8,这里明显是先给R8

 

(4)LDMDA指令,每次传送后地址减4,这里也是先给R8,不是先给R5!!

 

 

 

2.下面来看看STMIA指令、STMIB指令、STMDB指令、STMDA指令

 

(1)      STMIA指令, STMIA R0,{R1,R2,R3,R4}  ;将R1—R4的数据存储到R0指向的地址上,R0的值不更新,IA传送后地址加4,所以这里内存当中的地址是从0x8004开始变化的

 

(2)      STMIB指令, STMIB R0,{R1,R2,R3,R4}  ;将R1—R4的数据存储到R0指向的地址上,R0的值不更新,IB每次传送前地址加4,所以内存中的值是从0x8008开始变化的

 

 

 

(3)      STMDB指令, STMDB R0,{R1,R2,R3,R4}  ;将R1—R4的数据存储到R0指向的地址上,R0的值不更新,DB每次传送后地址减4,所以内存中的值是从0x8010开始递减变化的,注意这里是先把表达式中的R4先给地址0x8010


(4)      STMDA与上面STMDB指令类似,DA是每次传送后地址减4,我就不截图了。

 

 

下面看一下最TMD烦的的是堆栈寻址方式,依次讲解STMFD、STMED、STMFA、STMEA

1.      STM加载指令

(1)      STMFD意思是满堆栈递减指令,堆栈向下增长。如下图就是解释堆栈向下增长,向下增长,栈顶指针在内存中向低地址处移动,叫做向下增长,这里我为什么要先讲STMFD指令,怎么不讲LDMFD等指令呢,因为这里涉及到堆栈,向内存中写入寄存器中所存储的值,更能体现出进栈的动作,看完下面的例子,你会知道STM的后缀为什么是FD了。

 

 

关键代码:STMFDSP!,{R1-R3,R4},可以这么看,先把R4,R3,R2,R1依次压栈,至于为什么不是R1,R2,R3,R4依次压栈,因为做出的实验就不是这样的,所以R4准备进栈的时候,栈指针SP先减4,然后先把R4寄存器里面的值放到内存地址为0x803c里面,这里为什么SP要先减4呢,因为这里是满堆栈,所以要先把栈指针做出响应的变化以后,才能进行存储,至于什么是满堆栈和空堆栈,我这里就不解释了。程序效果看下图即可:

 

(2)      看了上面STMFD以后,现在看STMFA就很简单了:不过这里需要特别注意,这里并不是先操作R4寄存器的,而是操作R1寄存器,至于为什么,我也不知道,只是实验总结出来的,这种东西并没有什么规律可言,实验是怎么样就怎么样吧。同理的是,先把SP做相应的改变,也就是这里先SP+4=0x8044,然后把R1寄存器的值放到内存地址的0x8044处,然后R2,R3,R4依次放下去,最后改变SP的值,因为代码中多了一个感叹号STMFA SP!,{R1-R3,R4}

 

(3)      STMED是空递减堆栈,可以看出堆栈指针一开始指在0x8040处,所以先把R4的寄存器的值放到内存单元0x8040中,这里其实也是先操作R4寄存器,至于为什么,只能说和STMFD对应的。


(4)      STMEA空递增堆栈,这里我只贴图不说话,哈哈,看不懂,回家种田去

 

 

下面看看和STMFD指令相对应的LDMFD等指令,我依次讲解LDMFD、LDMFA、LDMED、LDMEA指令,至于我为什么按这种顺序讲,为了和上面的STMFD等指令联系在一起。

(1)      还记得我上面那些STM那些指令先将的是什么,对了,第一个讲的是STMFD指令,把内存中的数据批量放到寄存器中。FD为满递减堆栈。

这里值得注意的是,FD不是满堆栈递减吗,为什么程序执行完以后SP是增加的,在没有执行MOVR9, SP这条指令之前,FD确实代表是递减的意思,这里因为sp栈顶指针实际上是增加,至于为什么不写LDMFA,只不过这样LDMFD能和STMFD指令对应,看起来顺眼点吧,其实这里我要说明的是STMDB并不是和LDMDB对应,而是和LDMIA对应的,这里注意一下就行了,以后程序编多了,直接就记住了,不过你只要原理懂了,管它怎么写呢。

 

 

 

(2)      那自然地下面就讲LDMFA指令了:同理的嘛!!

 

(3)      LDMED指令:依葫芦画瓢

 

 

(4)      LDMEA指令:就不写了,吃饭去了!!!

 

最后注意的一点就是这里的SP指针是我假定的一个值,如果你以后写arm代码,调用C函数的时候,用到栈指针,系统会自动分配,就不存在sp是否非法的问题,什么是非法问题呢?先举个例子,看下图,这里对应的SP是0x8020,并且是满递减,把寄存器的值写到内存当中,我明明写的是STMFDSP!,{R1-R3,R4},把4个寄存器的内容写到内存中,可是最后就存了两个,因为你0x8018的地址处之前可能代码段的内容就存入在那里,所以你就不能改了,获取你这时候把这个不能写入的内存地址是可以读取到寄存器中的,我没试过,有兴趣可以试试。所以在用STM指令的时候要注意这点了!!



  • 36
    点赞
  • 176
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
前言...............................................................................................................................................................i 目录...............................................................................................................................................................I ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式..........................................................................................................................2 寄存器寻址...................................................................................................................................2 立即寻址.......................................................................................................................................2 寄存器偏移寻址............................................................................................................................2 寄存器间接寻址............................................................................................................................3 基址寻址.......................................................................................................................................3 多寄存器寻址...............................................................................................................................4 堆寻址.......................................................................................................................................4 块拷贝寻址...................................................................................................................................5 相对寻址.......................................................................................................................................5 指令集介绍...........................................................................................................................................7 ARM 指令集.........
前言...............................................................................................................................................................i 目录...............................................................................................................................................................I ARM7TDMI(-S)指令集及汇编....................................................................................................................1 ARM 处理器寻址方式..........................................................................................................................2 寄存器寻址...................................................................................................................................2 立即寻址.......................................................................................................................................2 寄存器偏移寻址............................................................................................................................2 寄存器间接寻址............................................................................................................................3 基址寻址.......................................................................................................................................3 多寄存器寻址...............................................................................................................................4 堆寻址.......................................................................................................................................4 块拷贝寻址...................................................................................................................................5 相对寻址.......................................................................................................................................5 指令集介绍...........................................................................................................................................7 ARM 指令集.................................................................................................................................7 指令格式...............................................................................................................................7 第2 个操作数................................................................................................................7 #immed_8r ...........................................................................................................7 Rm..........................................................................................................................8 Rm,shift..................................................................................................................8 条件码............................................................................................................................9 ARM 存储器访问指令........................................................................................................ 11   LDR 和STR ........................................................................................................ 11   LDM 和STM.......................................................................................................14   SWP .....................................................................................................................17 ARM 数据处理指令............................................................................................................19 数据传送指令..............................................................................................................20   MOV ............................................................................................................20   MVN ............................................................................................................20 算术逻辑运算指令......................................................................................................20   ADD.............................................................................................................20   SUB..............................................................................................................21   RSB..............................................................................................................21   ADC .............................................................................................................21   SBC..............................................................................................................21   RSC..............................................................................................................22   AND.............................................................................................................22   ORR..............................................................................................................22   EOR..............................................................................................................22 比较指令......................................................................................................................23   CMP.............................................................................................................23   CMN.............................................................................................................23   TST...............................................................................................................24   TEQ..............................................................................................................24 乘法指令......................................................................................................................25   MUL.............................................................................................................25   MLA.............................................................................................................25   UMULL........................................................................................................25   UMLAL........................................................................................................26   SMULL........................................................................................................26   SMLAL........................................................................................................26 ARM 跳转指令....................................................................................................................27   B...........................................................................................................................27   BL.........................................................................................................................27   BX........................................................................................................................27 ARM 协处理器指令............................................................................................................28   CDP......................................................................................................................28   LDC......................................................................................................................29   STC ......................................................................................................................29   MCR.....................................................................................................................30   MRC.....................................................................................................................30 ARM 杂项指令....................................................................................................................31   SWI ......................................................................................................................31   MRS.....................................................................................................................32   MSR.....................................................................................................................33 ARM指令........................................................................................................................34   ADR.....................................................................................................................35   ADRL...................................................................................................................35   LDR......................................................................................................................36   NOP......................................................................................................................37 Thumb 指令集.............................................................................................................................39 Thumb 指令集与ARM 指令集的区别..............................................................................39 Thumb 存储器访问指令.....................................................................................................40   LDR 和STR ........................................................................................................41   PUSH 和POP ......................................................................................................43   LDMIASTMIA ..............................................................................................43 Thumb 数据处理指令.........................................................................................................45 数据传送指令..............................................................................................................46   MOV ............................................................................................................46   MVN ............................................................................................................46   NEG..............................................................................................................47 算术逻辑运算指令......................................................................................................47   ADD.............................................................................................................47   SUB..............................................................................................................48   ADC .............................................................................................................49   SBC..............................................................................................................49   MUL.............................................................................................................50   AND.............................................................................................................50   ORR..............................................................................................................50   EOR..............................................................................................................51   BIC...............................................................................................................51   ASR..............................................................................................................51   LSL...............................................................................................................52   LSR ..............................................................................................................52   ROR..............................................................................................................53 比较指令......................................................................................................................53   CMP.............................................................................................................53   CMN.............................................................................................................54   TST...............................................................................................................54 Thumb 跳转指令.........................................................................................................55   B...................................................................................................................55   BL.................................................................................................................55   BX................................................................................................................55 Thumb 杂项指令.........................................................................................................56   SWI ..............................................................................................................56 Thumb 伪指令.............................................................................................................57   ADR .............................................................................................................57   LDR..............................................................................................................57   NOP..............................................................................................................58 伪指令.................................................................................................................................................59 符号定义伪指令..........................................................................................................................59   GBLA、GBLL、GBLS ..............................................................................................59   LCLA、LCLL、LCLS................................................................................................60   SETA、SETL、SETS .................................................................................................61   RLIST..........................................................................................................................61   CN...............................................................................................................................62   CP................................................................................................................................62   DN、SN.......................................................................................................................62   FN................................................................................................................................63 数据定义伪指令..........................................................................................................................63   LTORG.........................................................................................................................64   MAP............................................................................................................................64   FIELD ..........................................................................................................................65   SPACE..........................................................................................................................66   DCB .............................................................................................................................66   DCD 和DCDU............................................................................................................67   DCDO ..........................................................................................................................67 DCFD 和DCFDU........................................................................................................68   DCFS 和DCFSU.........................................................................................................68   DCI..............................................................................................................................69   DCQ 和DCQU............................................................................................................69   DCW 和DCWU..........................................................................................................70 报告伪指令.................................................................................................................................70   ASSERT.......................................................................................................................70   INFO ............................................................................................................................71   OPT.............................................................................................................................71   TTL 和SUBT ..............................................................................................................72 汇编控制伪指令..........................................................................................................................73   IF、ELSE 和ENDIF...................................................................................................73   MACRO 和MEND .....................................................................................................74   WHIL 和WEND .........................................................................................................75 杂项伪指令.................................................................................................................................76   ALIGN .........................................................................................................................77   AREA...........................................................................................................................78   CODE16 和CODE32..................................................................................................79   END .............................................................................................................................80   ENTRY.........................................................................................................................80   EQU .............................................................................................................................81   EXPORT 和GLOBAL ................................................................................................81   IMPORT 和EXTERN.................................................................................................82   GET 和INCLUDE ......................................................................................................83   INCBIN........................................................................................................................83   KEEP...........................................................................................................................83   NOFP ...........................................................................................................................84   REQUIRE ....................................................................................................................84   PEQUIRE8 和PRESERVE8 .......................................................................................84   RN...............................................................................................................................84   ROUT...........................................................................................................................85 ARM指令...............................................................................................................................86   ADR............................................................................................................................86   ADRL...........................................................................................................................86   LDR.............................................................................................................................86   NOP.............................................................................................................................86   LDFD...........................................................................................................................86   LDFS...........................................................................................................................87 Thumb 伪指令.............................................................................................................................87   ADR............................................................................................................................87   LDR.............................................................................................................................87   NOP.............................................................................................................................88 ARM 汇编程序设计............................................................................................................................88 文件格式.....................................................................................................................................88 ARM 汇编的一些规范................................................................................................................88 汇编语句格式......................................................................................................................88 标号.....................................................................................................................................89   基于PC 的标号...................................................................................................89   基于寄存器的标号..............................................................................................90   绝对地址..............................................................................................................90 局部标号..............................................................................................................................90 符号.....................................................................................................................................91 常量.....................................................................................................................................91   数字常数..............................................................................................................91   字符常量..............................................................................................................92   布尔常量..............................................................................................................92 段定义.................................................................................................................................92 宏定义及其作用..................................................................................................................93 子程序的调用..............................................................................................................................94 数据比较跳转..............................................................................................................................95 循环.............................................................................................................................................95 数据块复制.................................................................................................................................95 操作.........................................................................................................................................96 特殊寄存器定义及应用..............................................................................................................96 散转功能.....................................................................................................................................97 查表操作.....................................................................................................................................97 长跳转.........................................................................................................................................97 对信号量的支持..........................................................................................................................98 伪指令使用.................................................................................................................................98 一个完整的例子..........................................................................................................................98 外围部件控制..............................................................................................................................99 三级流水线介绍..........................................................................................................................99 C 与汇编混合编程............................................................................................................................100 内嵌汇编...................................................................................................................................100 内嵌汇编的指令用法........................................................................................................103 内嵌汇编器与armasm 汇编器的差异.............................................................................104 内嵌汇编注意事项............................................................................................................104 访问全局变量............................................................................................................................106 C 与汇编相互调用....................................................................................................................107 寄存器的使用规则............................................................................................................108 堆使用规则....................................................................................................................108 参数传递规则....................................................................................................................109 C 程序调用汇编程序........................................................................................................ 110 汇编程序调用C 程序....................................................................................................... 111 ARM 指令集列表.............................................................................................................................. 113 ARM 存储器访问指令表列表.................................................................................................. 113 ARM 数据处理指令列表.......................................................................................................... 114 ARM 乘法指令列表.................................................................................................................. 115 ARM 跳转指令列表.................................................................................................................. 116 ARM 协处理器指令列表.......................................................................................................... 117 ARM 杂项指令列表.................................................................................................................. 118 ARM指令列表...................................................................................................................... 119 Thumb 指令集列表...........................................................................................................................120 Thumb 存储器访问指令列表...................................................................................................120 Thumb 数据处理指令列表.......................................................................................................121 Thumb 跳转指令及软中断指令列表.......................................................................................122 Thumb 伪指令列表...................................................................................................................123 汇编预定义变量及伪指令................................................................................................................124 预定义的寄存器和协处理器名................................................................................................124 通用寄存器........................................................................................................................124 程序状态寄存器................................................................................................................124 浮点数寄存器....................................................................................................................124 协处理器及协处理器寄存器............................................................................................125 内置变量列表............................................................................................................................125 伪指令列表...............................................................................................................................126 指令条件码列表........................................................................................................................128 CPSR 和SPSR 分配图.............................................................................................................................129

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值