全网最全 Dalvik 指令集解析 !

为什么是全网最全,因为根本没人整理 Dalvik 指令集。。

本文档纯粹作为一个 Dalvik 指令集速查表,相信一定有需要的同学。

手机端可能阅读体验比较差,文末扫码关注公众号,回复 Dalvik 获取本文档 pdf 版本 !

首先说明 Dalvik 虚拟机的基本约定 。

  • Dalvik 寄存器都是 32 位的,64 位数据使用相邻两个寄存器来存储

  • 下表中提到的寄存器对均指相邻两个寄存器。如寄存器对 vAA,指寄存器 vAA,vAA+1

  • 常规类型的 32 位运算码未做任何标记

  • 64 位操作码以 -wide 作为后缀

  • 一般指令中目标寄存器在前,源寄存器在后

  • 寄存器最大数量为 65536

  • 一个大写字母表示 4 位。如 vA 表示前 16 个寄存器之内,vBB 表示前 256 个寄存器之内,vCCCC 表示前 65536 个寄存器之内

下面解释一下表格中的每项内容。

操作码 :十六进制,范围 00 - ff

格式码 :一般三个字符,前两个为数字,最后为字母。第一个数字表示指令有多少个 16 位的字组成。第二个数字表示指令最多使用的寄存器个数。第三个字母是类型码,表示指令所使用的额外数据的类型。

语法 :助记符,smali 语法中就这么表示

说明 : 指令解释

下表为 00 - ff 的所有 Dalvik 指令 :

操作码格式码语法说明
0010xnop空指令
0112xmove vA, vB将寄存器 vB 的内容赋给寄存器 vA
0222xmove/from16 vAA, vBBBB将寄存器 vBBBB 的内容赋给寄存器 vAA。vAA 范围是 0-255,vBBBB 范围是 0-65535
0332xmove/16 vAAAA, vBBBB将寄存器 vBBBB 的内容赋给寄存器 vAAAA。两个寄存器范围都是 0-65535
0412xmove-wide vA, vB将寄存器对 vB 的内容赋给寄存器对 vA
0522xmove-wide/from16 vAA, vBBBB将寄存器对 vBBBB 的内容赋给寄存器对 vAA
0632xmove-wide/16 vAAAA, vBBBB将寄存器对 vBBBB 的内容赋给寄存器对 vAAAA
0712xmove-object vA, vB将寄存器 vB 中的对象引用赋给寄存去 vA
0822xmove-object/from16 vAA, vBBBB将寄存器 vBBBB 中的对象引用赋给寄存对 vAA
0932xmove-object/16 vAAAA, vBBBB将寄存器 vBBBB 中的对象引用赋给寄存去 vAAAA
0a11xmove-result vAA将上一个 invoke-kind 指令的单字非对象结果存入寄存器 vAA
0b11xmove-result-wide vAA将上一个 invoke-kind 指令的双字非对象结果存入寄存器 vAA,vAA+1
0c11xmove-result-object vAA将上一个 invoke-kind 指令的对象结果存入寄存器 vAA
0d11xmove-exception vAA将方法执行过程中抛出的异常存入寄存器 vAA
0e10xreturn-void返回 void
0f11xreturn vAA返回 32 位非对象值
1011xreturn-wide vAA返回 64 位非对象值
1111xreturn-object vAA返回对象引用
1211nconst/4 vA, #+B将给定的 4 位字面值符号扩展为 32 位之后赋给寄存器 vA
1321sconst/16 vAA, #+BBBB将给定的 16 位字面值符号扩展为 32 位之后赋给寄存器 vAA
1431iconst vAA, #+BBBB将给定的字面值赋给寄存器 vAA
1521hconst/high16 vAA, #+BBBB0000将给定的字面值右零扩展为 32 位之后赋给寄存器 vAA,vAA+1
1621sconst-wide/16 vAA, #+BBBB将给定的 16 位字面值符号扩展为 64 位之后赋给寄存器 vAA,vAA+1
1731iconst-wide/32 vAA, #+BBBBBBBB将给定的 32 位字面值符号扩展为 64 位之后赋给寄存器 vAA,vAA+1
1851lconst-wide vAA, #+BBBBBBBBBBBBBBBB将给定的 64 位字面值赋给寄存器 vAA,vAA+1
1921hconst-wide/high16 vAA, #+vBBBB000000000000将给定的 16 位字面值右零扩展为 64 位之后赋给寄存器对 vAA
1a21cconst-string vAA, string@BBBB将字符串索引 BBBB 指向的字符串引用赋给寄存器 vAA
1b31cconst-string/jumbo vAA, string@BBBBBBBB将字符串索引 BBBBBBBB 指向的字符串引用赋给寄存器 vAA
1c21cconst-class vAA, type@BBBB将类型索引 BBBB 指向的类引用赋给寄存器 vAA
1d11xmonitor-enter vAA获取寄存器 vAA 中对象的监视锁
1e11xmonitor-exit vAA释放寄存器 vAA 中对象的监视锁
1f21ccheck-cast vAA type@BBBB将寄存器 vAA 中的对象引用转化为 type@BBBB 指定的类型,若失败抛出 ClassCastException
2022cinstance-of vA, vB type@CCCC判断寄存器 vB 中的对象引用是否为类型 type@CCCC 的实例。如果是给寄存器 vA 赋值为 1,否则赋值为 0
2112xarray-length vA, vB获取寄存器 vB 中的数组的长度并赋给寄存器 vA
2221cnew-instance vAA, type@vBBBB构建指定类型 type@BBBB 的实例对象,并将对象引用赋给寄存器 vAA
2322cnew-array vA, vB, type@CCCC构建指定类型 type@CCCC 和指定大小 vB 的数组,并将数组引用赋给寄存器 vA
2435cfilled-new-array {vC,vD,vE,vF,vG} type@vBBBB构建指定类型 type@BBBB 和指定大小的数组,并使用提供的内容 vC-vG 填充数组。由于数组内容是给定的,所以无需再使用一个寄存器 vA 指定数组大小
253rcfilled-new-array/range {vCCCC..vNNNN} type@BBBB同上,区别是使用一定范围内的寄存器内容来填充数组,数组大小为 N-C+1
2631tfill-array-data vAA, +BBBB使用给定数据 BBBB 填充寄存器 vAA 存储的数组,只能是基本类型数组。BBBB 有特定的格式
2711xthrow vAA抛出寄存器 vAA 指定的异常
2810tgoto +AA无条件跳转至指定偏移处,偏移量 AA 为 8 位
2920tgoto/16 +AAAA无条件跳转至指定偏移处,偏移量 AAAA 为 16 位
2a30tgoto/32 +AAAAAAAA无条件跳转至指定偏移处,偏移量 AAAAAAAA 为 32 位
2b31tpacked-switch vAA, +BBBBBBBB寄存器 vAA 存储的是是希望跳转的偏移量,BBBBBBBB 是一个偏移量表。基于偏移量表查找匹配项,如果存在则跳转,不存在跳转到下一指令
2c31tsparse-switch vAA, +BBBBBBBB
2d23xcmpl-float vAA, vBB, vCC比较两个单精度浮点数。如果寄存器 vBB 的值大于寄存器 vCC 的值,结果为 -1;如果等于,结果为 0;如果小于,结果为 1。NaN 比较返回 -1。结果赋给寄存器 vAA
2e23xcmpg-float vAA, vBB, vCC比较两个单精度浮点数。如果寄存器 vBB 的值大于寄存器 vCC 的值,结果为 1;如果等于,结果为 0;如果小于,结果为 -1。NaN 比较返回 1。结果赋给寄存器 vAA
2f23xcmpl-double vAA, vBB, vCC比较两个双精度浮点数。如果寄存器 vBB 的值大于寄存器 vCC 的值,结果为 -1;如果等于,结果为 0;如果小于,结果为 1。NaN 比较返回 -1。结果赋给寄存器 vAA
3023xcmpg-double vAA, vBB, vCC比较两个双精度浮点数。如果寄存器 vBB 的值大于寄存器 vCC 的值,结果为 1;如果等于,结果为 0;如果小于,结果为 -1。NaN 比较返回 1。结果赋给寄存器 vAA
3123xcmp-long vAA, vBB, vCC比较两个长整型数。如果寄存器 vBB 的值大于寄存器 vCC 的值,结果为 1;如果等于,结果为 0;如果小于,结果为 -1。结果赋给寄存器 vAA
3222tif-eq vA, vB, +CCCC如果寄存器 vA 的值等于 vB 的值,则跳转到指定偏移处,偏移量为 CCCC
3322tif-ne vA, vB, +CCCC如果寄存器 vA 的值不等于 vB 的值,则跳转到指定偏移处,偏移量为 CCCC
3422tif-lt vA, vB, +CCCC如果寄存器 vA 的值小于 vB 的值,则跳转到指定偏移处,偏移量为 CCCC
3522tif-ge vA, vB, +CCCC如果寄存器 vA 的值大于等于 vB 的值,则跳转到指定偏移处,偏移量为 CCCC
3622tif-gt vA, vB, +CCCC如果寄存器 vA 的值大于 vB 的值,则跳转到指定偏移处,偏移量为 CCCC
3722tif-le vA, vB, +CCCC如果寄存器 vA 的值小于等于 vB 的值,则跳转到指定偏移处,偏移量为 CCCC
3821tif-eqz vAA, +BBBB如果寄存器 vAA 的值等于 0,则跳转到指定偏移处,偏移量为 BBBB
3921tif-nez vAA, +BBBB如果寄存器 vAA 的值不等于 0,则跳转到指定偏移处,偏移量为 BBBB
3a21tif-ltz vAA, +BBBB如果寄存器 vAA 的值小于 0,则跳转到指定偏移处,偏移量为 BBBB
3b21tif-gez vAA, +BBBB如果寄存器 vAA 的值大于等于 0,则跳转到指定偏移处,偏移量为 BBBB
3c21tif-gtz vAA, +BBBB如果寄存器 vAA 的值大于 0,则跳转到指定偏移处,偏移量为 BBBB
3d21tif-lez vAA, +BBBB如果寄存器 vAA 的值小于等于 0,则跳转到指定偏移处,偏移量为 BBBB
3e10xunused
3f10xunused
4010xunused
4110xunused
4210xunused
4310xunused
4423xaget vAA, vBB, vCC获取寄存器 vBB 存储的数组指定索引处的元素并赋给寄存器 vAA。寄存器 vCC 的值为指定索引
4523xaget-wide vAA, vBB, vCC获取寄存器 vBB 存储的数组指定索引处的元素(64 位)并赋给寄存器对 vAA。寄存器 vCC 的值为指定索引
4623xaget-object vAA, vBB, vCC获取寄存器 vBB 存储的对象类型数组指定索引处的元素并赋给寄存器 vAA。寄存器 vCC 的值为指定索引
4723xaget-boolean vAA, vBB, vCC获取寄存器 vBB 存储的布尔类型数组指定索引处的元素并赋给寄存器 vAA。寄存器 vCC 的值为指定索引
4823xaget-byte vAA, vBB, vCC获取寄存器 vBB 存储的 byte 类型数组指定索引处的元素并赋给寄存器 vAA。寄存器 vCC 的值为指定索引
4923xaget-char vAA, vBB, vCC获取寄存器 vBB 存储的 char 类型数组指定索引处的元素并赋给寄存器 vAA。寄存器 vCC 的值为指定索引
4a23xaget-short vAA, vBB, vCC获取寄存器 vBB 存储的 short 类型数组指定索引处的元素并赋给寄存器 vAA。寄存器 vCC 的值为指定索引
4b23xaput vAA, vBB, vCC将寄存器 vAA 的值赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
4c23xaput-wide vAA, vBB, vCC将寄存器对 vAA 的值(64 位)赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
4d23xaput-object vAA, vBB, vCC将寄存器 vAA 存储的对象赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
4e23xaput-boolean vAA, vBB, vCC将寄存器 vAA 存储的布尔值赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
4f23xaput-byte vAA, vBB, vCC将寄存器 vAA 存储的 byte 值赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
5023xaput-char vAA, vBB, vCC将寄存器 vAA 存储的 char 值赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
5123xaput-short vAA, vBB, vCC将寄存器 vAA 存储的 short 值赋给寄存器 vBB 存储的数组的指定索引处。寄存器 vCC 存储的值为指定索引
5222ciget vA, vB, field@CCCC获取寄存器 vB 存储的实例的字段,并存入寄存器 vA。字段类型是 CCCC
5322ciget-wide vA, vB, field@CCCC获取寄存器 vB 存储的实例的字段,并存入寄存器对 vA。字段类型是 CCCC
5422ciget-object  vA, vB, field@CCCC获取寄存器 vB 存储的实例的对象类型字段,并存入寄存器 vA。字段类型是 CCCC
5522ciget-boolean vA, vB, field@CCCC获取寄存器 vB 存储的实例的 boolean 类型字段,并存入寄存器 vA。字段类型是 CCCC
5622ciget-byte vA, vB, field@CCCC获取寄存器 vB 存储的实例的 byte 类型字段,并存入寄存器 vA。字段类型是 CCCC
5722ciget-char vA, vB, field@CCCC获取寄存器 vB 存储的实例的 char 类型字段,并存入寄存器 vA。字段类型是 CCCC
5822ciget-short vA, vB, field@CCCC获取寄存器 vB 存储的实例的 short 类型字段,并存入寄存器 vA。字段类型是 CCCC
5922ciput vA, vB, field@CCCC将寄存器 vA 存储的值赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
5a22ciput-wide vA, vB, field@CCCC将寄存器对 vA 存储的值(64位)赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
5b22ciput-object vA, vB, field@CCCC将寄存器 vA 存储的对象类型值赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
5c22ciput-boolean vA, vB, field@CCCC将寄存器 vA 存储的 boolean 类型值赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
5d22ciput-byte vA, vB, field@CCCC将寄存器 vA 存储的 byte 类型值赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
5e22ciput-char vA, vB, field@CCCC将寄存器 vA 存储的 char 类型值赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
5f22ciput-short vA, vB, field@CCCC将寄存器 vA 存储的 short 类型值赋给寄存器 vB 存储的实例的字段。字段类型是 CCCC
6021csget vA, vB, field@CCCC获取寄存器 vB 存储的实例的静态字段,并存入寄存器 vA。字段类型是 CCCC
6121csget-wide vA, vB, field@CCCC获取寄存器 vB 存储的实例的静态字段,并存入寄存器对 vA。字段类型是 CCCC
6221csget-object  vA, vB, field@CCCC获取寄存器 vB 存储的实例的对象类型静态字段,并存入寄存器 vA。字段类型是 CCCC
6321csget-boolean vA, vB, field@CCCC获取寄存器 vB 存储的实例的 boolean 类型静态字段,并存入寄存器 vA。字段类型是 CCCC
6421csget-byte vA, vB, field@CCCC获取寄存器 vB 存储的实例的 byte 类型静态字段,并存入寄存器 vA。字段类型是 CCCC
6521csget-char vA, vB, field@CCCC获取寄存器 vB 存储的实例的 char 类型静态字段,并存入寄存器 vA。字段类型是 CCCC
6621csget-short vA, vB, field@CCCC获取寄存器 vB 存储的实例的 short 类型静态字段,并存入寄存器 vA。字段类型是 CCCC
6721csput vA, vB, field@CCCC将寄存器 vA 存储的值赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6821csput-wide vA, vB, field@CCCC将寄存器对 vA 存储的值(64位)赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6921csput-object vA, vB, field@CCCC将寄存器 vA 存储的对象类型值赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6a21csput-boolean vA, vB, field@CCCC将寄存器 vA 存储的 boolean 类型值赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6b21csput-byte vA, vB, field@CCCC将寄存器 vA 存储的 byte 类型值赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6c21csput-char vA, vB, field@CCCC将寄存器 vA 存储的 char 类型值赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6d21csput-short vA, vB, field@CCCC将寄存器 vA 存储的 short 类型值赋给寄存器 vB 存储的实例的静态字段。字段类型是 CCCC
6e35cinvoke-virtual {vC,vD,vE,vF,vG} meth@BBBB调用实例的虚方法,C~G 是参数寄存器
6f35cinvoke-super {vC,vD,vE,vF,vG} meth@BBBB调用实例的父类方法,C~G 是参数寄存器
7035cinvoke-direct {vC,vD,vE,vF,vG} meth@BBBB调用实例的 private 方法或者构造函数,C~G 是参数寄存器
7135cinvoke-static {vC,vD,vE,vF,vG} meth@BBBB调用实例的 static 方法,C~G 是参数寄存器
7235cinvoke-interface {vC,vD,vE,vF,vG} meth@BBBB调用实例的接口方法,C~G 是参数寄存器
7310xunused
743rcinvoke-virtual/range {vCCCC..vNNNN} meth@BBBB同上。只是参数寄存器表示方式不一样。这里直接使用 vCCCC 到 vNNNN 之间的寄存器,而不是单独指定每个寄存器
753rcinvoke-super/range {vCCCC..vNNNN} meth@BBBB
763rcinvoke-direct/range {vCCCC..vNNNN} meth@BBBB
773rcinvoke-static/range {vCCCC..vNNNN} meth@BBBB
783rcinvoke-interface/range {vCCCC..vNNNN} meth@BBBB
7910xunused
7a10xunused
7b12xneg-int vA, vB对寄存器 vB 存储的整型数求补并存入寄存器 vA
7c12xnot-int vA, vB对寄存器 vB 存储的整型数求反并存入寄存器 vA
7d12xneg-long vA, vB对寄存器对 vB 存储的长整型数求补并存入寄存器对 vA
7e12xnot-long vA, vB对寄存器对 vB 存储的长整型数求反并存入寄存器对 vA
7f12xneg-float vA, vB对寄存器 vB 存储的单精度浮点数求补并存入寄存器 vA
8012xneg-double vA, vB对寄存器对 vB 存储的双精度浮点数求补并存入寄存器对 vA
8112xint-to-long vA, vB将寄存器 vB 中的整型数转换为长整型数,并存入寄存器对 vA
8212xint-to-float vA, vB将寄存器 vB 中的整型数转换为单精度浮点数,并存入寄存器 vA
8312xint-to-double vA, vB将寄存器 vB 中的整型数转换为双精度浮点数,并存入寄存器对 vA
8412xlong-to-int vA, vB将寄存器对 vB 中的长整型数转换为整型数,并存入寄存器 vA
8512xlong-to-float vA, vB将寄存器对 vB 中的长整型数转换为单精度浮点数,并存入寄存器 vA
8612xlong-to-double vA, vB将寄存器对 vB 中的长整型数转换为双精度浮点数,并存入寄存器对 vA
8712xfloat-to-int vA, vB将寄存器 vB 中的单精度浮点数转换为整型数,并存入寄存器 vA
8812xfloat-to-long vA, vB将寄存器 vB 中的单精度浮点数转换为长整型数,并存入寄存器对 vA
8912xfloat-to-double vA, vB将寄存器 vB 中的单精度浮点数转换为双精度浮点数,并存入寄存器 vA
8a12xdouble-to-int vA, vB将寄存器对 vB 中的双精度浮点数转换为整型数,并存入寄存器 vA
8b12xdouble-to-long vA, vB将寄存器对 vB 中的双精度浮点数转换为长整型数,并存入寄存器对 vA
8c12xdouble-to-float vA, vB将寄存器对 vB 中的双精度浮点数转换为单精度浮点数,并存入寄存器 vA
8d12xint-to-byte vA, vB将寄存器对 vB 中的整型数转换为 byte,并存入寄存器 vA
8e12xint-to-char vA, vB将寄存器对 vB 中的整型数转换为 char,并存入寄存器 vA
8f12xint-to-short vA, vB将寄存器对 vB 中的整型数转换为 short,并存入寄存器 vA
9023xadd-int vAA, vBB, vCC将寄存器 vBB 中的整型数加上寄存器 vCC 中的整型数,结果存入寄存器 vAA
9123xsub-int vAA, vBB, vCC将寄存器 vBB 中的整型数减去寄存器 vCC 中的整型数,结果存入寄存器 vAA
9223xmul-int vAA, vBB, vCC将寄存器 vBB 中的整型数乘以寄存器 vCC 中的整型数,结果存入寄存器 vAA
9323xdiv-int vAA, vBB, vCC将寄存器 vBB 中的整型数除以寄存器 vCC 中的整型数,结果存入寄存器 vAA
9423xrem-int vAA, vBB, vCC将寄存器 vBB 中的整型数和寄存器 vCC 中的整型数进行模运算,结果存入寄存器 vAA
9523xand-int vAA, vBB, vCC将寄存器 vBB 中的整型数和寄存器 vCC 中的整型数进行与运算,结果存入寄存器 vAA
9623xor-int vAA, vBB, vCC将寄存器 vBB 中的整型数和寄存器 vCC 中的整型数进行或运算,结果存入寄存器 vAA
9723xxor-int vAA, vBB, vCC将寄存器 vBB 中的整型数和寄存器 vCC 中的整型数进行异或运算,结果存入寄存器 vAA
9823xshl-int vAA, vBB, vCC将寄存器 vBB 中的有符号数左移 vCC 位,结果存入寄存器 vAA
9923xshr-int vAA, vBB, vCC将寄存器 vBB 中的有符号数右移 vCC 位,结果存入寄存器 vAA
9a23xushr-int vAA, vBB, vCC将寄存器 vBB 中的无符号数右移 vCC 位,结果存入寄存器 vAA
9b23xadd-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数加上寄存器对 vCC 中的长整型数,结果存入寄存器对 vAA
9c23xsub-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数减去寄存器对 vCC 中的长整型数,结果存入寄存器对 vAA
9d23xmul-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数乘以寄存器对 vCC 中的长整型数,结果存入寄存器对 vAA
9e23xdiv-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数除以寄存器对 vCC 中的长整型数,结果存入寄存器对 vAA
9f23xrem-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数和寄存器对 vCC 中的长整型数进行模运算,结果存入寄存器对 vAA
a023xand-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数和寄存器对 vCC 中的长整型数进行与运算,结果存入寄存器对 vAA
a123xor-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数和寄存器对 vCC 中的长整型数进行或运算,结果存入寄存器对 vAA
a223xxor-long vAA, vBB, vCC将寄存器对 vBB 中的长整型数和寄存器对 vCC 中的长整型数进行异或运算,结果存入寄存器对 vAA
a323xshl-long vAA, vBB, vCC将寄存器对 vBB 中的有符号长整型数左移 vCC 位,结果存入寄存器对 vAA
a423xshr-long vAA, vBB, vCC将寄存器对 vBB 中的有符号长整型数右移 vCC 位,结果存入寄存器对 vAA
a523xushr-long vAA, vBB, vCC将寄存器对 vBB 中的无符号长整型数右移 vCC 位,结果存入寄存器对 vAA
a623xadd-float vAA, vBB, vCC将寄存器 vBB 中的单精度浮点数加上寄存器 vCC 中的单精度浮点数,结果存入寄存器 vAA
a723xsub-float vAA, vBB, vCC将寄存器 vBB 中的单精度浮点数减去寄存器 vCC 中的单精度浮点数,结果存入寄存器 vAA
a823xmul-float vAA, vBB, vCC将寄存器 vBB 中的单精度浮点数乘以寄存器 vCC 中的单精度浮点数,结果存入寄存器 vAA
a923xdiv-float vAA, vBB, vCC将寄存器 vBB 中的单精度浮点数除以寄存器 vCC 中的单精度浮点数,结果存入寄存器 vAA
aa23xrem-float vAA, vBB, vCC将寄存器 vBB 中的单精度浮点数和寄存器 vCC 中的单精度浮点数进行模运算,结果存入寄存器 vAA
ab23xadd-double vAA, vBB, vCC将寄存器对 vBB 中的双精度浮点数加上寄存器对 vCC 中的双精度浮点数,结果存入寄存器对 vAA
ac23xsub-double vAA, vBB, vCC将寄存器对 vBB 中的双精度浮点数减去寄存器对 vCC 中的双精度浮点数,结果存入寄存器对 vAA
ad23xmul-double vAA, vBB, vCC将寄存器对 vBB 中的双精度浮点数乘以寄存器对 vCC 中的双精度浮点数,结果存入寄存器对 vAA
ae23xdiv-double vAA, vBB, vCC将寄存器对 vBB 中的双精度浮点数除以寄存器对 vCC 中的双精度浮点数,结果存入寄存器对 vAA
af23xrem-double vAA, vBB, vCC将寄存器对 vBB 中的双精度浮点数和寄存器对 vCC 中的双精度浮点数进行模运算,结果存入寄存器对 vAA
b012xadd-int/2addr vA, vB将寄存器 vA 中的整型数加上寄存器 vB 中的整型数,结果存入寄存器 vA
b112xsub-int/2addr vA, vB将寄存器 vA 中的整型数减去寄存器 vB 中的整型数,结果存入寄存器 vA
b212xmul-int/2addr vA, vB将寄存器 vA 中的整型数乘以寄存器 vB 中的整型数,结果存入寄存器 vA
b312xdiv-int/2addr vA, vB将寄存器 vA 中的整型数除以寄存器 vB 中的整型数,结果存入寄存器 vA
b412xrem-int/2addr vA, vB将寄存器 vA 中的整型数和寄存器 vB 中的整型数进行模运算,结果存入寄存器 vA
b512xand-int/2addr vA, vB将寄存器 vA 中的整型数和寄存器 vB 中的整型数进行与运算,结果存入寄存器 vA
b612xor-int/2addr vA, vB将寄存器 vA 中的整型数和寄存器 vB 中的整型数进行或运算,结果存入寄存器 vA
b712xxor-int/2addr vA, vB将寄存器 vA 中的整型数和寄存器 vB 中的整型数进行异或运算,结果存入寄存器 vA
b812xshl-int/2addr vA, vB将寄存器 vA 中的有符号数左移 vB 位,结果存入寄存器 vA
b912xshr-int/2addr vA, vB将寄存器 vA 中的有符号数右移 vB 位,结果存入寄存器 vA
ba12xushr-int/2addr vA, vB将寄存器 vA 中的无符号数左移 vB 位,结果存入寄存器 vA
bb12xadd-long/2addr vA, vB将寄存器对 vA 中的长整型数加上寄存器对 vB 中的长整型数,结果存入寄存器对 vA
bc12xsub-long/2addr vA, vB将寄存器对 vA 中的长整型数减去寄存器对 vB 中的长整型数,结果存入寄存器对 vA
bd12xmul-long/2addr vA, vB将寄存器对 vA 中的长整型数乘以寄存器对 vB 中的长整型数,结果存入寄存器对 vA
be12xdiv-long/2addr vA, vB将寄存器对 vA 中的长整型数除以寄存器对 vB 中的长整型数,结果存入寄存器对 vA
bf12xrem-long/2addr vA, vB将寄存器对 vA 中的长整型数和寄存器对 vB 中的长整型数进行模运算,结果存入寄存器对 vA
c012xand-long/2addr vA, vB将寄存器对 vA 中的长整型数和寄存器对 vB 中的长整型数进行与运算,结果存入寄存器对 vA
c112xor-long/2addr vA, vB将寄存器对 vA 中的长整型数和寄存器对 vB 中的长整型数进行或运算,结果存入寄存器对 vA
c212xxor-long/2addr vA, vB将寄存器对 vA 中的长整型数和寄存器对 vB 中的长整型数进异或运算,结果存入寄存器对 vA
c312xshl-long/2addr vA, vB将寄存器对 vA 中的有符号长整型数左移 vB 位,结果存入寄存器对 vA
c412xshr-long/2addr vA, vB将寄存器对 vA 中的有符号长整型数右移 vB 位,结果存入寄存器对 vA
c512xushr-long/2addr vA, vB将寄存器对 vA 中的无符号长整型数左移 vB 位,结果存入寄存器对 vA
c612xadd-float/2addr vA, vB将寄存器 vA 中的单精度浮点数加上寄存器 vB 中的单精度浮点数,结果存入寄存器 vA
c712xsub-float/2addr vA, vB将寄存器 vA 中的单精度浮点数减去寄存器 vB 中的单精度浮点数,结果存入寄存器 vA
c812xmul-float/2addr vA, vB将寄存器 vA 中的单精度浮点数乘以寄存器 vB 中的单精度浮点数,结果存入寄存器 vA
c912xdiv-float/2addr vA, vB将寄存器 vA 中的单精度浮点数除以寄存器 vB 中的单精度浮点数,结果存入寄存器 vA
ca12xrem-float/2addr vA, vB将寄存器 vA 中的单精度浮点数和寄存器 vB 中的单精度浮点数进行模运算,结果存入寄存器 vA
cb12xadd-double/2addr vA, vB将寄存器对 vA 中的双精度浮点数加上寄存器对 vB 中的双精度浮点数,结果存入寄存器对 vA
cc12xsub-double/2addr vA, vB将寄存器对 vA 中的双精度浮点数减去寄存器对 vB 中的双精度浮点数,结果存入寄存器对 vA
cd12xmul-double/2addr vA, vB将寄存器对 vA 中的双精度浮点数乘以寄存器对 vB 中的双精度浮点数,结果存入寄存器对 vA
ce12xdiv-double/2addr vA, vB将寄存器对 vA 中的双精度浮点数除以寄存器对 vB 中的双精度浮点数,结果存入寄存器对 vA
cf12xrem-double/2addr vA, vB将寄存器对 vA 中的双精度浮点数和寄存器对 vB 中的双精度浮点数进行模运算,结果存入寄存器对 vA
d022sadd-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 相加,结果存入寄存器 vA
d122srsub-int vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 相减,结果存入寄存器 vA
d222smul-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 相乘,结果存入寄存器 vA
d322sdiv-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 相除,结果存入寄存器 vA
d422srem-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 进行模运算,结果存入寄存器 vA
d522sand-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 进行与运算,结果存入寄存器 vA
d622sor-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 进行或运算,结果存入寄存器 vA
d722sxor-int/lit16 vA, vB, #+CCCC将寄存器 vB 中的整型数和 16 位字面量 CCCC 进行异或运算,结果存入寄存器 vA
d822badd-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 相加,结果存入寄存器 vAA
d922brsub-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 相减,结果存入寄存器 vAA
da22bmul-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 相乘,结果存入寄存器 vAA
db22bdiv-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 相除,结果存入寄存器 vAA
dc22brem-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 进行模运算,结果存入寄存器 vAA
dd22band-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 进行与运算,结果存入寄存器 vAA
de22bor-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 进行或运算,结果存入寄存器 vAA
df22bxor-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的整型数和 8 位字面量 CC 进行异或运算,结果存入寄存器 vAA
e022bshl-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的有符号数左移 CC 位,将结果存入寄存器 vAA
e122bshr-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的有符号数右移 CC 位,将结果存入寄存器 vAA
e222bushr-int/lit8 vAA, vBB, #+CC将寄存器 vBB 中的无符号数右移 CC 位,将结果存入寄存器 vAA
e310xunused
e410xunused
e510xunused
e610xunused
e710xunused
e810xunused
e910xunused
ea10xunused
eb10xunused
ec10xunused
ed10xunused
ee10xunused
ef10xunused
f010xunused
f110xunused
f210xunused
f310xunused
f410xunused
f510xunused
f610xunused
f710xunused
f810xunused
f910xunused
fa45ccinvoke-polymorphic {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH调用指定的签名多态方法,存在于 038 和更高版本的 Dex 文件中
fb4rccinvoke-polymorphic/range {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH调用指定的方法句柄,存在于版本 038 及更高版本的 Dex 文件中
fc35cinvoke-custom {vC, vD, vE, vF, vG}, call_site@BBBB解析并调用指定的调用点,存在于版本 038 及更高版本的 Dex 文件中
fd3rcinvoke-custom/range {vCCCC .. vNNNN}, call_site@BBBB解析并调用一个调用点,存在于版本 038 及更高版本的 Dex 文件中
fe21cconst-method-handle vAA, method_handle@BBBB将通过特定索引指定的方法句柄的引用移到指定的寄存器中,存在于版本 039 及更高版本的 Dex 文件中
ff21cconst-method-type vAA, proto@BBBB将通过特定索引指定的方法原型的引用移到指定的寄存器中。存在于版本 039 及更高版本的 Dex 文件中

最后的 fa-ff 由于 DEX 版本问题,其实很少见。

推荐阅读 :

Android逆向笔记 —— DEX 文件格式解析

Android 逆向笔记 —— 说说 Dalvik 及其指令集


文章首发微信公众号: 秉心说 , 专注 Java 、 Android 原创知识分享,LeetCode 题解。

扫码关注,回复 Dalvik 获取 Dalvik 指令集大全 pdf 版本 !

发布了78 篇原创文章 · 获赞 6 · 访问量 6万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章