1、Dalvik指令格式
指令语法由指令的位描述与指令格式标识来决定。
位描述
约定如下:
- 每16位的字采用空格分隔开来。
- 每个字母表示四位,每个字母按顺序从高字节开始,排列到低字节。每四位之间可能使用竖线“|”来表示不同的内容。
- 顺序采用A-Z的单个大写字母作为一个4位的操作码,op表示一个8位的操作码。
- “Ø”来表示这字段的所有位为0值。
例:A|G|op BBBB F|E|D|C
此条指令由三个16位的字组成。
- 第一个16位:
A|G|op
,高8位为A和G,低字节为操作码op。 - 第二个16位:
BBBB
,表示一个16位的偏移值。 - 第三个16位:F、E、D、C,这里表示寄存器参数。
指令格式标识
约定如下:
- 指令格式标识大多由三个字符组成,前两个是数字,最后一个是字母。
- 第一个数字表示指令由多少个16位的字组成
- 第二个数字表示指令最多使用寄存器的个数。特殊标记“r”标识使用一定范围内的寄存器。
- 第三个字母为类型码,表示指令用到的额外数据的类型。取值如下:
助记符 | 位大小 | 说明 |
---|---|---|
b | 8 | 8位有符号立即数 |
c | 16,32 | 常量池索引 |
f | 16 | 接口常量(仅对静态链接格式有效) |
h | 16 | 有符号立即数(32位或64位数的高值位,低值位为0) |
i | 32 | 立即数,有符号整数或32位浮点数 |
l | 64 | 立即数,有符号整数或64位双精度浮点数 |
m | 16 | 方法常量(仅对静态链接格式有效) |
n | 4 | 4位的立即数 |
s | 16 | 短整型立即数 |
t | 8,16,32 | 跳转、分支 |
x | 0 | 无额外数据 |
特殊情况:末尾可能会多出另一个字母,如果是s表示指令采用静态链接,如果是i表示指令应该被内联处理。
例: 22x
- 第一个数字2表示指令由两个16位字组成
- 第二个数字2表示指令使用到2个寄存器
- 第三个字母x表示没有使用到额外的数据
Dalvik语法说明ÿ