往期推荐
Dalvik的指令格式:
基础字节码 - 名称后缀/字节码后缀 目的寄存器 源寄存器
(连接符号“- ”在有的指令里是可以不存在的)
名称后缀是wide,表示数据宽度为64位
字节码后缀是from16,表示源寄存器为16位
例如:move-wide/from16 vAA,VBBBB:
move为基础字节码,即opcode。
wide为名称后缀,标识指令操作的数据宽度为64位。
from16为字节码后缀,标识源为一个16位的寄存器引用变量。
vAA为目的寄存器, 它始终在源的前面,取值范围为v0~v255。
vBBBB为源寄存器,取值范围为v0~v65535。
Dalvik 指令集中大多数指令用到了寄存器作为目的操作数或源操作数,其中 A/B/C/D/E/F/G/H 代表一个4位的数值,AA/BB/…/HH代表一个8位的数值,AAAA/BBBB/…/HHHH 代表一个16位的数值。
空操作指令
空操作指令的助记符为nop。它的值为00,通常nop指令被用来做对齐代码之用,无实际操作。
数据操作指令
数据操作指令为move。move 指令根据字节码大小与类型不同,后面会跟上不同的后缀,表达的意义也就不同。
“move vA, vB”:将vB寄存器的值赋给vA寄存器,源寄存器与目的寄存器都为4位。
“move/from16 vAA, vBBBB”:将vBBBB寄存器的值赋给vAA寄存器,寄存器为16位,目的寄存器为8位。
“move/16 vAAAA, vBBBB”:将vBBBB寄存器的值赋给vAAAA寄存器,源寄存器与目的寄存器都为16位。
“move-wide vA, vB”:为4位的寄存器对赋值。源寄存器与目的寄存器都为4位。
“move-object vA, vB”:object是对象的意思,出现这个词即表示为对象赋值。源寄存器与目的寄存器都为4位。