Dalvik指令
指令语法由指令的位描述和指令格式标识来决定
每16位的字采用空格分割开来
每个字母表示四位,按从高字节到低字节,每四位可用|来表示不同的内容
A-Z的单个大写字母作为一个4位操作码,op表示一个8位的操作码
“Ø”来表示这字段所有位为0值
如 A|G|op BBBB F|E|D|C 第一个16位为A|G|op,其中A|G为高8位,op操作码为低8位
BBBB 表示一个16位的偏移值 F|E|D|C共四个字节,表示寄存器参数
指令格式标识
- 大多由三个字符组成,前两个数字,最后一个是字母
- 第一个表示指令有多少个16位的字
- 第二个表示指令有多少个寄存器、
- 字母表示类型码
有一种特殊的情况是最后末尾多出一个字母,s表示采用静态链接,i表示内联处理
助记符 位大小 说明
b 8 8位有符号立即数
c 16,32 常量池索引
f 16 接口常量(仅对静态链接格式有效)
h 16有符号立即数(32位或64位数的高值位,低值位为0)
i 32 立即数,有符号整数或32位浮点数
l 64立即数,有符号整数或64位双精度浮点数http://
m 16 方法常量(仅对静态链接格式有效)
n 4 4位的立即数
s 16 短整型立即数
t 8,16,32 跳转、分支
x 0 无额外数据
关于Dalvik字节码解析可参考Bytecodefor the Dalvik VM和DalvikVM Instruction Formats,一个是指令的位描述表,一个是指令的语法格式表.
来自 <http://blog.csdn.net/q327611906/article/details/50012869>
http://www.netmite.com/android/mydroid/dalvik/docs/dalvik-bytecode.html
http://www.netmite.com/android/mydroid/dalvik/docs/instruction-formats.html