Dalvik指令集
- 寄存器的定义
.locals
定义寄存器的数量
- 函数的定义
.method
函数的开始end
函数的结束
- 数据操作指令
move vA,vB
将vB寄存器的值赋予vA寄存器move/16 vAA,vBB
定义了数据宽度为16位move-object vA,vB
用于对象赋值move-object/16 vAA,vBB
定义数据宽度
- 返回指令
return vAA
返回vAA寄存器的值return-object
返回对象
- 数据的定义指令
const
数据定义const-string
定义一个字符串
- 实例操作指令
check-cast vAA,type@BB
将vAA寄存器的对象引用转换成指定类型instance-of vA,vB,type@CC
将判断vB寄存器的对象引用是否可以转换为指定类型,是vA=1,反正vA=0new-instance vAA,type@AAA
构造一个指定类型的新实例
- 数组操作指令
array-length vA,vB
获取vB寄存器中的数组长度,结果赋予vA寄存器new-array vA,vB,type@CC
构造指定类型和大小(vB)的数组,结果赋予vA
- 异常
throw vAA
抛出vAA寄存器中指定类型的异常
- 指令跳转
goto
无条件跳转packed-switch vAA,+BB
分支跳转指令,+BB只想递增偏移表sparse-switch vAA,+BB
分支跳转,无规律
- if跳转指令
if-test
eq
等于ne
不等于lt
小于le
小于等于ge
大于大于gt
大于nez
不等于0nqz
等于0
- 比较指令
cmp-float
比较两个单精度浮点数cmp-double
比较双精度浮点数cmp-long
比较两个长整型
- 字段操作
- 普通字段以"i"开头
iget
读操作iput
写操作
- 静态字段以"s"开头
sget
读操作sput
写操作
- 普通字段以"i"开头
- 方法调用
invoke-virtual
调用实例虚方法invoke-super
调用实例的父类方法invoke-direct
调用实例的直接方法invoke-static
调用实例的静态方法