[置顶] 第6章 andriod ARM 实战番外篇 2

 

ARM实战番外篇2

 

使用的工具是ARM的ADS

 

ARM堆栈

 

1、 当堆栈指针指向最上头的一个地址时称为:满堆栈

2、 当堆栈指针指向最上头的一个地址的上个地址称为:空堆栈

3、 当堆栈指针从低地址向高地址压栈的时候称为:递增压栈

4、 当堆栈指针从高地址向低地址压栈的时候称为:递减压栈

5、 什么情况的时候需要使用的递增递减压栈?是寄存器和内存中读取的时候(LDR、STR)

 

 

ARM数据操作(AUL)

 

1、 数据操作分为:数学操作、逻辑操作、比较操作

数学操作

1)      ADD R0,R0,#4     加法运算

2)      ADDS R0,R0,#4                  S带表标识位

3)      ADDS R2,R0,R1                 将R0+R1的值给R2

4)      ADC Rd,Rn,Op2                 C是进位标识符,整行意思Rn+Op2+C

5)      MOV R1,R2               将R2的值传给R1

6)      MVN R3,#4                将5)中的R2-0x4传给R3

7)      SUB R3,R1,R2           R1-R2

8)      RSB R3,R1,R2            R2-R1

9)      RSC R3,R1,R2            R2-R1-C

10)   MUL R3,R1,R2          R1*R2            (注意:只保留32位的乘法)

11)   MLA R4,R1,R2,R3    R1*R2+R3   (注意:32位累加乘法)

12)   UMULL R1,R2,R3,R4        (R1,R2)=R3*R4 

(注意:无符号的64位乘法,U代表无符号,最后的L代表长整型,R1R2是代表寄存器,R1低位,R2高位因为采用了小端模式)

13)   UMLAL R1,R2,R3,R4  (R1,R2)=R3*R4+(R1,R2)   (注意:64位累加乘法)

14)   SMULL R1,R2,R3,R4                 (注意:有符号的64位乘法)

15)   SMLAL R1,R2,R3,R4                  (注意:有符号的64位累加乘法)

重点掌握ADDADCSUBMOVMVNMULMLA

 

逻辑操作

1)      AND 就是逻辑“与” R3=R1&#4

例子:     MOVR1,#0x0100

                   MOVR2,#0x0104

                   ANDR0,R1,R2

                   0x0100转换2进制为:100000000

                   0x0104转换2进制为:100000100

                   最后R0为100000000

2)      ORR 就是逻辑“或”

例子:     MOVR1,#0x0100

                   MOVR2,#0x0104

                   ORRR0,R1,R2

                   0x0100转换2进制为:100000000

                   0x0104转换2进制为:100000100

                   最后R0为100000100

 

3)      EOR就是逻辑“异或”

例子:     MOVR1,#0x0100

                   MOVR2,#0x0104

                   EORR0,R1,R2

0x0100转换2进制为:100000000

                   0x0104转换2进制为:100000100

                   最后R0为000000100

 

 

4)      BIC是逻辑“位清零逻辑非”

例子:     MOVR1,#0x0100

                   MOVR2,#0x0104

                   EORR0,R1,R2

0x0100转换2进制为:100000000

                   0x0104转换2进制为:100000100

                   最后R0为000000100

 

比较操作

1)     CMP 比较运算R0-Op2  把比较的值存到CPSR位上S上

2)     CMN 负数比较运算 R0-(-Op2) 这个也把比较的值存到CPSR位上S上

3)     TEQ 测试相等R0^Op2 逻辑异或关系有值就保存到CPSR位上

4)     TET 测试R0&Op2  逻辑与的关系有值就保存到CPSR位上

 

 

 

你可能感兴趣的:([置顶] 第6章 andriod ARM 实战番外篇 2)