ARM汇编语言程序结构

584 阅读3分钟

@[toc]

1. ARM 汇编规范

  1. 所有的符号都必须在一行书写,在后面不用添加高级语言所用的分号。

  2. ARM汇编器对标识符的大小写敏感,书写符号以及指令时字母大小写一定要一致。

  3. 一条ARM指令,伪指令。寄存器名可以全部写为大写字母,也可以全部为小写字母, 但是不能大小写混合编写使用。

  4. 注释使用(分号),注释内容由(分号)开始到执行结束。

例如:

[符号]   <指令|条件|S>  <操作数>[;注释]

正确: 在这里插入图片描述 错误: 在这里插入图片描述

2. 符号

符号的命名规则:

  1. 符号由大小写字母、数字以及下划线组成;

  2. 除局部标号以数字开头外,其它的符号不能以数字开头;

  3. 符号区分大小写,且所有字符都是有意义的;

  4. 符号在其作用域范围内必须是唯一的;

  5. 符号不能与系统内部或系统预定义的符号同名;

  6. 符号不要与指令助记符、伪指令同名。

3. 常量

常量的分类:

(1)数字常数

数字常量有三种表示方式:

十进制数,如:12,5,876,0。

十六进制数,如0x4387,0xFF0, 0x1。

n 进制数,用n-XXX 表示,其中n 为2~9,XXX 为具体的数。 如:

2-0101118-4363156

(2)字符常量

字符常量由一对单引号及中间字符串表示,标准C 语言中的转义符也可使用。如果需要包含双引号或“”,必须使用“” 和”,必须使用“”和$代替。如:

Hello SETS “Hello World!”
Errorl SETS “The parameter ““VFH””error$$2

(3) 布尔常量

布尔常量的逻辑真为{TRUE},逻辑假为{FALSE}。 如:

testno SETS {FALSE}

4. ARM 指令的格式

ARM是三地址指令格式,指令的基本格式为:

<opcode> {<cond>} {s} <Rd>, <Rn> {,<operand2>}
  • opcode: 指令助记符

  • cond: 执行条件

  • s: 是否影响CPSR寄存器的值

  • .w:指令宽度说明符.w表示是32位

  • .n:指令宽度说明符.n表示是16位

  • Rd: 目标寄存器

  • Rn: 第一个操作数的寄存器

  • operand2: 第二个操作数

5. ARM 指令的条件域

在这里插入图片描述

6. Android操作系统

  • Android嵌入式智能操作系统是基于Linux内核

  • Linux是基于ARM平台

7. 反编译可执行程序

  • .dex文件 -> smali汇编

  • 可执行程序 -> ARM汇编

8. 小结

(1)ARM汇编规范

  • 在ARM汇编中所有符号必须一行书写,不用添加分号。

  • 编写ARM指令时必须全部为大写或小写。

  • 注释使用冒号。

(2)ARM指令的格式

<opcode> {<cond>} {s} <Rd>, <Rn> {,<operand2>}

其中<>号内的项是必须的,{}号内的项是可选的。

(3)指令条件域

指令条件域
eq:相等/z=1ne:不相等/标志z=0
hi:无符号数大于/c=1,z=0cs/hs:无符号数大于或等于/c=1
cc/lo:无符号数小于/c=0ls:无符号数小于或等于/c=0,z=1
gt:有符号数大于/z=0,n=vge:有符号数大于或等于/n=v
lt:有符号数小于/n!=vle:有符号数小于或等于/z=1,n!=v
mi:负数/n=1pl:整数或0/n=0
vs:溢出/v=1vc:没有溢出