Dalvik opcodes
Author:
Gabor Paller
Vx values in the table denote aDalvik register. Depending on the instruction, 16, 256 or 64k registerscan be accessed. Operations on long and double values use tworegisters, e.g. a double value addressed in the V0 register occupiesthe V0 and V1 registers.
Boolean values are stored as 1 for true and 0 for false. Operations onbooleans are translated into integer operations.
All the examples are in hig-endian format, e.g. 0F00 0A00 is coded as 0F, 00, 0A, 00 sequence.
Note there are no explanation/example at some instructions. This meansthat I have not seen that instruction "in the wild" and itspresence/name is only known from Androidopcodeconstant list.
Opcode(hex) | Opcode name | Explanation | Example |
00 | nop | No operation | 0000 - nop |
01 | move vx,vy | Moves the content of vy into vx.Both registers must be in the first 256 register range. | 0110 - move v0, v1 Moves v1 into v0. |
02 | move/from16 vx,vy | Moves the content of vy into vx.vy may be in the 64k register range while vx is one of the first 256registers. | 0200 1900 - move/from16 v0, v25 Moves v25 into v0. |
03 | move/16 | ||
04 | move-wide | ||
05 | move-wide/from16 vx,vy | Moves a long/double value fromvy to vx. vy may be in the 64k register range while wx is one of thefirst 256 registers. | 0516 0000 - move-wide/from16v22, v0 Moves v0 into v22. |
06 | move-wide/16 | ||
07 | move-object vx,vy | Moves the object reference fromvy to vx. | 0781 - move-object v1, v8 Moves the object reference in v8 to v1. |
08 | move-object/from16 vx,vy | Moves the object reference fromvy to vx, vy can address 64k registers and vx can address 256 registers. | 0801 1500 - move-object/from16v1, v21 Move the object reference in v21 to v1. |
09 | move-object/16 | ||
0A | move-result vx | Move the result value of theprevious method invocation into vx. | 0A00 - move-result v0 Move the return value of a previous method invocation into v0. |
0B | move-result-wide vx | Move the long/double resultvalue of the previous method invocation into vx,vx+1. | 0B02 - move-result-wide v2 Move the long/double result value of the previous method invocationinto v2,v3. |
0C | move-result-object vx | Move the result object referenceof the previous method invocation into vx. | 0C00 - move-result-object v0 |
0D | move-exception vx | Move the exception objectreference thrown during a method invocation into vx. | 0D19 - move-exception v25 |
0E | return-void | Return without a return value | 0E00 - return-void |
0F | return vx | Return with vx return value | 0F00 - return v0 Returns with return value in v0. |
10 | return-wide vx | Return with double/long resultin vx,vx+1. | 1000 - return-wide v0 Returns with a double/long value in v0,v1. |
11 | return-object vx | Return with vx object referencevalue. | 1100 - return-object v0 Returns with object reference value in v0 |
12 | const/4 vx,lit4 | Puts the 4 bit constant into vx | 1221 - const/4 v1, #int2 Moves literal 2 into v1. The destination register is in the lower 4 bitin the second byte, the literal 2 is in the higher 4 bit. |
13 | const/16 vx,lit16 | Puts the 16 bit constant into vx | 1300 0A00 - const/16 v0, #int 10 Puts the literal constant of 10 into v0. |
14 | const vx, lit32 | Puts the integer constant into vx | 1400 4E61 BC00 - const v0,#12345678 // #00BC614E Moves literal 12345678 into v0. |
15 | const/high16 v0, lit16 | Puts the 16 bit constant intothe topmost bits of the register. Used to initialize float values. | 1500 2041 - const/high16 v0,#float 10.0 // #41200000 Moves the floating literal of 10.0 into v0. The 16 bit literal in theinstruction carries the top 16 bits of the floating point number. |
16 | const-wide/16 vx, lit16 | Puts the integer constant intovx and vx+1 registers, expanding the integer constant into a longconstant.. | 1600 0A00 - const-wide/16 v0,#long 10 Moves literal 10 into v0 and v1 registers. |
17 | const-wide/32 vx, lit32 | Puts the 32 bit constant into vxand vx+1 registers, expanding the integer constant into a long constant. | 1702 4e61 bc00 - const-wide/32v2, #long 12345678 // #00bc614e Puts #12345678 into v2 and v3 registers. |
18 | const-wide vx, lit64 | Puts the 64 bit constant into vxand vx+1 registers. | 1802 874b 6b5d 54dc 2b00-const-wide v2, #long 12345678901234567 // #002bdc545d6b4b87 Puts #12345678901234567 into v2 and v3 registers. |
19 | const-wide/high16 vx,lit16 | Puts the 16 bit constant intothe highest 16 bit of vx and vx+1 registers. Used to initialize doublevalues. | 1900 2440 - const-wide/high16v0, #double 10.0 // #402400000 Puts the double constant of 10.0 into v0 register. |
1A | const-string vx,string_id | Puts reference to a stringconstant identified by string_id into vx. | 1A08 0000 - const-string v8, ""// string@0000 Puts reference to string@0000 (entry #0 in the string table) into v8. |
1B | const-string-jumbo | ||
1C | const-class vx,type_id | Moves the class object of aclass identified by type_id (e.g. Object.class) into vx. | 1C00 0100 - const-class v0,Test3 // type@0001 Moves reference to Test3.class (entry#1 in the type id table) into |
1D | monitor-enter vx | Obtains the monitor of theobject referenced by vx. | 1D03 - monitor-enter v3 Obtains the monitor of the object referenced by v3. |
1E | monitor-exit | Releases the monitor of theobject referenced by vx. | 1E03 - monitor-exit v3 Releases the monitor of the object referenced by v3. |
1F | check-cast vx, type_id | Checks whether the objectreference in vx can be cast to an instance of a class referenced bytype_id. Throws ClassCastException if the cast is not possible,continues execution otherwise. | 1F04 0100 - check-cast v4, Test3// type@0001 Checks whether the object reference in v4 can be cast to type@0001(entry #1 in the type id table) |
20 | instance-of vx,vy,type_id | Checks whether vy is instance ofa class identified by type_id. Sets vx non-zero if it is, 0 otherwise. | 2040 0100 - instance-of v0, v4,Test3 // type@0001 Checks whether the object reference in v4 is an instance of type@0001(entry #1 in the type id table). Sets v0 to non-zero if v4 is instanceof Test3, 0 otherwise. |
21 | array-length vx,vy | Calculates the number ofelements of the array referenced by vy and puts the length value intovx. | 2111 - array-length v1, v1 Calculates the number of elements of the array referenced by v1 andputs the result into v1. |
22 | new-instance vx,type | Instantiates an object type andputs the reference of the newly created instance into vx. | 2200 1500 - new-instance v0,java.io.FileInputStream // type@0015 Instantiates type@0015 (entry #15H in the type table) and puts itsreference into v0. |
23 | new-array vx,vy,type_id | Generates a new array of type_idtype and vy element size and puts the reference to the array into vx. | 2312 2500 - new-array v2, v1,char[] // type@0025 Generates a new array of type@0025 type and v1 size and puts thereference to the new array into v2. |
24 | filled-new-array{parameters},type_id | Generates a new array of type_idand fills it with the parameters5. Reference to the newlygenerated array can be obtained by a move-result-object instruction,immediately following the filled-new-array instruction. | 2420 530D 0000 -filled-new-array {v0,v0},[I // type@0D53 Generates a new array of type@0D53. The array's size will be 2 and bothelements will be filled with the contents of v0 register. |
25 | filled-new-array-range{vx..vy},type_id | Generates a new array of type_idand fills it with a range of parameters. Reference to the newlygenerated array can be obtained by amove-result-object instruction, immediately following thefilled-new-array instruction. | 2503 0600 1300 -filled-new-array/range{v19..v21}, [B // type@0006 Generates a new array of type@0D53. The array's size will be 3 and theelements will be filled using the v19,v20 and v21 registers4. |
26 | fill-array-datavx,array_data_offset | Fills the array referenced by vxwith the static data. The location of the static data is the sumof the position of the current instruction and the offset | 2606 2500 0000 - fill-array-datav6, 00e6 // +0025 Fills the array referenced by v0 with the static data at currentinstruction+25H words location. The offset is expressed as a 32-bitnumber. The static data is stored in the following format: 0003 // Table type: static array data 0400 // Byte per array element (in this case, 4 byte integers) 0300 0000 // Number of elements in the table 0100 0000 // Element #0: integer 1 0200 0000 // Element #1: integer 2 0300 0000 // Element #2: integer3 |
27 | throw vx | Throws an exception object. Thereference of the exception object is in vx. | 2700 - throw v0 Throws an exception. The exception object reference is in v0. |
28 | goto target | Unconditional jump by shortoffset2. | 28F0 - goto 0005 // -0010 Jumps to current position-16 words (hex 10). 0005 is the label of thetarget instruction. |
29 | goto/16 target | Unconditional jump by 16 bitoffset2. | 2900 0FFE - goto/16 002f // -01f1 Jumps to the current position-1F1H words. 002F is the label of thetarget instruction. |
2A | goto/32 target | ||
2B | packed-switch vx,table | Implements a switch statementwhere the case constants are close to each other. The instruction usesan index table. vx indexes into this table to find the offset of theinstruction for a particular case. If vx falls out of the index table,the execution continues on the next instruction (default case). | 2B02 0C00 0000 - packed-switchv2, 000c // +000c Execute a packed switch according to the switch argument in v2. Theposition of the index table is at current instruction+0CH words. Thetable looks like the following: 0001 // Table type: packed switch table 0300 // number of elements 0000 0000 // element base 0500 0000 0: 00000005 // case 0: +00000005 0700 0000 1: 00000007 // case 1: +00000007 0900 0000 2: 00000009 // case 2: +00000009 |
2C | sparse-switch vx,table | Implements a switch statementwith sparse case table. The instruction uses a lookup table with caseconstants and offsets for each case constant. If there is no match inthe table, execution continues on the next instruction (default case). | 2C02 0c00 0000 - sparse-switchv2, 000c // +000c Execute a sparse switch according to the switch argument in v2. Theposition of the lookup table is at current instruction+0CH words. Thetable looks like the following. 0002 // Table type: sparse switch table 0300 // number of elements 9cff ffff // first case: -100 fa00 0000 // second case constant: 250 e803 0000 // third case constant: 1000 0500 0000 // offset for the first case constant: +5 0700 0000 // offset for the second case constant: +7 0900 0000 // offset for the third case constant: +9 |
2D | cmpl-float | Compares the float values in vyand vz and sets the integer value in vx accordingly3 | 2D00 0607 - cmpl-float v0, v6, v7 Compares the float values in v6 and v7 then sets v0 accordingly. NaNbias is less-than, the instruction will return -1 if any of theparameters is NaN. |
2E | cmpg-float vx, vy, vz | Compares the float values in vyand vz and sets the integer value in vx accordingly3. | 2E00 0607 - cmpg-float v0, v6, v7 Compares the float values in v6 and v7 then sets v0 accordingly. NaNbias is greater-than, the instruction will return 1 if any of theparameters is NaN. |
2F | cmpl-double vx,vy,vz | Compares the double values in vyand vz2 and sets the integer value in vx accordingly3. | 2F19 0608 - cmpl-double v25, v6,v8 Compares the double values in v6,v7 and v8,v9 and sets v25 accordingly.NaN bias is less-than, the instruction will return -1 if any of theparameters is NaN. |
30 | cmpg-double vx, vy, vz | Compares the double values in vyand vz2 and sets the integer value in vx accordingly3. | 3000 080A - cmpg-double v0, v8,v10 Compares the double values in v8,v9 and v10,v11 then sets v0accordingly. NaN bias is greater-than, the instruction will return 1 ifany of the parameters is NaN. |
31 | cmp-long vx, vy, vz | Compares the long values in vyand vz and sets the integer value in vx accordingly3. | 3100 0204 - cmp-long v0, v2, v4 Compares the long values in v2 and v4 then sets v0 accordingly. |
32 | if-eq vx,vy,target | Jumps to target if vx==vy2.vxand vy are integer values. | 32b3 6600 - if-eq v3, v11, 0080// +0066 Jumps to the current position+66H words if v3==v11. 0080 is the labelof the target instruction. |
33 | if-ne vx,vy,target | Jumps to target if vx!=vy2.vxand vy are integer values. | 33A3 1000 - if-ne v3, v10, 002c// +0010 Jumps to the current position+10H words if v3!=v10. 002c is the labelof the target instruction. |
34 | if-lt vx,vy,target | Jumps to target is vx<vy2.vxand vy are integer values. | 3432 CBFF - if-lt v2, v3, 0023// -0035 Jumps to the current position-35H words if v2<v3. 0023 is the labelof the target instruction. |
35 | if-ge vx, vy,target | Jumps to target if vx>=vy2.vxand vy are integer values. | 3510 1B00 - if-ge v0, v1, 002b//+001b Jumps to the current position+1BH words if v0>=v1. 002b is the labelof the target instruction. |
36 | if-gt vx,vy,target | Jumps to target if vx>vy2.vxand vy are integer values. | 3610 1B00 - if-ge v0, v1, 002b//+001b Jumps to the current position+1BH words if v0>v1. 002b is the labelof the target instruction. |
37 | if-le vx,vy,target | Jumps to target if vx<=vy2.vxand vy are integer values. | 3756 0B00 - if-le v6, v5, 0144// +000b Jumps to the current position+0BH words if v6<=v5. 0144 is the labelof the target instruction. |
38 | if-eqz vx,target | Jumps to target if vx==02.vxis an integer value. | 3802 1900 - if-eqz v2, 0038 //+0019 Jumps to the current position+19H words if v2==0. 0038 is the labelof the target instruction. |
39 | if-nez vx,target | Checks vx and jumps if vx isnonzero2. | 3902 1200 - if-nez v2, 0014 //+0012 Jumps to current position+18 words (hex 12) if v2 is nonzero. 0014 isthe label of the target instruction. |
3A | if-ltz vx,target | Checks vx and jumps if vx<02. | 3A00 1600 - if-ltz v0, 002d //+0016 Jumps to the current position+16H words if v0<0. 002d is the labelof the target instruction. |
3B | if-gez vx,target | Checks vx and jumps if vx>=02. | 3B00 1600 - if-gez v0, 002d //+0016 Jumps to the current position+16H words if v0 >=0. 002d is the labelof the target instruction. |
3C | if-gtz vx,target | Checks vx and jumps if vx>02. | 3C00 1D00 - if-gtz v0, 004a //+001d Jumps to the current position+1DH words if v0>0. 004A is the labelof the target instruction. |
3D | if-lez vx,target | Checks vx and jumps if vx<=02. | 3D00 1D00 - if-lez v0, 004a //+001d Jumps to the current position+1DH words if v0<=0. 004A is the labelof the target instruction. |
3E | unused_3E | ||
3F | unused_3F | ||
40 | unused_40 | ||
41 | unused_41 | ||
42 | unused_42 | ||
43 | unused_43 | ||
44 | aget vx,vy,vz | Gets an integer value of anobject reference array into vx. The array is referenced by vy and isindexed by vz. | 4407 0306 - aget v7, v3, v6 Gets an integer array element. The array is referenced by v3and the element is indexed by v6. The element will be put into v7. |
45 | aget-wide vx,vy,vz | Gets a long/double value oflong/double array into vx,vx+1. The array is referenced by vy and isindexed by vz. | 4505 0104 - aget-wide v5, v1, v4 Gets a long/double array element. The array is referenced by v1and the element is indexed by v4. The element will be put into v5,v6. |
46 | aget-object vx,vy,vz | Gets an object reference valueof an object reference array into vx. The array is referenced by vyand is indexed by vz. | 4602 0200 - aget-object v2, v2,v0 Gets an object reference array element. The array is referenced by v2and the element is indexed by v0. The element will be put into v2. |
47 | aget-boolean vx,vy,vz | Gets a boolean valueof a boolean array into vx. The array is referenced by vyand is indexed by vz. | 4700 0001 - aget-boolean v0, v0,v1 Gets a boolean array element. The array is referenced by v0and the element is indexed by v1. The element will be put into v0. |
48 | aget-byte vx,vy,vz | Gets a byte valueof a byte array into vx. The array is referenced by vyand is indexed by vz. | 4800 0001 - aget-byte v0, v0, v1 Gets a byte array element. The array is referenced by v0and the element is indexed by v1. The element will be put into v0. |
49 | aget-char vx, vy,vz | Gets a char value of acharacter array into vx. Theelement is indexed by vz, the array object is referenced by vy | 4905 0003 - aget-char v5, v0, v3 Gets a character array element. The array is referenced by v0 and theelement is indexed by v3. The element will be put into v5. |
4A | aget-short vx,vy,vz | Gets a short value of ashort array into vx. Theelement is indexed by vz, the array object is referenced by vy. | 4A00 0001 - aget-short v0, v0, v1 Gets a short array element. The array is referenced by v0 and theelement is indexed by v1. The element will be put into v0. |
4B | aput vx,vy,vz | Puts the integer value in vxinto an element of an integer array. Theelement is indexed by vz, the array object is referenced by vy. | 4B00 0305 - aput v0, v3, v5 Puts the integer value in v2 into an integer arrayreferenced by v0. The target array element is indexed by v1. |
4C | aput-wide vx,vy,vz | Puts the double/long value invx,vx+1 into a double/long array. The array is referenced by vy, theelement is indexed by vz. | 4C05 0104 - aput-wide v5, v1, v4 Puts the double/long value in v5,v6 into a double/long arrayreferenced by v1. The target array element is indexed by v4. |
4D | aput-object vx,vy,vz | Puts the object reference valuein vx into an element of an object reference array. Theelement is indexed by vz, the array object is referenced by vy. | 4D02 0100 - aput-object v2, v1,v0 Puts the object reference value in v2 into an object reference arrayreferenced by v0. The target array element is indexed by v1. |
4E | aput-boolean vx,vy,vz | Puts the boolean valuein vx into an element of a boolean array. Theelement is indexed by vz, the array object is referenced by vy. | 4E01 0002 - aput-boolean v1, v0,v2 Puts the boolean value in v1 into an object reference arrayreferenced by v0. The target array element is indexed by v2. |
4F | aput-byte vx,vy,vz | Puts the byte valuein vx into an element of a byte array. Theelement is indexed by vz, the array object is referenced by vy. | 4F02 0001 - aput-byte v2, v0, v1 Puts the boolean value in v2 into a byte arrayreferenced by v0. The target array element is indexed by v1. |
50 | aput-char vx,vy,vz | Puts the char value in vx intoan element of a character array. Theelement is indexed by vz, the array object is referenced by vy. | 5003 0001 - aput-char v3, v0, v1 Puts the character value in v3 into a character array referenced by v0.The target array element is indexed by v1. |
51 | aput-short vx,vy,vz | Puts the short value in vx intoan element of a short array. Theelement is indexed by vz, the array object is referenced by vy. | 5102 0001 - aput-short v2, v0, v1 Puts the short value in v2 into a character array referenced by v0.The target array element is indexed by v1. |
52 | iget vx, vy, field_id | Reads an instance field into vx.The instance is referenced by vy. | 5210 0300 - iget v0, v1,Test2.i6:I // field@0003 Reads field@0003 into v0 (entry #3 in the field id table). The instanceis referenced by v1. |
53 | iget-wide vx,vy,field_id | Reads an instance field into vx1.Theinstance is referenced by vy. | 5320 0400 - iget-wide v0, v2,Test2.l0:J // field@0004 Reads field@0004 into v0 and v1 registers (entry #4 in the field idtable). The instance is referenced by v2. |
54 | iget-object vx,vy,field_id | Reads an object referenceinstance field into vx. The instance is referenced by vy. | iget-object v1, v2,LineReader.fis:Ljava/io/FileInputStream; // field@0002 Reads field@0002 into v1 (entry #2 in the field idtable). The instance is referenced by v2. |
55 | iget-boolean vx,vy,field_id | Reads a boolean instance fieldinto vx. The instance is referenced by vy. | 55FC 0000 - iget-boolean v12,v15, Test2.b0:Z // field@0000 Reads the boolean field@0000 into v12 register (entry #0 in the fieldid table). The instance is referenced by v15. |
56 | iget-byte vx,vy,field_id | Reads a byte instance fieldinto vx. The instance is referenced by vy. | 5632 0100 - iget-byte v2, v3,Test3.bi1:B // field@0001 Reads the char field@0001 into v2 register (entry #1 in the fieldid table). The instance is referenced by v3. |
57 | iget-char vx,vy,field_id | Reads a char instance fieldinto vx. The instance is referenced by vy. | 5720 0300 - iget-char v0, v2,Test3.ci1:C // field@0003 Reads the char field@0003 into v0 register (entry #3 in the fieldid table). The instance is referenced by v2. |
58 | iget-short vx,vy,field_id | Reads a short instance fieldinto vx. The instance is referenced by vy. | 5830 0800 - iget-short v0, v3,Test3.si1:S // field@0008 Reads the short field@0008 into v0 register (entry #8 in the fieldid table). The instance is referenced by v3. |
59 | iput vx,vy, field_id | Puts vx into an instance field.The instance is referenced by vy. | 5920 0200 - iput v0,v2,Test2.i6:I // field@0002 Stores v0 into field@0002 (entry #2 in the field id table). Theinstance is referenced by v2. |
5A | iput-wide vx,vy, field_id | Puts the wide value located invx and vx+1 registers into an instance field. The instance isreferenced by vy. | 5A20 0000 - iput-wide v0,v2,Test2.d0:D // field@0000 Stores the wide value in v0, v1 registers into field@0000 (entry #0 inthe field id table). The instance is referenced by v2. |
5B | iput-object vx,vy,field_id | Puts the object reference in vxinto an instance field. The instance is referenced by vy. | 5B20 0000 - iput-object v0, v2,LineReader.bis:Ljava/io/BufferedInputStream; // field@0000 Stores the object reference in v0 into field@0000 (entry #0 in thefield table). The instance is referenced by v2. |
5C | iput-boolean vx,vy, field_id | Puts the boolean value locatedin vx into an instance field. The instance is referenced by vy. | 5C30 0000 - iput-boolean v0, v3,Test2.b0:Z // field@0000 Puts the boolean value in v0 into field@0000 (entry #0 in the field idtable). The instance is referenced by v3. |
5D | iput-byte vx,vy,field_id | Puts the byte value locatedin vx into an instance field. The instance is referenced by vy. | 5D20 0100 - iput-byte v0, v2,Test3.bi1:B // field@0001 Puts the boolean value in v0 into field@0001 (entry #1 in the field idtable). The instance is referenced by v2. |
5E | iput-char vx,vy,field_id | Puts the char value locatedin vx into an instance field. The instance is referenced by vy. | 5E20 0300 - iput-char v0, v2,Test3.ci1:C // field@0003 Puts the char value in v0 into field@0003 (entry #3 in the field idtable). The instance is referenced by v2. |
5F | iput-short vx,vy,field_id | Puts the short value locatedin vx into an instance field. The instance is referenced by vy. | 5F21 0800 - iput-short v1, v2,Test3.si1:S // field@0008 Puts the short value in v1 into field@0008 (entry #8 in the field idtable). The instance is referenced by v2. |
60 | sget vx,field_id | Reads the integer fieldidentified by the field_id into vx. | 6000 0700 - sget v0, Test3.is1:I// field@0007 Reads field@0007 (entry #7 in the field id table) into v0. |
61 | sget-wide vx, field_id | Reads the static fieldidentified by the field_id into vx and vx+1 registers. | 6100 0500 - sget-wide v0,Test2.l1:J // field@0005 Reads field@0005 (entry #5 in the field id table) into v0 and v1registers. |
62 | sget-object vx,field_id | Reads the object reference fieldidentified by the field_id into vx. | 6201 0C00 - sget-object v1,Test3.os1:Ljava/lang/Object; // field@000c Reads field@000c (entry #CH in the field id table) into v1. |
63 | sget-boolean vx,field_id | Reads the boolean static fieldidentified by the field_id into vx. | 6300 0C00 - sget-boolean v0,Test2.sb:Z // field@000c Reads boolean field@000c (entry #12 in the field id table) into v0. |
64 | sget-byte vx,field_id | Reads the byte static fieldidentified by the field_id into vx. | 6400 0200 - sget-byte v0,Test3.bs1:B // field@0002 Reads byte field@0002 (entry #2 in the field id table) into v0. |
65 | sget-char vx,field_id | Reads the char static fieldidentified by the field_id into vx. | 6500 0700 - sget-char v0,Test3.cs1:C // field@0007 Reads byte field@0007 (entry #7 in the field id table) into v0. |
66 | sget-short vx,field_id | Reads the short static fieldidentified by the field_id into vx. | 6600 0B00 - sget-short v0,Test3.ss1:S // field@000b Reads short field@000b (entry #BH in the field id table) into v0. |
67 | sput vx, field_id | Puts vx into a static field. | 6700 0100 - sput v0, Test2.i5:I// field@0001 Stores v0 into field@0001 (entry #1 in the field id table). |
68 | sput-wide vx, field_id | Puts vx and vx+1 into a staticfield. | 6800 0500 - sput-wide v0,Test2.l1:J // field@0005 Puts the long value in v0 and v1 into the field@0005 static field(entry #5 in the field id table). |
69 | sput-object vx,field_id | Puts object reference in vx intoa static field. | 6900 0c00 - sput-object v0,Test3.os1:Ljava/lang/Object; // field@000c Puts the object reference value in v0 into the field@000c static field(entry #CH in the field id table). |
6A | sput-boolean vx,field_id | Puts boolean value in vx into astatic field. | 6A00 0300 - sput-boolean v0,Test3.bls1:Z // field@0003 Puts the byte value in v0 into the field@0003 static field(entry #3 in the field id table). |
6B | sput-byte vx,field_id | Puts byte value in vx into astatic field. | 6B00 0200 - sput-byte v0,Test3.bs1:B // field@0002 Puts the byte value in v0 into the field@0002 static field(entry #2 in the field id table). |
6C | sput-char vx,field_id | Puts char value in vx into astatic field. | 6C01 0700 - sput-char v1,Test3.cs1:C // field@0007 Puts the char value in v1 into the field@0007 static field(entry #7 in the field id table). |
6D | sput-short vx,field_id | Puts short value in vx into astatic field. | 6D00 0B00 - sput-short v0,Test3.ss1:S // field@000b Puts the short value in v0 into the field@000b static field(entry #BH in the field id table). |
6E | invoke-virtual { parameters },methodtocall | Invokes a virtual method withparameters. | 6E53 0600 0421 - invoke-virtual{ v4, v0, v1, v2, v3}, Test2.method5:(IIII)V // method@0006 Invokes the 6th method in the method table with the followingarguments: v4 is the "this" instance, v0, v1, v2, and v3 are the methodparameters. The method has 5 arguments (4 MSB bits of the second byte)5. |
6F | invoke-super{parameter},methodtocall | Invokes the virtual method ofthe immediate parent class. | 6F10 A601 0100 invoke-super{v1},java.io.FilterOutputStream.close:()V // method@01a6 Invokes method@01a6 with one parameter, v1. |
70 | invoke-direct { parameters },methodtocall | Invokes a method with parameterswithout the virtual method resolution. | 7010 0800 0100 - invoke-direct{v1}, java.lang.Object.<init>:()V // method@0008 Invokes the 8th method in the method table with just one parameter, v1is the "this" instance5. |
71 | invoke-static {parameters},methodtocall | Invokes a static method withparameters. | 7110 3400 0400 - invoke-static{v4}, java.lang.Integer.parseInt:( Ljava/lang/String;)I // method@0034 Invokes method@34 static method. The method is called with oneparameter, v45. |
72 | invoke-interface{parameters},methodtocall | Invokes an interface method. | 7240 2102 3154 invoke-interface{v1, v3, v4, v5}, mwfw.IReceivingProtocolAdapter.receivePackage:( ILjava/lang/String;Ljava/io/InputStream;)Z // method@0221 Invokes method@221 interface method using parameters in v1,v3,v4 and v55. |
73 | unused_73 | ||
74 | invoke-virtual/range{vx..vy},methodtocall | Invokes virtual method with arange of registers. The instructionspecifies the first register and the number of registers to be passedto the method. | 7403 0600 1300 - invoke-virtual{v19..v21}, Test2.method5:(IIII)V // method@0006 Invokes the 6th method in the method table with the followingarguments: v19 is the "this" instance, v20 and v21 are the methodparameters. |
75 | invoke-super/range | Invokes the virtual methodof the immediate parent class. The instruction specifies the firstregister and the number of registers to be passed to the method. | 7501 A601 0100 invoke-super{v1},java.io.FilterOutputStream.close:()V // method@01a6 Invokes method@01a6 with one parameter, v1. |
76 | invoke-direct/range{vx..vy},methodtocall | Invokes direct method with arange of registers. The instruction specifies the first register andthe number of registers to be passed to the method. | 7603 3A00 1300 -invoke-direct/range {v19..21},java.lang.Object.<init>:()V //method@003a Invokes method@3A with 1 parameters (second byte of theinstruction=03). The parameter is stored in v19 (5th,6th bytes of theinstruction). |
77 | invoke-static/range{vx..vy},methodtocall | Invokes static method with arange of registers. The instructionspecifies the first register and the number of registers to be passedto the method. | 7703 3A00 1300 -invoke-static/range {v19..21},java.lang.Integer.parseInt:(Ljava/lang/String;)I // method@0034 Invokes method@3A with 1 parameters (second byte of theinstruction=03). The parameter is stored in v19 (5th,6th bytes of theinstruction). |
78 | invoke-interface-range | Invokes an interface method witha range of registers. The instructionspecifies the first register and the number of registers to be passedto the method. | 7840 2102 0100 invoke-interface{v1..v4}, mwfw.IReceivingProtocolAdapter.receivePackage:( ILjava/lang/String;Ljava/io/InputStream;)Z // method@0221 Invokes method@221 interface method using parameters in v1..v4. |
79 | unused_79 | ||
7A | unused_7A | ||
7B | neg-int vx,vy | Calculates vx=-vy. | 7B01 - neg-int v1,v0 Calculates -v0 and stores the result in v1. |
7C | not-int vx,vy | ||
7D | neg-long vx,vy | Calculates vx,vx+1=-(vy,vy+1) | 7D02 - neg-long v2,v0 Calculates -(v0,v1) and stores the result into (v2,v3) |
7E | not-long vx,vy | ||
7F | neg-float vx,vy | Calculates vx=-vy | 7F01 - neg-float v1,v0 Calculates -v0 and stores the result into v1. |
80 | neg-double vx,vy | Calculates vx,vx+1=-(vy,vy+1) | 8002 - neg-double v2,v0 Calculates -(v0,v1) and stores the result into (v2,v3) |
81 | int-to-long vx, vy | Converts the integer in vy intoa long in vx,vx+1. | 8106 - int-to-long v6, v0 Converts an integer in v0 into a long in v6,v7. |
82 | int-to-float vx, vy | Converts the integer in vx intoa float in vx. | 8206 - int-to-float v6, v0 Converts the integer in v0 into a float in v6. |
83 | int-to-double vx, vy | Converts the integer in vy intothe double in vx,vx+1. | 8306 - int-to-double v6, v0 Converts the integer in v0 into a double in v6,v7 |
84 | long-to-int vx,vy | Converts the long value invy,vy+1 into an integer in vx. | 8424 - long-to-int v4, v2 Converts the long value in v2,v3 into an integer value in v4. |
85 | long-to-float vx, vy | Converts the long value invy,vy+1 into a float in vx. | 8510 - long-to-float v0, v1 Convcerts the long value in v1,v2 into a float value in v0. |
86 | long-to-double vx, vy | Converts the long value invy,vy+1 into a double value in vx,vx+1. | 8610 - long-to-double v0, v1 Converts the long value in v1,v2 into a double value in v0,v1. |
87 | float-to-int vx, vy | Converts the float value in vyinto an integer value in vx. | 8730 - float-to-int v0, v3 Converts the float value in v3 into an integer value in v0. |
88 | float-to-long vx,vy | Converts the float value in vyinto a long value in vx. | 8830 - float-to-long v0, v3 Converts the float value in v3 into a long value in v0,v1. |
89 | float-to-double vx, vy | Converts the float value in vyinto a double value in vx,vx+1. | 8930 - float-to-double v0, v3 Converts the float value in v3 into a double value in v0,v1. |
8A | double-to-int vx, vy | Converts the double value invy,vy+1 into an integer value in vx. | 8A40 - double-to-int v0, v4 Converts the double value in v4,v5 into an integer value in v0. |
8B | double-to-long vx, vy | Converts the double value invy,vy+1 into a long value in vx,vx+1. | 8B40 - double-to-long v0, v4 Converts the double value in v4,v5 into a long value in v0,v1. |
8C | double-to-float vx, vy | Converts the double value invy,vy+1 into a float value in vx. | 8C40 - double-to-float v0, v4 Converts the double value in v4,v5 into a float value in v0,v1. |
8D | int-to-byte vx,vy | Converts the int value in vy toa byte value and stores it in vx. | 8D00 - int-to-byte v0, v0 Converts the integer in v0 into a byte and puts the byte value into v0. |
8E | int-to-char vx,vy | Converts the int value in vy toa char value and stores it in vx. | 8E33 - int-to-char v3, v3 Converts the integer in v3 into a char and puts the char value into v3. |
8F | int-to-short vx,vy | Converts the int value in vy toa short value and stores it in vx. | 8F00 - int-to-short v0, v0 Converts the integer in v0 into a short and puts the short value intov3. |
90 | add-int vx,vy,vz | Calculates vy+vz and puts theresult into vx. | 9000 0203 - add-int v0, v2, v3 Adds v3 to v2 and puts the result into v04. |
91 | sub-int vx,vy,vz | Calculates vy-vz and puts theresult into vx. | 9100 0203 - sub-int v0, v2, v3 Subtracts v3 from v2 and puts the result into v0. |
92 | mul-int vx, vy, vz | Multiplies vz with wy and putsthe result int vx. | 9200 0203 - mul-int v0,v2,v3 Multiplies v2 with w3 and puts the result into v0 |
93 | div-int vx,vy,vz | Divides vy with vz and puts theresult into vx. | 9303 0001 - div-int v3, v0, v1 Divides v0 with v1 and puts the result into v3. |
94 | rem-int vx,vy,vz | Calculates vy % vz and puts theresult into vx. | 9400 0203 - rem-int v0, v2, v3 Calculates v3 % v2 and puts the result into v0. |
95 | and-int vx, vy, vz | Calculates vy AND vz and putsthe result into vx. | 9503 0001 - and-int v3, v0, v1 Calculates v0 AND v1 and puts the result into v3. |
96 | or-int vx, vy, vz | Calculates vy OR vz and puts theresult into vx. | 9603 0001 - or-int v3, v0, v1 Calculates v0 OR v1 and puts the result into v3. |
97 | xor-int vx, vy, vz | Calculates vy XOR vz and putsthe result into vx. | 9703 0001 - xor-int v3, v0, v1 Calculates v0 XOR v1 and puts the result into v3. |
98 | shl-int vx, vy, vz | Shift vy left by the positionsspecified by vz and store the result into vx. | 9802 0001 - shl-int v2, v0, v1 Shift v0 left by the positions specified by v1 and store the result inv2. |
99 | shr-int vx, vy, vz | Shift vy right by the positionsspecified by vz and store the result into vx. | 9902 0001 - shr-int v2, v0, v1 Shift v0 right by the positions specified by v1 and store the result inv2. |
9A | ushr-int vx, vy, vz | Unsigned shift right(>>>) vy by the positions specified by vz and store the resultinto vx. | 9A02 0001 - ushr-int v2, v0, v1 Unsigned shift v0 right by the positions specified by v1 and store theresult in v2. |
9B | add-long vx, vy, vz | Adds vy to vz and puts theresult into vx1. | 9B00 0305 - add-long v0, v3, v5 The long value in v3,v4 is added to the value in v5,v6 and the resultis stored in v0,v1. |
9C | sub-long vx,vy,vz | Calculates vy-vz and puts theresult into vx1. | 9C00 0305 - sub-long v0, v3, v5 Subtracts the long value in v5,v6 from the long value in v3,v4 and putsthe result into v0,v1. |
9D | mul-long vx,vy,vz | Calculates vy*vz and puts theresult into vx1. | 9D00 0305 - mul-long v0, v3, v5 Multiplies the long value in v5,v6 with the long value in v3,v4 andputsthe result into v0,v1. |
9E | div-long vx, vy, vz | Calculates vy/vz and puts theresult into vx1. | 9E06 0002 - div-long v6, v0, v2 Divides the long value in v0,v1 with the long value in v2,v3 and pustthe result into v6,v7. |
9F | rem-long vx,vy,vz | Calculates vy % vz and puts theresult into vx1. | 9F06 0002 - rem-long v6, v0, v2 Calculates v0,v1 % v2,v3 and putsthe result into v6,v7. |
A0 | and-long vx, vy, vz | Calculates the vy AND vz andputs the result into vx1. | A006 0002 - and-long v6, v0, v2 Calculates v0,v1 AND v2,v3 and puts the result into v6,v7. |
A1 | or-long vx, vy, vz | Calculates the vy OR vz and putsthe result into vx1. | A106 0002 - or-long v6, v0, v2 Calculates v0,v1 OR v2,v3 and puts the result into v6,v7. |
A2 | xor-long vx, vy, vz | Calculates the vy XOR vz andputs the result into vx1. | A206 0002 - xor-long v6, v0, v2 Calculates v0,v1 XOR v2,v3 and puts the result into v6,v7. |
A3 | shl-long vx, vy, vz | Shifts left vy by vz positionsand stores the result in vx1. | A302 0004 - shl-long v2, v0, v4 Shift v0,v1 by postions specified by v4 and puts the result into v2,v3. |
A4 | shr-long vx,vy,vz | Shifts right vy by vz positionsand stores the result in vx1. | A402 0004 - shr-long v2, v0, v4 Shift v0,v1 by postions specified by v4 and puts the result into v2,v3. |
A5 | ushr-long vx, vy, vz | Unsigned shifts right vy by vzpositions and stores the result in vx1. | A502 0004 - ushr-long v2, v0, v4 Unsigned shift v0,v1 by postions specified by v4 and puts the resultinto v2,v3. |
A6 | add-float vx,vy,vz | Adds vy to vz and puts theresult into vx. | A600 0203 - add-float v0, v2, v3 Adds the floating point numbers in v2 and v3 and puts the result intov0. |
A7 | sub-float vx,vy,vz | Calculates vy-vz and puts theresult into vx. | A700 0203 - sub-float v0, v2, v3 Calculates v2-v3 and puts the result intov0. |
A8 | mul-float vx, vy, vz | Multiplies vy with vz and putsthe result into vx. | A803 0001 - mul-float v3, v0, v1 Multiplies v0 with v1 and puts the result into v3. |
A9 | div-float vx, vy, vz | Calculates vy/vz and puts theresult into vx. | A903 0001 - div-float v3, v0, v1 Divides v0 with v1 and puts the result into v3. |
AA | rem-float vx,vy,vz | Calculates vy % vz and puts theresult into vx. | AA03 0001 - rem-float v3, v0, v1 Calculates v0 % v1 and puts the result into v3. |
AB | add-double vx,vy,vz | Adds vy to vz and puts theresult into vx1. | AB00 0305 - add-double v0, v3, v5 Adds the double value in v5,v6 registers to the double value in v3,v4registers and places the result in v0,v1 registers. |
AC | sub-double vx,vy,vz | Calculates vy-vz and puts theresult into vx1. | AC00 0305 - sub-double v0, v3, v5 Subtracts the value in v5,v6 from the value in v3,v4 and puts theresult into v0,v1. |
AD | mul-double vx, vy, vz | Multiplies vy with vz and putsthe result into vx1. | AD06 0002 - mul-double v6, v0, v2 Multiplies the double value in v0,v1 with the double value in v2,v3 andputs the result into v6,v7. |
AE | div-double vx, vy, vz | Calculates vy/vz and puts theresult into vx1. | AE06 0002 - div-double v6, v0, v2 Divides the double value in v0,v1 with the double value in v2,v3 andputs the result into v6,v7. |
AF | rem-double vx,vy,vz | Calculates vy % vz and puts theresult into vx1. | AF06 0002 - rem-double v6, v0, v2 Calculates v0,v1 % v2,v3 andputs the result into v6,v7. |
B0 | add-int/2addr vx,vy | Adds vy to vx. | B010 - add-int/2addr v0,v1 Adds v1 to v0. |
B1 | sub-int/2addr vx,vy | Calculates vx-vy and puts theresult into vx. | B140 - sub-int/2addr v0, v4 Subtracts v4 from v0 and puts the result into v0. |
B2 | mul-int/2addr vx,vy | Multiplies vx with vy. | B210 - mul-int/2addr v0, v1 Multiples v0 with v1 and puts the result into v0. |
B3 | div-int/2addr vx,vy | Divides vx with vy and puts theresult into vx. | B310 - div-int/2addr v0, v1 Divides v0 with v1 and puts the result into v0. |
B4 | rem-int/2addr vx,vy | Calculates vx % vy and puts theresult into vx | B410 - rem-int/2addr v0, v1 Calculates v0 % v1 and puts the result into v0. |
B5 | and-int/2addr vx, vy | Calculates vx AND vy and putsthe result into vx. | B510 - and-int/2addr v0, v1 Calculates v0 AND v1 and puts the result into v0. |
B6 | or-int/2addr vx, vy | Calculates vx OR vy and puts theresult into vx. | B610 - or-int/2addr v0, v1 Calculates v0 OR v1 and puts the result into v0. |
B7 | xor-int/2addr vx, vy | Calculates vx XOR vy and putsthe result into vx. | B710 - xor-int/2addr v0, v1 Calculates v0 XOR v1 and puts the result into v0. |
B8 | shl-int/2addr vx, vy | Shifts vx left by vy positions. | B810 - shl-int/2addr v0, v1 Shift v0 left by v1 positions. |
B9 | shr-int/2addr vx, vy | Shifts vx right by vy positions. | B910 - shr-int/2addr v0, v1 Shift v0 right by v1 positions. |
BA | ushr-int/2addr vx, vy | Unsigned shift right(>>>) vx by the positions specified by vy. | BA10 - ushr-int/2addr v0, v1 Unsigned shift v0 by the positions specified by v1. |
BB | add-long/2addr vx,vy | Adds vy to vx1. | BB20 - add-long/2addr v0, v2 Adds the long value in v2,v3 registers to the long value in v0,v1registers. |
BC | sub-long/2addr vx,vy | Calculates vx-vy and puts theresult into vx1. | BC70 - sub-long/2addr v0, v7 Subtracts the long value in v7,v8 from the long value in v0,v1 and putsthe result into v0,v1. |
BD | mul-long/2addr vx,vy | Calculates vx*vy and puts theresult into vx1. | BD70 - mul-long/2addr v0, v7 Multiplies the long value in v7,v8 with the long value in v0,v1 andputsthe result into v0,v1. |
BE | div-long/2addr vx, vy | Calculates vx/vy and puts theresult into vx1. | BE20 - div-long/2addr v0, v2 Divides the long value in v0,v1 with the long value in v2,v3 and putsthe result into v0,v1 |
BF | rem-long/2addr vx,vy | Calculates vx % vy and puts theresult into vx1. | BF20 - rem-long/2addr v0, v2 Calculates v0,v1 % v2,v3 and putsthe result into v0,v1 |
C0 | and-long/2addr vx, vy | Calculates vx AND vy and putsthe result into vx1. | C020 - and-long/2addr v0, v2 Calculates v0,v1 OR v2,v3 and puts the result into v0,v1. |
C1 | or-long/2addr vx, vy | Calculates vx OR vy and puts theresult into vx1. | C120 - or-long/2addr v0, v2 Calculates v0,v1 OR v2,v3 and puts the result into v0,v1. |
C2 | xor-long/2addr vx, vy | Calculates vx XOR vy and putsthe result into vx1. | C220 - xor-long/2addr v0, v2 Calculates v0,v1 XOR v2,v3 and puts the result into v0,v1. |
C3 | shl-long/2addr vx, vy | Shifts left the value in vx,vx+1by the positions specified by vy and stores the result in vx,vx+1. | C320 - shl-long/2addr v0, v2 Shifts left v0,v1 by the positions specified by v2. |
C4 | shr-long/2addr vx, vy | Shifts right the value invx,vx+1 by the positions specified by vy and stores the result invx,vx+1. | C420 - shr-long/2addr v0, v2 Shifts right v0,v1 by the positions specified by v2. |
C5 | ushr-long/2addr vx, vy | Unsigned shifts right the valuein vx,vx+1 by the positions specified by vy and stores the result invx,vx+1. | C520 - ushr-long/2addr v0, v2 Unsigned shifts right v0,v1 by the positions specified by v2. |
C6 | add-float/2addr vx,vy | Adds vy to vx. | C640 - add-float/2addr v0,v4 Adds v4 to v0. |
C7 | sub-float/2addr vx,vy | Calculates vx-vy and stores theresult in vx. | C740 - sub-float/2addr v0,v4 Adds v4 to v0. |
C8 | mul-float/2addr vx, vy | Multiplies vx with vy. | C810 - mul-float/2addr v0, v1 Multiplies v0 with v1. |
C9 | div-float/2addr vx, vy | Calculates vx/vy and puts theresult into vx. | C910 - div-float/2addr v0, v1 Divides v0 with v1 and puts the result into v0. |
CA | rem-float/2addr vx,vy | Calculates vx/vy and puts theresult into vx. | CA10 - rem-float/2addr v0, v1 Calculates v0 % v1 and puts the result into v0. |
CB | add-double/2addr vx, vy | Adds vy to vx1. | CB70 - add-double/2addr v0, v7 Adds v7 to v0. |
CC | sub-double/2addr vx, vy | Calculates vx-vy and puts theresult into vx1. | CC70 - sub-double/2addr v0, v7 Subtracts the value in v7,v8 from the value in v0,v1 and puts theresult into v0,v1. |
CD | mul-double/2addr vx, vy | Multiplies vx with vy1. | CD20 - mul-double/2addr v0, v2 Multiplies the double value in v0,v1 with the double value in v2,v3 andputs the result into v0,v1. |
CE | div-double/2addr vx, vy | Calculates vx/vy and puts theresult into vx1. | CE20 - div-double/2addr v0, v2 Divides the double value in v0,v1 with the double value in v2,v3 andputs the value into v0,v1. |
CF | rem-double/2addr vx,vy | Calculates vx % vy and puts theresult into vx1. | CF20 - rem-double/2addr v0, v2 Calculates v0,v1 % v2,v3 andputs the value into v0,v1. |
D0 | add-int/lit16 vx,vy,lit16 | Adds vy to lit16 and stores theresult into vx. | D001 D204 - add-int/lit16 v1,v0, #int 1234 // #04d2 Adds v0 to literal 1234 and stores the result into v1. |
D1 | sub-int/lit16 vx,vy,lit16 | Calculates vy - lit16 and storesthe result into vx. | D101 D204 - sub-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 - literal 1234 and stores the result into v1. |
D2 | mul-int/lit16 vx,vy,lit16 | Calculates vy * lit16 and storesthe result into vx. | D201 D204 - mul-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 * literal 1234 and stores the result into v1. |
D3 | div-int/lit16 vx,vy,lit16 | Calculates vy / lit16 and storesthe result into vx. | D301 D204 - div-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 / literal 1234 and stores the result into v1. |
D4 | rem-int/lit16 vx,vy,lit16 | Calculates vy % lit16 and storesthe result into vx. | D401 D204 - rem-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 % literal 1234 and stores the result into v1. |
D5 | and-int/lit16 vx,vy,lit16 | Calculates vy AND lit16 andstores the result into vx. | D501 D204 - and-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 AND literal 1234 and stores the result into v1. |
D6 | or-int/lit16 vx,vy,lit16 | Calculates vy OR lit16 andstores the result into vx. | D601 D204 - or-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 OR literal 1234 and stores the result into v1. |
D7 | xor-int/lit16 vx,vy,lit16 | Calculates vy XOR lit16 andstores the result into vx. | D701 D204 - xor-int/lit16 v1,v0, #int 1234 // #04d2 Calculates v0 XOR literal 1234 and stores the result into v1. |
D8 | add-int/lit8 vx,vy,lit8 | Adds vy to lit8 and stores theresult into vx. | D800 0201 - add-int/lit8 v0,v2,#int1 Adds literal 1 to v2 and stores the result into v0. |
D9 | sub-int/lit8 vx,vy,lit8 | Calculates vy-lit8 and storestheresult into vx. | D900 0201 - sub-int/lit8 v0,v2,#int1 Calculates v2-1 and stores the result into v0. |
DA | mul-int/lit8 vx,vy,lit8 | Multiplies vy with lit8 8-bitliteral constant and puts the result into vx. | DA00 0002 - mul-int/lit8 v0,v0,#int2 Multiplies v0 with literal 2 and puts the result into v0. |
DB | div-int/lit8 vx,vy,lit8 | Calculates vy/lit8 and storestheresult into vx. | DB00 0203 - mul-int/lit8 v0,v2,#int3 Calculates v2/3 and stores the result into v0. |
DC | rem-int/lit8 vx,vy,lit8 | Calculates vy % lit8 and storestheresult into vx. | DC00 0203 - rem-int/lit8 v0,v2,#int3 Calculates v2 % 3 and stores the result into v0. |
DD | and-int/lit8 vx,vy,lit8 | Calculates vy AND lit8 andstores theresult into vx. | DD00 0203 - and-int/lit8 v0,v2,#int3 Calculates v2 AND 3 and stores the result into v0. |
DE | or-int/lit8 vx, vy, lit8 | Calculates vy OR lit8 and putsthe result into vx. | DE00 0203 - or-int/lit8 v0, v2,#int 3 Calculates v2 OR literal 3 and puts the result into v0. |
DF | xor-int/lit8 vx, vy, lit8 | Calculates vy XOR lit8 and putsthe result into vx. | DF000203 | 0008: xor-int/lit8 v0, v2, #int 3 Calculates v2 XOR literal 3 and puts the result into v0. |
E0 | shl-int/lit8 vx, vy, lit8 | Shift v0 left by the bitpositions specified by the literal constant and put the result into vx. | E001 0001 - shl-int/lit8 v1, v0,#int 1 Shift v0 left by 1 position and put the result into v1. |
E1 | shr-int/lit8 vx, vy, lit8 | Shift v0 right by the bitpositions specified by the literal constant and put the result into vx. | E101 0001 - shr-int/lit8 v1, v0,#int 1 Shift v0 right by 1 position and put the result into v1. |
E2 | ushr-int/lit8 vx, vy, lit8 | Unsigned right shift of v0(>>>) by the bit positions specified by the literal constantand put the result into vx. | E201 0001 - ushr-int/lit8 v1,v0, #int 1 Unsigned shift v0 right by 1 position and put the result into v1. |
E3 | unused_E3 | ||
E4 | unused_E4 | ||
E5 | unused_E5 | ||
E6 | unused_E6 | ||
E7 | unused_E7 | ||
E8 | unused_E8 | ||
E9 | unused_E9 | ||
EA | unused_EA | ||
EB | unused_EB | ||
EC | unused_EC | ||
ED | unused_ED | ||
EE | execute-inline{parameters},inline ID | Executes the inline methodidentified by inline ID6. | EE20 0300 0100 - execute-inline{v1, v0}, inline #0003 Executes inline method #3 using v1 as "this" and passing one parameterin v0. |
EF | unused_EF | ||
F0 | invoke-direct-empty | Stands as a placeholder forpruned empty methods like Object.<init>. This acts as nop duringnormal execution6. | F010 F608 0000 -invoke-direct-empty {v0}, Ljava/lang/Object;.<init>:()V //method@08f6 Replacement for the empty method java/lang/Object;<init>. |
F1 | unused_F1 | ||
F2 | iget-quick vx,vy,offset | Gets the value stored at offsetin vy instance's data area to vx6. | F221 1000 - iget-quick v1, v2,[obj+0010] Gets the value at offset 0CH of the instance pointed by v2 and storesthe object reference in v1. |
F3 | iget-wide-quick vx,vy,offset | Gets the object reference valuestored at offset in vy instance's data area to vx,vx+16. | F364 3001 - iget-wide-quick v4,v6, [obj+0130] Gets the value at offset 130H of the instance pointed by v6 and storesthe object reference in v4,v5. |
F4 | iget-object-quick vx,vy,offset | Gets the object reference valuestored at offset in vy instance's data area to vx6. | F431 0C00 - iget-object-quickv1, v3, [obj+000c] Gets the object reference value at offset 0CH of the instance pointedby v3 and stores the object reference in v1. |
F5 | iput-quick vx,vy,offset | Puts the value stored in vx tooffset in vy instance's data area6. | F521 1000 - iput-quick v1,v2, [obj+0010] Puts the object reference value in v1 to offset 10H of the instancepointed by v2. |
F6 | iput-wide-quick vx,vy,offset | Puts the value stored in vx,vx+1to offset in vy instance's data area6. | F652 7001 - iput-wide-quick v2,v5, [obj+0170] Puts the value in v2,v3 to offset 170H of the instance pointed by v5. |
F7 | iput-object-quick vx,vy,offset | Puts the object reference valuestored in vx to offset in vy instance's data area to vx6. | F701 4C00 - iput-object-quickv1, v0, [obj+004c] Puts the object reference value in v1 to offset 0CH of the instancepointed by v3. |
F8 | invoke-virtual-quick{parameters},vtable offset | Invokes a virtual method usingthe vtable of the target object6. | F820 B800 CF00 -invoke-virtual-quick {v15, v12}, vtable #00b8 Invokes a virtual method. The target object instance is pointed by v15and vtable entry #B8 points to the method to be called. v12 is aparameter to the method call. |
F9 | invoke-virtual-quick/range{parameter range},vtable offset | Invokes a virtual method usingthe vtable of the target object6 | F906 1800 0000 -invoke-virtual-quick/range {v0..v5},vtable #0018 Invokes a method using the vtable of theinstance pointed by v0. v1..v5 registers are parameters to the methodcall. |
FA | invoke-super-quick{parameters},vtable offset | Invokes a virtual method in thetarget object's immediate parent class using the vtable of that parentclass6. | FA40 8100 3254 -invoke-super-quick {v2, v3, v4, v5}, vtable #0081 Invokes a method using the vtable of the immediate parent class ofinstance pointed by v2. v3, v4 and v5 registers are parameters to themethodcall. |
FB | invoke-super-quick/range{register range},vtable offset | Invokes a virtual method in thetarget object's immediate parent class using the vtable of that parentclass6. | F906 1B00 0000 -invoke-super-quick/range {v0..v5}, vtable #001b Invokes a method using the vtable of the immediate parent class ofinstance pointed by v0. v1..v5 registers are parameters to the methodcall. |
FC | unused_FC | ||
FD | unused_FD | ||
FE | unused_FE | ||
FF | unused_FF |
- Note that double and longvalues occupytwo registers (e.g. the value addressed by vy is located in vy and vy+1registers)
- The offset can be positive or negative and it is calculated fromthe offset of the starting byte of the instruction. The offset isalways interpreted in words (2 bytes per 1 offset valueincrement/decrement). Negative offset is stored in two's complementformat. The currentposition is the offset of the starting byte of the instruction.
- Compare operations returrn positive value if the first operand isgreater than the second operand, 0 if they are equal and negative valueif the first operand is smaller than the second operand.
- Not seen in the wild, interpolated from Dalvik bytecode list.
- The invocation parameter list encoding is somewhat weird.Starting if parameter number > 4 and parameter number % 4 == 1, the5th (9th, etc.) parameter is encoded on the 4 lowest bit of the byteimmediately following the instruction. Curiously, this encoding is notused in case of 1 parameter, in this case an entire 16 bit word isadded after the method index of which only 4 bit is used to encode thesingle parameter while the lowest 4 bit of the byte following theinstruction byte is left unused.
- This is an unsafe instruction and occurs only in ODEX files.