@[toc]
1. ARM 汇编规范
-
所有的符号都必须在一行书写,在后面不用添加高级语言所用的分号。
-
ARM汇编器对标识符的大小写敏感,书写符号以及指令时字母大小写一定要一致。
-
一条ARM指令,伪指令。寄存器名可以全部写为大写字母,也可以全部为小写字母, 但是不能大小写混合编写使用。
-
注释使用(分号),注释内容由(分号)开始到执行结束。
例如:
[符号] <指令|条件|S> <操作数>[;注释]
正确:
错误:
2. 符号
符号的命名规则:
-
符号由大小写字母、数字以及下划线组成;
-
除局部标号以数字开头外,其它的符号不能以数字开头;
-
符号区分大小写,且所有字符都是有意义的;
-
符号在其作用域范围内必须是唯一的;
-
符号不能与系统内部或系统预定义的符号同名;
-
符号不要与指令助记符、伪指令同名。
3. 常量
常量的分类:
(1)数字常数
数字常量有三种表示方式:
十进制数,如:12,5,876,0。
十六进制数,如0x4387,0xFF0, 0x1。
n 进制数,用n-XXX 表示,其中n 为2~9,XXX 为具体的数。 如:
2-010111,8-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=1 | ne:不相等/标志z=0 |
| hi:无符号数大于/c=1,z=0 | cs/hs:无符号数大于或等于/c=1 |
| cc/lo:无符号数小于/c=0 | ls:无符号数小于或等于/c=0,z=1 |
| gt:有符号数大于/z=0,n=v | ge:有符号数大于或等于/n=v |
| lt:有符号数小于/n!=v | le:有符号数小于或等于/z=1,n!=v |
| mi:负数/n=1 | pl:整数或0/n=0 |
| vs:溢出/v=1 | vc:没有溢出 |