Dalvik虚拟机指令格式
2011-10-24 17:28
183 查看
要分析Dalvik虚拟机运行,就先要了解Davlik指令,了解Davlik指令之前又要先懂得指令的格式,这样在代码里看到指令时,就会知道这条指令是干什么用了。在Dalvik虚拟机的目录下面有这样一份文档,如下:
1、关于指令的位描述
关于每个指令位的布局情况,约定:
每16位的字采用空格分隔开来。
每个字母表示四位,每个字母按顺序从高节开始,排列到低字节。每四位之间可能使用竖线(|)来表示不同的内容,提高对指令的可读性。
采用大写字母A、B等来表示四位操作码,op来表示八位操作码。
0来表示这字段所有位为0值。
以指令格式为“B|A|op CCCC”为例:
因为中间有空格分隔,每个分开的表示16位字,所以表示这条指令有两个16位的字组成。第一个16位是“B|A|op”,高字节由B和A组成,低字节由操作码op组成。第二个16位是由CCCC组成,它表示一个16位的值。
2、指令格式的标识
关于指令的格式编码,约定:
指令的格式编码是由三个字符组成,前两个是数字,最后一个是字母。
第一个数字是表示有多少个16位的字组成这条指令。
第二个数字是表示这条指令最多使用多少个寄存器。
第三个是字母,表示指令另外的数据处理。
以格式编码“21t”为例:
表示有两个16位字组成,使用一个寄存器,t表示有一个分支。还有可能在最后面添加一个字母s,表示静态连接。
下表定义了后面可出现的字母和其含义:
3、语法说明
关于描述指令的工作过程,约定:
每条指令从操作码开始,接着紧跟后面的参数,参数的个数是不定的,每个参数使用逗号分开。
使用一个字母表示4位。
当一个参数是寄存器表示时,采用“vX”的方式,这里采用v而不采用r是避免与代码里表示有冲突。
当参数是一个常量数字时用“#+X”的方式表示。
当参数是访问相对地址时用“+X”的方式表示。
当参数是常量池索引时用“kind@X”的方式表示,其中kind表示哪一个常量池被使用。
登录为: 读者 (reader)
1、关于指令的位描述
关于每个指令位的布局情况,约定:
每16位的字采用空格分隔开来。
每个字母表示四位,每个字母按顺序从高节开始,排列到低字节。每四位之间可能使用竖线(|)来表示不同的内容,提高对指令的可读性。
采用大写字母A、B等来表示四位操作码,op来表示八位操作码。
0来表示这字段所有位为0值。
以指令格式为“B|A|op CCCC”为例:
因为中间有空格分隔,每个分开的表示16位字,所以表示这条指令有两个16位的字组成。第一个16位是“B|A|op”,高字节由B和A组成,低字节由操作码op组成。第二个16位是由CCCC组成,它表示一个16位的值。
2、指令格式的标识
关于指令的格式编码,约定:
指令的格式编码是由三个字符组成,前两个是数字,最后一个是字母。
第一个数字是表示有多少个16位的字组成这条指令。
第二个数字是表示这条指令最多使用多少个寄存器。
第三个是字母,表示指令另外的数据处理。
以格式编码“21t”为例:
表示有两个16位字组成,使用一个寄存器,t表示有一个分支。还有可能在最后面添加一个字母s,表示静态连接。
下表定义了后面可出现的字母和其含义:
字母 | 位数 | 意义 |
---|---|---|
b | 8 | 立即无符号字节。(byte) |
c | 16,32 | 常量池索引 |
f | 16 | 接口常量 |
h | 16 | 表示高位上的值。 |
i | 32 | 立即无符号整数,或32位浮点数。 |
l | 64 | 立即无符号长整数,或者64位双精度浮点数。 |
m | 16 | 方法常量。 |
n | 4 | 立即无符号半字节数。 |
s | 16 | 立即无符号短整数。 |
t | 8,16,32 | 跳转,分支。 |
x | 0 | 没有另外数据。 |
关于描述指令的工作过程,约定:
每条指令从操作码开始,接着紧跟后面的参数,参数的个数是不定的,每个参数使用逗号分开。
使用一个字母表示4位。
当一个参数是寄存器表示时,采用“vX”的方式,这里采用v而不采用r是避免与代码里表示有冲突。
当参数是一个常量数字时用“#+X”的方式表示。
当参数是访问相对地址时用“+X”的方式表示。
当参数是常量池索引时用“kind@X”的方式表示,其中kind表示哪一个常量池被使用。
登录为: 读者 (reader)
相关文章推荐
- Android培训班(59)Dalvik虚拟机的指令格式
- Android培训班(59)Dalvik虚拟机的指令格式
- Dalvik虚拟机的指令格式
- Dalvik技术揭秘之四-Dalvik虚拟机的指令格式
- Android培训班(59)Dalvik虚拟机的指令格式
- Smali--Dalvik虚拟机指令语言
- Smali--Dalvik虚拟机指令语
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Dalvik 虚拟机指令
- Smali--Dalvik虚拟机指令语言
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- 为什么Lua虚拟机指令的格式是BCAop而不是CBAop?
- Smali--Dalvik虚拟机指令语言
- Smali-Dalvik虚拟机指令语言
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】
- Dalvik虚拟机【2】——Dex文件格式
- Smali--Dalvik虚拟机指令语言-->【android_smali语法学习一】