第6章 andriod ARM 实战番外篇 3

ARM 实战汇编内存操作

 

1、 使用工具ARM ADS

 

内存操作就是跟寄存器之间的转换,有寄存器和内存的转换,也有内存和寄存器之间的转换。

 

内存和寄存器之间分为:单寄存器的操作、多寄存器的操作

 

单寄存器的操作分为:

LDR  Rn,Addn  按照字长读取

例子:    MOV R1,0x12

                  LDRR0,[R1]

                  结果是将R1的内存地址给R0,这个就是之前提到的小端模式

                  什么是小端模式就是低位放低地址,高位放高地址

                  内存的值是以字长度而来的

 

STRRn,Addn

例子:    MOV R1,#0x12

                  STR R1,[R0,#0x0C]

                  结果是把#0x12的值写到0x0C内存地址内



LDRB        Rn,Addn         按照字节长读取

例子:    MOV R1,0x12

                  LDRBR0,[R1]

                  结果是将FF内存地址给R0寄存器

 

STRB        Rn,Addn         按照字节长读取

例子:    MOV R1,0x12

                  STRBR0,[R1]

                  结果是将R0寄存器地址00给R1内存中的FF位

 

LDRH        Rn,Addn按照半字节长读取

例子:    MOV R1,0x12

                  LDRBR0,[R1]

                  结果是将FFEF0000内存地址给R0寄存器

 

 

 

 

STRH   Rn,Addn 按照半字节长读取

例子:    MOV R1,0x12

                  LDRBR0,[R1]

                  结果是将R0寄存器地址0000给R1内存中的FFEF位

 

多寄存器的操作分为:

地址模式分为:

1)       数据块的模式为IA(传输地址之后加4)

2)       数据块的模式为IB(传送地址之前加4)

3)       数据块的模式为DA(传送后地址减4)

4)       数据块的模式为DB(传送前地址减4)

堆栈模式分为:

1)       EA(空递减堆栈)

2)       EB(满递减堆栈)

3)       ED(空递增堆栈)

4)       FA(满递增堆栈)

 

LDM                  LDMIAR0,{R3-R9}按照多寄存器读取

例子:    MOV R1,0xf

                  LDMIAR1,{R2-R4}

                  结果是将R1的寄存器中的内存地址给R2,R2的内存地址减4给R3,R3的内存地址减4给R4

STM          STMIA R0,{R3-R9}按照多寄存器写入

例子         MOV R1,0x4

                  STMIAR1,{R2-R4}

                  结果是将R1的寄存器的地址开始重新写入R2-R4新的内存值

 

 

数据交换操作分为:

 

SWP        Rn,R1,[Rn2]  内存和寄存器之间交换

例子         MOV R1,#0x0f

                  MOV R2,#0x12

                  SWP R0,R1,[R2]

                  结果将R2的0x12给R0,接着将R1的0x0f写入到R2的内存中去

 

跳转指令分为:

 

BL 带返回链接跳转指令

AREA hello,CODE,READONLY

         ENTRY

START

 

         Bstrom

         MOVR1,#0x0f

         MOVR2,#0x12

         SWPR0,R1,[R2]

        

         MOVR1,#0x4

         STMIAR1,{R2-R4} 

seond

         LDRBR0,[R1]

         MOVPC,LR

strom

         BLseond

         STRR1,[R0,#0x0C]

         END

 

MRS        把程序状态寄存器值传送到通用寄存器里

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

随行之旅

python国产化自动化

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值