深入理解Android:Java虚拟机ART
上QQ阅读APP看书,第一时间看更新

3.3 Dex指令码介绍

Dex指令码的条数和Class指令码差不多,都不超过255条,但是Dex文件中存储函数内容的insns数组(位于code_item结构体里,见图3-8)却比Class文件中存储函数内容的code数组(位于Code属性中,见第2章图2-7)解析起来要有难度。其中一个原因是Android虚拟机在执行指令码的时候不需要操作数栈,所有参数要么和Class指令码一样直接跟在指令码后面,要么就存储在寄存器中。对于参数位于寄存器中的指令,指令码就需要携带一些信息来表示该指令执行时需要操作哪些寄存器。此外,虽然官方文档 Dex指令码格式Android官方介绍,https://source.android.com/devices/tech/dalvik/dalvik-bytecode。Dex指令码格式的官方介绍,同时介绍了所有指令码的信息。https://source.android.com/devices/tech/dalvik/instruction-formats。关于Dex指令码格式所采用的描述规则的说明。上一篇文档在介绍Dex指令码时使用了一些特殊的描述语法,本文档就是介绍这些描述语法的。详细介绍了所有Dex指令码的格式和含义,但是它采用了一种特别的语法来描述它们,所以初学者读官方文档时会感觉比较难懂。

鉴于开发者碰到具体指令码的时候一定会求助于官方文档,所以本节将把重点放在帮助读者如何阅读理解官方文档上。先来看insns数组里数据的组织形式。