目錄
官方說明是jvms14.pdf
nop
0x00 無操作
處理棧
說明 | String | int | float | boolean | char | short | long | double | |
xconst_n x類型的n進棧 | 0x01 aconst_null null進棧 | 0x02 iconst_m1 -1進棧 | |||||||
0x03 iconst_0 | 0x0B fconst_0 | 0x09 lconst_0 | 0x0E dconst_0 | ||||||
0x04 iconst_1 | 0x0C fconst_1 | 0x0A lconst_1 | 0x0F dconst_1 | ||||||
0x05 iconst_2 | 0x0D fconst_2 | ||||||||
0x06 iconst_3 | |||||||||
0x07 iconst_4 | |||||||||
0x08 iconst_5 5進棧 | |||||||||
ldc | 0x12 ldc 將常量值從常量池推棧頂 | ||||||||
0x13 ldc_w將常量值從常量池推棧頂(寬索引) | 0x14 ldc2_w 將常量值從常量池推棧頂 | ||||||||
tload [index] 將局部變量進棧 | 0x19 aload 將index執行局部變量進棧 | 0x15 iload | 0x17 fload | 0x16 lload | 0x18 dload | ||||
tload_n 將第n個t形局部變量進棧 | 0x2A aload_0 | 0x1A iload_0 | 0x22 fload_0 | 0x1E lload_0 | 0x26 dload_0 | ||||
0x2B aload_1 | 0x1B iload_1 | 0x23 fload_1 | 0x1F lload_1 | 0x27 dload_1 | |||||
0x2C aload_2 | 0x1C iload_2 | 0x24 fload_2 | 0x20 lload_2 | 0x28 dload_2 | |||||
0x2D aload_3 | 0x1D iload_3 | 0x25 fload_2 | 0x21 lload_3 | 0x29 dload_3 | |||||
taload 將t形數組第index值進棧 | 0x32 aaload |
0x2E iaload |
0x30 faload | 0x33 baload | 0x34 caload | 0x35 saload | 0x2F laload | 0x31 daload | |
tstore 將棧頂數值存入局部變量 | 0x3A astore | 0x36 istore | 0x38 fstore | 0x37 lstore | 0x39 dstore | ||||
tstore_n 將棧頂存入第n個局部變量 |
0x4B astore_0 | 0x3B istore_0 | 0x43 fstore_0 | 0x3F lstore_0 | 0x47 dstore_0 | ||||
0x4C astore_1 | 0x3C istore_1 | 0x44 fstore_1 | 0x40 lstore_1 | 0x48 dstore_1 | |||||
0x4D astore_2 | 0x3D istore_2 | 0x45 fstore_2 | 0x41 lstore_2 | 0x49 dstore_2 | |||||
0x4E astore_3 | 0x3E istore_3 | 0x46 fstore_3 | 0x42 lstore_3 | 0x4A dstore_3 | |||||
tastore 將棧頂數值存入數組 | 0x53 aastore | 0x4F iastore | 0x51 fastore | 0x54 bastore | 0x55 castore | 0x56 sastore | 0x50 lastore | 0x52 dastore | |
pop | 0x57 pop 棧頂出棧 | ||||||||
0x58 pop2 棧頂一個(long/double)/兩個(其他類型)出棧 | |||||||||
dup | 0x59 dup 複製棧頂並進棧 | ||||||||
0x5A dup_x1 複製棧頂並插入棧中(必須看官網文檔) | |||||||||
0x5B dup_x2 複製棧頂並插入棧中(必須看官網文檔) | |||||||||
0x5C dup2 | |||||||||
0x5D dup2_x1 | |||||||||
0x5E dup2_x2 | |||||||||
swap | 0x5F swap 交換棧頂兩個數值 | ||||||||
cmp | 0x95 fcmpl 一個爲NaN則爲-1 | 0x94 lcmp比較棧頂 | 0x97 dcmpl 一個爲NaN則爲-1 | ||||||
0x96 fcompg 一個爲NaN則爲1 | 0x98 dcmpg | ||||||||
算數運算
i | f | l | d | |
tadd 棧頂兩數值相加並進棧(原數消失) | iadd 0x60 | fadd 0x62 | ladd 0x61 | dadd 0x63 |
tsub(棧頂是減數) | isub 0x64 | fsub 0x66 | lsub 0x65 | dsub 0x67 |
tmul | imul 0x68 | fmul 0x6A | lmul 0x69 | dmul 0x6B |
tdiv(遵循IEEE規範) | 0x6C idiv | 0x6E fdiv | 0x6D ldiv | 0x6F ddiv |
trem(取模) | ||||
tneg(取相反數) | ||||
0x84 iinc 自增1 |
位運算
tshl(左移) |
tshr(帶符號右移>>) |
tushr(>>>) |
tand(按位與) |
tor(按位或) |
txor(按位異或) |
類型裝換
i | l | f | d | |
i | l2i 0x88 | f2i 0x8B | d2i 0x8E | |
l | i2l 0x85 | f2l 0x8C | d2l 0x8F | |
f | i2f 0x86 | l2f 0x89 | d2f 0x90 | |
d | i2d 0x87 | l2d 0x8A | 0x8D | |
b | i2b 0x91 | |||
c | i2c 0x92 | |||
s | i2s 0x93 |
方法調用
invokevitual
invokeinterface
invokespecial:調用不會被重寫的方法(私有方法,初始化方法,父類方法)
invokestatic:調用靜態方法