全網最全 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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章