全網最全 Dalvik 指令集解析 !

爲何是全網最全,由於根本沒人整理 Dalvik 指令集。。數組

本文檔純粹做爲一個 Dalvik 指令集速查表,相信必定有須要的同窗。微信

文末掃碼關注公衆號,回覆 Dalvik 獲取本文檔 pdf 版本 !ide

首先說明 Dalvik 虛擬機的基本約定 。函數

  • Dalvik 寄存器都是 32 位的,64 位數據使用相鄰兩個寄存器來存儲
  • 下表中提到的寄存器對均指相鄰兩個寄存器。如寄存器對 vAA,指寄存器 vAA,vAA+1
  • 常規類型的 32 位運算碼未作任何標記
  • 64 位操做碼以 -wide 做爲後綴
  • 通常指令中目標寄存器在前,源寄存器在後
  • 寄存器最大數量爲 65536
  • 一個大寫字母表示 4 位。如 vA 表示前 16 個寄存器以內,vBB 表示前 256 個寄存器以內,vCCCC 表示前 65536 個寄存器以內

下面解釋一下表格中的每項內容。post

操做碼 :十六進制,範圍 00 - ffspa

格式碼 :通常三個字符,前兩個爲數字,最後爲字母。第一個數字表示指令有多少個 16 位的字組成。第二個數字表示指令最多使用的寄存器個數。第三個字母是類型碼,表示指令所使用的額外數據的類型。3d

語法 :助記符,smali 語法中就這麼表示code

說明 : 指令解釋cdn

下表爲 00 - ff 的全部 Dalvik 指令 :xml

操做碼 格式碼 語法 說明
00 10x nop 空指令
01 12x move vA, vB 將寄存器 vB 的內容賦給寄存器 vA
02 22x move/from16 vAA, vBBBB 將寄存器 vBBBB 的內容賦給寄存器 vAA。vAA 範圍是 0-255,vBBBB 範圍是 0-65535
03 32x move/16 vAAAA, vBBBB 將寄存器 vBBBB 的內容賦給寄存器 vAAAA。兩個寄存器範圍都是 0-65535
04 12x move-wide vA, vB 將寄存器對 vB 的內容賦給寄存器對 vA
05 22x move-wide/from16 vAA, vBBBB 將寄存器對 vBBBB 的內容賦給寄存器對 vAA
06 32x move-wide/16 vAAAA, vBBBB 將寄存器對 vBBBB 的內容賦給寄存器對 vAAAA
07 12x move-object vA, vB 將寄存器 vB 中的對象引用賦給寄存去 vA
08 22x move-object/from16 vAA, vBBBB 將寄存器 vBBBB 中的對象引用賦給寄存對 vAA
09 32x move-object/16 vAAAA, vBBBB 將寄存器 vBBBB 中的對象引用賦給寄存去 vAAAA
0a 11x move-result vAA 將上一個 invoke-kind 指令的單字非對象結果存入寄存器 vAA
0b 11x move-result-wide vAA 將上一個 invoke-kind 指令的雙字非對象結果存入寄存器 vAA,vAA+1
0c 11x move-result-object vAA 將上一個 invoke-kind 指令的對象結果存入寄存器 vAA
0d 11x move-exception vAA 將方法執行過程當中拋出的異常存入寄存器 vAA
0e 10x return-void 返回 void
0f 11x return vAA 返回 32 位非對象值
10 11x return-wide vAA 返回 64 位非對象值
11 11x return-object vAA 返回對象引用
12 11n const/4 vA, #+B 將給定的 4 位字面值符號擴展爲 32 位以後賦給寄存器 vA
13 21s const/16 vAA, #+BBBB 將給定的 16 位字面值符號擴展爲 32 位以後賦給寄存器 vAA
14 31i const vAA, #+BBBB 將給定的字面值賦給寄存器 vAA
15 21h const/high16 vAA, #+BBBB0000 將給定的字面值右零擴展爲 32 位以後賦給寄存器 vAA,vAA+1
16 21s const-wide/16 vAA, #+BBBB 將給定的 16 位字面值符號擴展爲 64 位以後賦給寄存器 vAA,vAA+1
17 31i const-wide/32 vAA, #+BBBBBBBB 將給定的 32 位字面值符號擴展爲 64 位以後賦給寄存器 vAA,vAA+1
18 51l const-wide vAA, #+BBBBBBBBBBBBBBBB 將給定的 64 位字面值賦給寄存器 vAA,vAA+1
19 21h const-wide/high16 vAA, #+vBBBB000000000000 將給定的 16 位字面值右零擴展爲 64 位以後賦給寄存器對 vAA
1a 21c const-string vAA, string@BBBB 將字符串索引 BBBB 指向的字符串引用賦給寄存器 vAA
1b 31c const-string/jumbo vAA, string@BBBBBBBB 將字符串索引 BBBBBBBB 指向的字符串引用賦給寄存器 vAA
1c 21c const-class vAA, type@BBBB 將類型索引 BBBB 指向的類引用賦給寄存器 vAA
1d 11x monitor-enter vAA 獲取寄存器 vAA 中對象的監視鎖
1e 11x monitor-exit vAA 釋放寄存器 vAA 中對象的監視鎖
1f 21c check-cast vAA type@BBBB 將寄存器 vAA 中的對象引用轉化爲 type@BBBB 指定的類型,若失敗拋出 ClassCastException
20 22c instance-of vA, vB type@CCCC 判斷寄存器 vB 中的對象引用是否爲類型 type@CCCC 的實例。若是是給寄存器 vA 賦值爲 1,不然賦值爲 0
21 12x array-length vA, vB 獲取寄存器 vB 中的數組的長度並賦給寄存器 vA
22 21c new-instance vAA, type@vBBBB 構建指定類型 type@BBBB 的實例對象,並將對象引用賦給寄存器 vAA
23 22c new-array vA, vB, type@CCCC 構建指定類型 type@CCCC 和指定大小 vB 的數組,並將數組引用賦給寄存器 vA
24 35c filled-new-array {vC,vD,vE,vF,vG} type@vBBBB 構建指定類型 type@BBBB 和指定大小的數組,並使用提供的內容 vC-vG 填充數組。因爲數組內容是給定的,因此無需再使用一個寄存器 vA 指定數組大小
25 3rc filled-new-array/range {vCCCC..vNNNN} type@BBBB 同上,區別是使用必定範圍內的寄存器內容來填充數組,數組大小爲 N-C+1
26 31t fill-array-data vAA, +BBBB 使用給定數據 BBBB 填充寄存器 vAA 存儲的數組,只能是基本類型數組。BBBB 有特定的格式
27 11x throw vAA 拋出寄存器 vAA 指定的異常
28 10t goto +AA 無條件跳轉至指定偏移處,偏移量 AA 爲 8 位
29 20t goto/16 +AAAA 無條件跳轉至指定偏移處,偏移量 AAAA 爲 16 位
2a 30t goto/32 +AAAAAAAA 無條件跳轉至指定偏移處,偏移量 AAAAAAAA 爲 32 位
2b 31t packed-switch vAA, +BBBBBBBB 寄存器 vAA 存儲的是是但願跳轉的偏移量,BBBBBBBB 是一個偏移量表。基於偏移量表查找匹配項,若是存在則跳轉,不存在跳轉到下一指令
2c 31t sparse-switch vAA, +BBBBBBBB
2d 23x cmpl-float vAA, vBB, vCC 比較兩個單精度浮點數。若是寄存器 vBB 的值大於寄存器 vCC 的值,結果爲 -1;若是等於,結果爲 0;若是小於,結果爲 1。NaN 比較返回 -1。結果賦給寄存器 vAA
2e 23x cmpg-float vAA, vBB, vCC 比較兩個單精度浮點數。若是寄存器 vBB 的值大於寄存器 vCC 的值,結果爲 1;若是等於,結果爲 0;若是小於,結果爲 -1。NaN 比較返回 1。結果賦給寄存器 vAA
2f 23x cmpl-double vAA, vBB, vCC 比較兩個雙精度浮點數。若是寄存器 vBB 的值大於寄存器 vCC 的值,結果爲 -1;若是等於,結果爲 0;若是小於,結果爲 1。NaN 比較返回 -1。結果賦給寄存器 vAA
30 23x cmpg-double vAA, vBB, vCC 比較兩個雙精度浮點數。若是寄存器 vBB 的值大於寄存器 vCC 的值,結果爲 1;若是等於,結果爲 0;若是小於,結果爲 -1。NaN 比較返回 1。結果賦給寄存器 vAA
31 23x cmp-long vAA, vBB, vCC 比較兩個長整型數。若是寄存器 vBB 的值大於寄存器 vCC 的值,結果爲 1;若是等於,結果爲 0;若是小於,結果爲 -1。結果賦給寄存器 vAA
32 22t if-eq vA, vB, +CCCC 若是寄存器 vA 的值等於 vB 的值,則跳轉到指定偏移處,偏移量爲 CCCC
33 22t if-ne vA, vB, +CCCC 若是寄存器 vA 的值不等於 vB 的值,則跳轉到指定偏移處,偏移量爲 CCCC
34 22t if-lt vA, vB, +CCCC 若是寄存器 vA 的值小於 vB 的值,則跳轉到指定偏移處,偏移量爲 CCCC
35 22t if-ge vA, vB, +CCCC 若是寄存器 vA 的值大於等於 vB 的值,則跳轉到指定偏移處,偏移量爲 CCCC
36 22t if-gt vA, vB, +CCCC 若是寄存器 vA 的值大於 vB 的值,則跳轉到指定偏移處,偏移量爲 CCCC
37 22t if-le vA, vB, +CCCC 若是寄存器 vA 的值小於等於 vB 的值,則跳轉到指定偏移處,偏移量爲 CCCC
38 21t if-eqz vAA, +BBBB 若是寄存器 vAA 的值等於 0,則跳轉到指定偏移處,偏移量爲 BBBB
39 21t if-nez vAA, +BBBB 若是寄存器 vAA 的值不等於 0,則跳轉到指定偏移處,偏移量爲 BBBB
3a 21t if-ltz vAA, +BBBB 若是寄存器 vAA 的值小於 0,則跳轉到指定偏移處,偏移量爲 BBBB
3b 21t if-gez vAA, +BBBB 若是寄存器 vAA 的值大於等於 0,則跳轉到指定偏移處,偏移量爲 BBBB
3c 21t if-gtz vAA, +BBBB 若是寄存器 vAA 的值大於 0,則跳轉到指定偏移處,偏移量爲 BBBB
3d 21t if-lez vAA, +BBBB 若是寄存器 vAA 的值小於等於 0,則跳轉到指定偏移處,偏移量爲 BBBB
3e 10x unused
3f 10x unused
40 10x unused
41 10x unused
42 10x unused
43 10x unused
44 23x aget vAA, vBB, vCC 獲取寄存器 vBB 存儲的數組指定索引處的元素並賦給寄存器 vAA。寄存器 vCC 的值爲指定索引
45 23x aget-wide vAA, vBB, vCC 獲取寄存器 vBB 存儲的數組指定索引處的元素(64 位)並賦給寄存器對 vAA。寄存器 vCC 的值爲指定索引
46 23x aget-object vAA, vBB, vCC 獲取寄存器 vBB 存儲的對象類型數組指定索引處的元素並賦給寄存器 vAA。寄存器 vCC 的值爲指定索引
47 23x aget-boolean vAA, vBB, vCC 獲取寄存器 vBB 存儲的布爾類型數組指定索引處的元素並賦給寄存器 vAA。寄存器 vCC 的值爲指定索引
48 23x aget-byte vAA, vBB, vCC 獲取寄存器 vBB 存儲的 byte 類型數組指定索引處的元素並賦給寄存器 vAA。寄存器 vCC 的值爲指定索引
49 23x aget-char vAA, vBB, vCC 獲取寄存器 vBB 存儲的 char 類型數組指定索引處的元素並賦給寄存器 vAA。寄存器 vCC 的值爲指定索引
4a 23x aget-short vAA, vBB, vCC 獲取寄存器 vBB 存儲的 short 類型數組指定索引處的元素並賦給寄存器 vAA。寄存器 vCC 的值爲指定索引
4b 23x aput vAA, vBB, vCC 將寄存器 vAA 的值賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
4c 23x aput-wide vAA, vBB, vCC 將寄存器對 vAA 的值(64 位)賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
4d 23x aput-object vAA, vBB, vCC 將寄存器 vAA 存儲的對象賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
4e 23x aput-boolean vAA, vBB, vCC 將寄存器 vAA 存儲的布爾值賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
4f 23x aput-byte vAA, vBB, vCC 將寄存器 vAA 存儲的 byte 值賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
50 23x aput-char vAA, vBB, vCC 將寄存器 vAA 存儲的 char 值賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
51 23x aput-short vAA, vBB, vCC 將寄存器 vAA 存儲的 short 值賦給寄存器 vBB 存儲的數組的指定索引處。寄存器 vCC 存儲的值爲指定索引
52 22c iget vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的字段,並存入寄存器 vA。字段類型是 CCCC
53 22c iget-wide vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的字段,並存入寄存器對 vA。字段類型是 CCCC
54 22c iget-object vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的對象類型字段,並存入寄存器 vA。字段類型是 CCCC
55 22c iget-boolean vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 boolean 類型字段,並存入寄存器 vA。字段類型是 CCCC
56 22c iget-byte vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 byte 類型字段,並存入寄存器 vA。字段類型是 CCCC
57 22c iget-char vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 char 類型字段,並存入寄存器 vA。字段類型是 CCCC
58 22c iget-short vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 short 類型字段,並存入寄存器 vA。字段類型是 CCCC
59 22c iput vA, vB, field@CCCC 將寄存器 vA 存儲的值賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
5a 22c iput-wide vA, vB, field@CCCC 將寄存器對 vA 存儲的值(64位)賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
5b 22c iput-object vA, vB, field@CCCC 將寄存器 vA 存儲的對象類型值賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
5c 22c iput-boolean vA, vB, field@CCCC 將寄存器 vA 存儲的 boolean 類型值賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
5d 22c iput-byte vA, vB, field@CCCC 將寄存器 vA 存儲的 byte 類型值賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
5e 22c iput-char vA, vB, field@CCCC 將寄存器 vA 存儲的 char 類型值賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
5f 22c iput-short vA, vB, field@CCCC 將寄存器 vA 存儲的 short 類型值賦給寄存器 vB 存儲的實例的字段。字段類型是 CCCC
60 21c sget vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的靜態字段,並存入寄存器 vA。字段類型是 CCCC
61 21c sget-wide vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的靜態字段,並存入寄存器對 vA。字段類型是 CCCC
62 21c sget-object vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的對象類型靜態字段,並存入寄存器 vA。字段類型是 CCCC
63 21c sget-boolean vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 boolean 類型靜態字段,並存入寄存器 vA。字段類型是 CCCC
64 21c sget-byte vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 byte 類型靜態字段,並存入寄存器 vA。字段類型是 CCCC
65 21c sget-char vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 char 類型靜態字段,並存入寄存器 vA。字段類型是 CCCC
66 21c sget-short vA, vB, field@CCCC 獲取寄存器 vB 存儲的實例的 short 類型靜態字段,並存入寄存器 vA。字段類型是 CCCC
67 21c sput vA, vB, field@CCCC 將寄存器 vA 存儲的值賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
68 21c sput-wide vA, vB, field@CCCC 將寄存器對 vA 存儲的值(64位)賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
69 21c sput-object vA, vB, field@CCCC 將寄存器 vA 存儲的對象類型值賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
6a 21c sput-boolean vA, vB, field@CCCC 將寄存器 vA 存儲的 boolean 類型值賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
6b 21c sput-byte vA, vB, field@CCCC 將寄存器 vA 存儲的 byte 類型值賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
6c 21c sput-char vA, vB, field@CCCC 將寄存器 vA 存儲的 char 類型值賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
6d 21c sput-short vA, vB, field@CCCC 將寄存器 vA 存儲的 short 類型值賦給寄存器 vB 存儲的實例的靜態字段。字段類型是 CCCC
6e 35c invoke-virtual {vC,vD,vE,vF,vG} meth@BBBB 調用實例的虛方法,C~G 是參數寄存器
6f 35c invoke-super {vC,vD,vE,vF,vG} meth@BBBB 調用實例的父類方法,C~G 是參數寄存器
70 35c invoke-direct {vC,vD,vE,vF,vG} meth@BBBB 調用實例的 private 方法或者構造函數,C~G 是參數寄存器
71 35c invoke-static {vC,vD,vE,vF,vG} meth@BBBB 調用實例的 static 方法,C~G 是參數寄存器
72 35c invoke-interface {vC,vD,vE,vF,vG} meth@BBBB 調用實例的接口方法,C~G 是參數寄存器
73 10x unused
74 3rc invoke-virtual/range {vCCCC..vNNNN} meth@BBBB 同上。只是參數寄存器表示方式不同。這裏直接使用 vCCCC 到 vNNNN 之間的寄存器,而不是單獨指定每一個寄存器
75 3rc invoke-super/range {vCCCC..vNNNN} meth@BBBB
76 3rc invoke-direct/range {vCCCC..vNNNN} meth@BBBB
77 3rc invoke-static/range {vCCCC..vNNNN} meth@BBBB
78 3rc invoke-interface/range {vCCCC..vNNNN} meth@BBBB
79 10x unused
7a 10x unused
7b 12x neg-int vA, vB 對寄存器 vB 存儲的整型數求補並存入寄存器 vA
7c 12x not-int vA, vB 對寄存器 vB 存儲的整型數求反並存入寄存器 vA
7d 12x neg-long vA, vB 對寄存器對 vB 存儲的長整型數求補並存入寄存器對 vA
7e 12x not-long vA, vB 對寄存器對 vB 存儲的長整型數求反並存入寄存器對 vA
7f 12x neg-float vA, vB 對寄存器 vB 存儲的單精度浮點數求補並存入寄存器 vA
80 12x neg-double vA, vB 對寄存器對 vB 存儲的雙精度浮點數求補並存入寄存器對 vA
81 12x int-to-long vA, vB 將寄存器 vB 中的整型數轉換爲長整型數,並存入寄存器對 vA
82 12x int-to-float vA, vB 將寄存器 vB 中的整型數轉換爲單精度浮點數,並存入寄存器 vA
83 12x int-to-double vA, vB 將寄存器 vB 中的整型數轉換爲雙精度浮點數,並存入寄存器對 vA
84 12x long-to-int vA, vB 將寄存器對 vB 中的長整型數轉換爲整型數,並存入寄存器 vA
85 12x long-to-float vA, vB 將寄存器對 vB 中的長整型數轉換爲單精度浮點數,並存入寄存器 vA
86 12x long-to-double vA, vB 將寄存器對 vB 中的長整型數轉換爲雙精度浮點數,並存入寄存器對 vA
87 12x float-to-int vA, vB 將寄存器 vB 中的單精度浮點數轉換爲整型數,並存入寄存器 vA
88 12x float-to-long vA, vB 將寄存器 vB 中的單精度浮點數轉換爲長整型數,並存入寄存器對 vA
89 12x float-to-double vA, vB 將寄存器 vB 中的單精度浮點數轉換爲雙精度浮點數,並存入寄存器 vA
8a 12x double-to-int vA, vB 將寄存器對 vB 中的雙精度浮點數轉換爲整型數,並存入寄存器 vA
8b 12x double-to-long vA, vB 將寄存器對 vB 中的雙精度浮點數轉換爲長整型數,並存入寄存器對 vA
8c 12x double-to-float vA, vB 將寄存器對 vB 中的雙精度浮點數轉換爲單精度浮點數,並存入寄存器 vA
8d 12x int-to-byte vA, vB 將寄存器對 vB 中的整型數轉換爲 byte,並存入寄存器 vA
8e 12x int-to-char vA, vB 將寄存器對 vB 中的整型數轉換爲 char,並存入寄存器 vA
8f 12x int-to-short vA, vB 將寄存器對 vB 中的整型數轉換爲 short,並存入寄存器 vA
90 23x add-int vAA, vBB, vCC 將寄存器 vBB 中的整型數加上寄存器 vCC 中的整型數,結果存入寄存器 vAA
91 23x sub-int vAA, vBB, vCC 將寄存器 vBB 中的整型數減去寄存器 vCC 中的整型數,結果存入寄存器 vAA
92 23x mul-int vAA, vBB, vCC 將寄存器 vBB 中的整型數乘以寄存器 vCC 中的整型數,結果存入寄存器 vAA
93 23x div-int vAA, vBB, vCC 將寄存器 vBB 中的整型數除以寄存器 vCC 中的整型數,結果存入寄存器 vAA
94 23x rem-int vAA, vBB, vCC 將寄存器 vBB 中的整型數和寄存器 vCC 中的整型數進行模運算,結果存入寄存器 vAA
95 23x and-int vAA, vBB, vCC 將寄存器 vBB 中的整型數和寄存器 vCC 中的整型數進行與運算,結果存入寄存器 vAA
96 23x or-int vAA, vBB, vCC 將寄存器 vBB 中的整型數和寄存器 vCC 中的整型數進行或運算,結果存入寄存器 vAA
97 23x xor-int vAA, vBB, vCC 將寄存器 vBB 中的整型數和寄存器 vCC 中的整型數進行異或運算,結果存入寄存器 vAA
98 23x shl-int vAA, vBB, vCC 將寄存器 vBB 中的有符號數左移 vCC 位,結果存入寄存器 vAA
99 23x shr-int vAA, vBB, vCC 將寄存器 vBB 中的有符號數右移 vCC 位,結果存入寄存器 vAA
9a 23x ushr-int vAA, vBB, vCC 將寄存器 vBB 中的無符號數右移 vCC 位,結果存入寄存器 vAA
9b 23x add-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數加上寄存器對 vCC 中的長整型數,結果存入寄存器對 vAA
9c 23x sub-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數減去寄存器對 vCC 中的長整型數,結果存入寄存器對 vAA
9d 23x mul-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數乘以寄存器對 vCC 中的長整型數,結果存入寄存器對 vAA
9e 23x div-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數除以寄存器對 vCC 中的長整型數,結果存入寄存器對 vAA
9f 23x rem-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數和寄存器對 vCC 中的長整型數進行模運算,結果存入寄存器對 vAA
a0 23x and-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數和寄存器對 vCC 中的長整型數進行與運算,結果存入寄存器對 vAA
a1 23x or-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數和寄存器對 vCC 中的長整型數進行或運算,結果存入寄存器對 vAA
a2 23x xor-long vAA, vBB, vCC 將寄存器對 vBB 中的長整型數和寄存器對 vCC 中的長整型數進行異或運算,結果存入寄存器對 vAA
a3 23x shl-long vAA, vBB, vCC 將寄存器對 vBB 中的有符號長整型數左移 vCC 位,結果存入寄存器對 vAA
a4 23x shr-long vAA, vBB, vCC 將寄存器對 vBB 中的有符號長整型數右移 vCC 位,結果存入寄存器對 vAA
a5 23x ushr-long vAA, vBB, vCC 將寄存器對 vBB 中的無符號長整型數右移 vCC 位,結果存入寄存器對 vAA
a6 23x add-float vAA, vBB, vCC 將寄存器 vBB 中的單精度浮點數加上寄存器 vCC 中的單精度浮點數,結果存入寄存器 vAA
a7 23x sub-float vAA, vBB, vCC 將寄存器 vBB 中的單精度浮點數減去寄存器 vCC 中的單精度浮點數,結果存入寄存器 vAA
a8 23x mul-float vAA, vBB, vCC 將寄存器 vBB 中的單精度浮點數乘以寄存器 vCC 中的單精度浮點數,結果存入寄存器 vAA
a9 23x div-float vAA, vBB, vCC 將寄存器 vBB 中的單精度浮點數除以寄存器 vCC 中的單精度浮點數,結果存入寄存器 vAA
aa 23x rem-float vAA, vBB, vCC 將寄存器 vBB 中的單精度浮點數和寄存器 vCC 中的單精度浮點數進行模運算,結果存入寄存器 vAA
ab 23x add-double vAA, vBB, vCC 將寄存器對 vBB 中的雙精度浮點數加上寄存器對 vCC 中的雙精度浮點數,結果存入寄存器對 vAA
ac 23x sub-double vAA, vBB, vCC 將寄存器對 vBB 中的雙精度浮點數減去寄存器對 vCC 中的雙精度浮點數,結果存入寄存器對 vAA
ad 23x mul-double vAA, vBB, vCC 將寄存器對 vBB 中的雙精度浮點數乘以寄存器對 vCC 中的雙精度浮點數,結果存入寄存器對 vAA
ae 23x div-double vAA, vBB, vCC 將寄存器對 vBB 中的雙精度浮點數除以寄存器對 vCC 中的雙精度浮點數,結果存入寄存器對 vAA
af 23x rem-double vAA, vBB, vCC 將寄存器對 vBB 中的雙精度浮點數和寄存器對 vCC 中的雙精度浮點數進行模運算,結果存入寄存器對 vAA
b0 12x add-int/2addr vA, vB 將寄存器 vA 中的整型數加上寄存器 vB 中的整型數,結果存入寄存器 vA
b1 12x sub-int/2addr vA, vB 將寄存器 vA 中的整型數減去寄存器 vB 中的整型數,結果存入寄存器 vA
b2 12x mul-int/2addr vA, vB 將寄存器 vA 中的整型數乘以寄存器 vB 中的整型數,結果存入寄存器 vA
b3 12x div-int/2addr vA, vB 將寄存器 vA 中的整型數除以寄存器 vB 中的整型數,結果存入寄存器 vA
b4 12x rem-int/2addr vA, vB 將寄存器 vA 中的整型數和寄存器 vB 中的整型數進行模運算,結果存入寄存器 vA
b5 12x and-int/2addr vA, vB 將寄存器 vA 中的整型數和寄存器 vB 中的整型數進行與運算,結果存入寄存器 vA
b6 12x or-int/2addr vA, vB 將寄存器 vA 中的整型數和寄存器 vB 中的整型數進行或運算,結果存入寄存器 vA
b7 12x xor-int/2addr vA, vB 將寄存器 vA 中的整型數和寄存器 vB 中的整型數進行異或運算,結果存入寄存器 vA
b8 12x shl-int/2addr vA, vB 將寄存器 vA 中的有符號數左移 vB 位,結果存入寄存器 vA
b9 12x shr-int/2addr vA, vB 將寄存器 vA 中的有符號數右移 vB 位,結果存入寄存器 vA
ba 12x ushr-int/2addr vA, vB 將寄存器 vA 中的無符號數左移 vB 位,結果存入寄存器 vA
bb 12x add-long/2addr vA, vB 將寄存器對 vA 中的長整型數加上寄存器對 vB 中的長整型數,結果存入寄存器對 vA
bc 12x sub-long/2addr vA, vB 將寄存器對 vA 中的長整型數減去寄存器對 vB 中的長整型數,結果存入寄存器對 vA
bd 12x mul-long/2addr vA, vB 將寄存器對 vA 中的長整型數乘以寄存器對 vB 中的長整型數,結果存入寄存器對 vA
be 12x div-long/2addr vA, vB 將寄存器對 vA 中的長整型數除以寄存器對 vB 中的長整型數,結果存入寄存器對 vA
bf 12x rem-long/2addr vA, vB 將寄存器對 vA 中的長整型數和寄存器對 vB 中的長整型數進行模運算,結果存入寄存器對 vA
c0 12x and-long/2addr vA, vB 將寄存器對 vA 中的長整型數和寄存器對 vB 中的長整型數進行與運算,結果存入寄存器對 vA
c1 12x or-long/2addr vA, vB 將寄存器對 vA 中的長整型數和寄存器對 vB 中的長整型數進行或運算,結果存入寄存器對 vA
c2 12x xor-long/2addr vA, vB 將寄存器對 vA 中的長整型數和寄存器對 vB 中的長整型數進異或運算,結果存入寄存器對 vA
c3 12x shl-long/2addr vA, vB 將寄存器對 vA 中的有符號長整型數左移 vB 位,結果存入寄存器對 vA
c4 12x shr-long/2addr vA, vB 將寄存器對 vA 中的有符號長整型數右移 vB 位,結果存入寄存器對 vA
c5 12x ushr-long/2addr vA, vB 將寄存器對 vA 中的無符號長整型數左移 vB 位,結果存入寄存器對 vA
c6 12x add-float/2addr vA, vB 將寄存器 vA 中的單精度浮點數加上寄存器 vB 中的單精度浮點數,結果存入寄存器 vA
c7 12x sub-float/2addr vA, vB 將寄存器 vA 中的單精度浮點數減去寄存器 vB 中的單精度浮點數,結果存入寄存器 vA
c8 12x mul-float/2addr vA, vB 將寄存器 vA 中的單精度浮點數乘以寄存器 vB 中的單精度浮點數,結果存入寄存器 vA
c9 12x div-float/2addr vA, vB 將寄存器 vA 中的單精度浮點數除以寄存器 vB 中的單精度浮點數,結果存入寄存器 vA
ca 12x rem-float/2addr vA, vB 將寄存器 vA 中的單精度浮點數和寄存器 vB 中的單精度浮點數進行模運算,結果存入寄存器 vA
cb 12x add-double/2addr vA, vB 將寄存器對 vA 中的雙精度浮點數加上寄存器對 vB 中的雙精度浮點數,結果存入寄存器對 vA
cc 12x sub-double/2addr vA, vB 將寄存器對 vA 中的雙精度浮點數減去寄存器對 vB 中的雙精度浮點數,結果存入寄存器對 vA
cd 12x mul-double/2addr vA, vB 將寄存器對 vA 中的雙精度浮點數乘以寄存器對 vB 中的雙精度浮點數,結果存入寄存器對 vA
ce 12x div-double/2addr vA, vB 將寄存器對 vA 中的雙精度浮點數除以寄存器對 vB 中的雙精度浮點數,結果存入寄存器對 vA
cf 12x rem-double/2addr vA, vB 將寄存器對 vA 中的雙精度浮點數和寄存器對 vB 中的雙精度浮點數進行模運算,結果存入寄存器對 vA
d0 22s add-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 相加,結果存入寄存器 vA
d1 22s rsub-int vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 相減,結果存入寄存器 vA
d2 22s mul-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 相乘,結果存入寄存器 vA
d3 22s div-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 相除,結果存入寄存器 vA
d4 22s rem-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 進行模運算,結果存入寄存器 vA
d5 22s and-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 進行與運算,結果存入寄存器 vA
d6 22s or-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 進行或運算,結果存入寄存器 vA
d7 22s xor-int/lit16 vA, vB, #+CCCC 將寄存器 vB 中的整型數和 16 位字面量 CCCC 進行異或運算,結果存入寄存器 vA
d8 22b add-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 相加,結果存入寄存器 vAA
d9 22b rsub-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 相減,結果存入寄存器 vAA
da 22b mul-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 相乘,結果存入寄存器 vAA
db 22b div-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 相除,結果存入寄存器 vAA
dc 22b rem-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 進行模運算,結果存入寄存器 vAA
dd 22b and-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 進行與運算,結果存入寄存器 vAA
de 22b or-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 進行或運算,結果存入寄存器 vAA
df 22b xor-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的整型數和 8 位字面量 CC 進行異或運算,結果存入寄存器 vAA
e0 22b shl-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的有符號數左移 CC 位,將結果存入寄存器 vAA
e1 22b shr-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的有符號數右移 CC 位,將結果存入寄存器 vAA
e2 22b ushr-int/lit8 vAA, vBB, #+CC 將寄存器 vBB 中的無符號數右移 CC 位,將結果存入寄存器 vAA
e3 10x unused
e4 10x unused
e5 10x unused
e6 10x unused
e7 10x unused
e8 10x unused
e9 10x unused
ea 10x unused
eb 10x unused
ec 10x unused
ed 10x unused
ee 10x unused
ef 10x unused
f0 10x unused
f1 10x unused
f2 10x unused
f3 10x unused
f4 10x unused
f5 10x unused
f6 10x unused
f7 10x unused
f8 10x unused
f9 10x unused
fa 45cc invoke-polymorphic {vC, vD, vE, vF, vG}, meth@BBBB, proto@HHHH 調用指定的簽名多態方法,存在於 038 和更高版本的 Dex 文件中
fb 4rcc invoke-polymorphic/range {vCCCC .. vNNNN}, meth@BBBB, proto@HHHH 調用指定的方法句柄,存在於版本 038 及更高版本的 Dex 文件中
fc 35c invoke-custom {vC, vD, vE, vF, vG}, call_site@BBBB 解析並調用指定的調用點,存在於版本 038 及更高版本的 Dex 文件中
fd 3rc invoke-custom/range {vCCCC .. vNNNN}, call_site@BBBB 解析並調用一個調用點,存在於版本 038 及更高版本的 Dex 文件中
fe 21c const-method-handle vAA, method_handle@BBBB 將經過特定索引指定的方法句柄的引用移到指定的寄存器中,存在於版本 039 及更高版本的 Dex 文件中
ff 21c const-method-type vAA, proto@BBBB 將經過特定索引指定的方法原型的引用移到指定的寄存器中。存在於版本 039 及更高版本的 Dex 文件中

最後的 fa-ff 因爲 DEX 版本問題,其實不多見。

其餘相關內容 :

Class 文件格式詳解

Smali 語法解析——Hello World

Smali —— 數學運算,條件判斷,循環

Smali 語法解析 —— 類

Android逆向筆記 —— AndroidManifest.xml 文件格式解析

Android逆向筆記 —— DEX 文件格式解析

Android 逆向筆記 —— ARSC 文件格式解析

Android 逆向筆記 —— 一個簡單 CrackMe 的逆向總結

Android 逆向筆記 —— 說說 Dalvik 及其指令集


文章首發微信公衆號: 秉心說 , 專一 Java 、 Android 原創知識分享,LeetCode 題解。

掃碼關注,回覆 Dalvik 獲取 Dalvik 指令集大全 pdf 版本 !

相關文章
相關標籤/搜索