爲何是全網最全,由於根本沒人整理 Dalvik 指令集。。數組
本文檔純粹做爲一個 Dalvik 指令集速查表,相信必定有須要的同窗。微信
文末掃碼關注公衆號,回覆
Dalvik
獲取本文檔 pdf 版本 !ide
首先說明 Dalvik 虛擬機的基本約定 。函數
-wide
做爲後綴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 版本問題,其實不多見。
其餘相關內容 :
Android逆向筆記 —— AndroidManifest.xml 文件格式解析
文章首發微信公衆號:
秉心說
, 專一 Java 、 Android 原創知識分享,LeetCode 題解。掃碼關注,回覆
Dalvik
獲取 Dalvik 指令集大全 pdf 版本 !