JVM指令集(指令碼、助記符、功能描述)數組
指令碼ide |
助記符spa |
功能描述線程 |
||||||||||||||
0x00code |
nop對象 |
無操做索引 |
||||||||||||||
|
||||||||||||||||
0x01接口 |
aconst_nullip |
指令格式: aconst_null內存
功能描述: null進棧。
注意:JVM並無爲null指派一個具體的值。
|
||||||||||||||
|
||||||||||||||||
0x02 |
iconst_m1 |
int型常量值-1進棧 |
||||||||||||||
0x03 |
iconst_0 |
int型常量值0進棧 |
||||||||||||||
0x04 |
iconst_1 |
int型常量值1進棧 |
||||||||||||||
0x05 |
iconst_2 |
int型常量值2進棧 |
||||||||||||||
0x06 |
iconst_3 |
int型常量值3進棧 |
||||||||||||||
0x07 |
iconst_4 |
int型常量值4進棧 |
||||||||||||||
0x08 |
iconst_5 |
int型常量值5進棧 |
||||||||||||||
|
||||||||||||||||
0x09 |
lconst_0 |
long型常量值0進棧 |
||||||||||||||
0x0A |
lconst_1 |
long型常量值1進棧 |
||||||||||||||
|
||||||||||||||||
0x0B |
fconst_0 |
float型常量值0進棧 |
||||||||||||||
0x0C |
fconst_1 |
float型常量值1進棧 |
||||||||||||||
0x0D |
fconst_2 |
float型常量值2進棧 |
||||||||||||||
|
||||||||||||||||
0x0E |
dconst_0 |
double型常量值0進棧 |
||||||||||||||
0x0F |
dconst_1 |
double型常量值1進棧 |
||||||||||||||
|
||||||||||||||||
0x10 |
bipush |
將一個byte型常量值推送至棧頂 |
||||||||||||||
0x11 |
sipush |
將一個short型常量值推送至棧頂 |
||||||||||||||
|
||||||||||||||||
0x12 |
ldc |
將int、float或String型常量值從常量池中推送至棧頂 |
||||||||||||||
0x13 |
ldc_w |
將int、float或String型常量值從常量池中推送至棧頂(寬索引) |
||||||||||||||
0x14 |
ldc2_w |
將long或double型常量值從常量池中推送至棧頂(寬索引) |
||||||||||||||
|
||||||||||||||||
0x15 |
iload |
指定的int型局部變量進棧 |
||||||||||||||
0x16 |
lload |
指定的long型局部變量進棧 |
||||||||||||||
0x17 |
fload |
指定的float型局部變量進棧 |
||||||||||||||
0x18 |
dload |
指定的double型局部變量進棧 |
||||||||||||||
0x19 |
aload |
指令格式: aload index
功能描述: 當前frame的局部變量數組中下標爲 index的引用型局部變量進棧
index : 無符號一byte整型。和wide指令聯用, 能夠使index爲兩byte。
|
||||||||||||||
|
||||||||||||||||
0x1A |
iload_0 |
第一個int型局部變量進棧 |
||||||||||||||
0x1B |
iload_1 |
第二個int型局部變量進棧 |
||||||||||||||
0x1C |
iload_2 |
第三個int型局部變量進棧 |
||||||||||||||
0x1D |
iload_3 |
第四個int型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x1E |
lload_0 |
第一個long型局部變量進棧 |
||||||||||||||
0x1F |
lload_1 |
第二個long型局部變量進棧 |
||||||||||||||
0x20 |
lload_2 |
第三個long型局部變量進棧 |
||||||||||||||
0x21 |
lload_3 |
第四個long型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x22 |
fload_0 |
第一個float型局部變量進棧 |
||||||||||||||
0x23 |
fload_1 |
第二個float型局部變量進棧 |
||||||||||||||
0x24 |
fload_2 |
第三個float型局部變量進棧 |
||||||||||||||
0x25 |
fload_3 |
第四個float型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x26 |
dload_0 |
第一個double型局部變量進棧 |
||||||||||||||
0x27 |
dload_1 |
第二個double型局部變量進棧 |
||||||||||||||
0x28 |
dload_2 |
第三個double型局部變量進棧 |
||||||||||||||
0x29 |
dload_3 |
第四個double型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x2A |
aload_0 |
指令格式:aload_0
該指令的行爲相似於aload指令index爲0的狀況。
|
||||||||||||||
0x2B |
aload_1 |
同上
|
||||||||||||||
0x2C |
aload_2 |
同上
|
||||||||||||||
0x2D |
aload_3 |
同上
|
||||||||||||||
|
||||||||||||||||
0x2E |
iaload |
指定的int型數組的指定下標處的值進棧 |
||||||||||||||
0x2F |
laload |
指定的long型數組的指定下標處的值進棧 |
||||||||||||||
0x30 |
faload |
指定的float型數組的指定下標處的值進棧 |
||||||||||||||
0x31 |
daload |
指定的double型數組的指定下標處的值進棧 |
||||||||||||||
0x32 |
aaload |
指令格式: aaload
功能描述: 棧頂的數組下標(index)、數組引用 (arrayref)出棧,並根據這兩個數值 取出對應的數組元素值(value)進棧。
拋出異常: 若是arrayref的值爲null,會拋出 NullPointerException。 若是index形成數組越界,會拋出 ArrayIndexOutOfBoundsException。
index : int類型 arrayref : 數組的引用
|
||||||||||||||
0x33 |
baload |
指定的boolean或byte型數組的指定下標處的值進棧 |
||||||||||||||
0x34 |
caload |
指定的char型數組的指定下標處的值進棧 |
||||||||||||||
0x35 |
saload |
指定的short型數組的指定下標處的值進棧 |
||||||||||||||
|
||||||||||||||||
0x36 |
istore |
將棧頂int型數值存入指定的局部變量 |
||||||||||||||
0x37 |
lstore |
將棧頂long型數值存入指定的局部變量 |
||||||||||||||
0x38 |
fstore |
將棧頂float型數值存入指定的局部變量 |
||||||||||||||
0x39 |
dstore |
將棧頂double型數值存入指定的局部變量 |
||||||||||||||
0x3A |
astore |
指令格式: astore index
功能描述: 將棧頂數值(objectref)存入當前 frame的局部變量數組中指定下標 (index)處的變量中,棧頂數值出棧。
index : 無符號一byte整數。該指令和wide聯 用,index能夠爲無符號兩byte整數。
|
||||||||||||||
|
||||||||||||||||
0x3B |
istore_0 |
將棧頂int型數值存入第一個局部變量 |
||||||||||||||
0x3C |
istore_1 |
將棧頂int型數值存入第二個局部變量 |
||||||||||||||
0x3D |
istore_2 |
將棧頂int型數值存入第三個局部變量 |
||||||||||||||
0x3E |
istore_3 |
將棧頂int型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x3F |
lstore_0 |
將棧頂long型數值存入第一個局部變量 |
||||||||||||||
0x40 |
lstore_1 |
將棧頂long型數值存入第二個局部變量 |
||||||||||||||
0x41 |
lstore_2 |
將棧頂long型數值存入第三個局部變量 |
||||||||||||||
0x42 |
lstore_3 |
將棧頂long型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x43 |
fstore_0 |
將棧頂float型數值存入第一個局部變量 |
||||||||||||||
0x44 |
fstore_1 |
將棧頂float型數值存入第二個局部變量 |
||||||||||||||
0x45 |
fstore_2 |
將棧頂float型數值存入第三個局部變量 |
||||||||||||||
0x46 |
fstore_3 |
將棧頂float型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x47 |
dstore_0 |
將棧頂double型數值存入第一個局部變量 |
||||||||||||||
0x48 |
dstore_1 |
將棧頂double型數值存入第二個局部變量 |
||||||||||||||
0x49 |
dstore_2 |
將棧頂double型數值存入第三個局部變量 |
||||||||||||||
0x4A |
dstore_3 |
將棧頂double型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x4B |
astore_0 |
指令格式: astore_0
功能描述: 該指令的行爲相似於astore指令index 爲0的狀況。
|
||||||||||||||
0x4C |
astore_1 |
同上
|
||||||||||||||
0x4D |
astore_2 |
同上
|
||||||||||||||
0x4E |
astore_3 |
同上
|
||||||||||||||
|
||||||||||||||||
0x4F |
iastore |
將棧頂int型數值存入指定數組的指定下標處 |
||||||||||||||
0x50 |
lastore |
將棧頂long型數值存入指定數組的指定下標處 |
||||||||||||||
0x51 |
fastore |
將棧頂float型數值存入指定數組的指定下標處 |
||||||||||||||
0x52 |
dastore |
將棧頂double型數值存入指定數組的指定下標處 |
||||||||||||||
0x53 |
aastore |
指令格式: aastore
功能描述: 根據棧頂的引用型數值(value)、數組下 標(index)、數組引用(arrayref)出 棧,將數值存入對應的數組元素中。
拋出異常: 若是value的類型和arrayref所引用 的數組的元素類型不兼容,會拋出拋出 ArrayStoreException。 若是index形成數組越界,會拋出 ArrayIndexOutOfBoundsException。 若是arrayref值爲null,會拋出 NullPointerException。
arrayref : 必須是對數組的引用 index : int類型 value : 引用類型
|
||||||||||||||
0x54 |
bastore |
將棧頂boolean或byte型數值存入指定數組的指定下標處 |
||||||||||||||
0x55 |
castore |
將棧頂char型數值存入指定數組的指定下標處 |
||||||||||||||
0x56 |
sastore |
將棧頂short型數值存入指定數組的指定下標處 |
||||||||||||||
|
||||||||||||||||
0x57 |
pop |
棧頂數值出棧 (該棧頂數值不能是long或double型) |
||||||||||||||
0x58 |
pop2 |
棧頂的一個(若是是long、double型的)或兩個(其它類型的)數值出棧 |
||||||||||||||
|
||||||||||||||||
0x59 |
dup |
複製棧頂數值,而且複製值進棧 |
||||||||||||||
0x5A |
dup_x1 |
複製棧頂數值,而且複製值進棧2次 |
||||||||||||||
0x5B |
dup_x2 |
複製棧頂數值,而且複製值進棧2次或3次 |
||||||||||||||
0x5C |
dup2 |
複製棧頂一個(long、double型的)或兩個(其它類型的)數值,而且複製值進棧 |
||||||||||||||
0x5D |
dup2_x1 |
|
||||||||||||||
0x5E |
dup2_x2 |
|
||||||||||||||
|
||||||||||||||||
0x5F |
swap |
棧頂的兩個數值互換(要求棧頂的兩個數值不能是long或double型的) |
||||||||||||||
|
||||||||||||||||
0x60 |
iadd |
棧頂兩int型數值相加,而且結果進棧 |
||||||||||||||
0x61 |
ladd |
棧頂兩long型數值相加,而且結果進棧 |
||||||||||||||
0x62 |
fadd |
棧頂兩float型數值相加,而且結果進棧 |
||||||||||||||
0x63 |
dadd |
棧頂兩double型數值相加,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x64 |
isub |
棧頂兩int型數值相減,而且結果進棧 |
||||||||||||||
0x65 |
lsub |
棧頂兩long型數值相減,而且結果進棧 |
||||||||||||||
0x66 |
fsub |
棧頂兩float型數值相減,而且結果進棧 |
||||||||||||||
0x67 |
dsub |
棧頂兩double型數值相減,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x68 |
imul |
棧頂兩int型數值相乘,而且結果進棧 |
||||||||||||||
0x69 |
lmul |
棧頂兩long型數值相乘,而且結果進棧 |
||||||||||||||
0x6A |
fmul |
棧頂兩float型數值相乘,而且結果進棧 |
||||||||||||||
0x6B |
dmul |
棧頂兩double型數值相乘,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x6C |
idiv |
棧頂兩int型數值相除,而且結果進棧 |
||||||||||||||
0x6D |
ldiv |
棧頂兩long型數值相除,而且結果進棧 |
||||||||||||||
0x6E |
fdiv |
棧頂兩float型數值相除,而且結果進棧 |
||||||||||||||
0x6F |
ddiv |
棧頂兩double型數值相除,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x70 |
irem |
棧頂兩int型數值做取模運算,而且結果進棧 |
||||||||||||||
0x71 |
lrem |
棧頂兩long型數值做取模運算,而且結果進棧 |
||||||||||||||
0x72 |
frem |
棧頂兩float型數值做取模運算,而且結果進棧 |
||||||||||||||
0x73 |
drem |
棧頂兩double型數值做取模運算,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x74 |
ineg |
棧頂int型數值取負,而且結果進棧 |
||||||||||||||
0x75 |
lneg |
棧頂long型數值取負,而且結果進棧 |
||||||||||||||
0x76 |
fneg |
棧頂float型數值取負,而且結果進棧 |
||||||||||||||
0x77 |
dneg |
棧頂double型數值取負,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x78 |
ishl |
int型數值左移指定位數,而且結果進棧 |
||||||||||||||
0x79 |
lshl |
long型數值左移指定位數,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x7A |
ishr |
int型數值帶符號右移指定位數,而且結果進棧 |
||||||||||||||
0x7B |
lshr |
long型數值帶符號右移指定位數,而且結果進棧 |
||||||||||||||
0x7C |
iushr |
int型數值無符號右移指定位數,而且結果進棧 |
||||||||||||||
0x7D |
lushr |
long型數值無符號右移指定位數,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x7E |
iand |
棧頂兩int型數值按位與,而且結果進棧 |
||||||||||||||
0x7F |
land |
棧頂兩long型數值按位與,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x80 |
ior |
棧頂兩int型數值按位或,而且結果進棧 |
||||||||||||||
0x81 |
lor |
棧頂兩long型數值按位或,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x82 |
ixor |
棧頂兩int型數值按位異或,而且結果進棧 |
||||||||||||||
0x83 |
lxor |
棧頂兩long型數值按位異或,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x84 |
iinc |
指定int型變量增長指定值 |
||||||||||||||
|
||||||||||||||||
0x85 |
i2l |
棧頂int值強轉long值,而且結果進棧 |
||||||||||||||
0x86 |
i2f |
棧頂int值強轉float值,而且結果進棧 |
||||||||||||||
0x87 |
i2d |
棧頂int值強轉double值,而且結果進棧 |
||||||||||||||
0x88 |
l2i |
棧頂long值強轉int值,而且結果進棧 |
||||||||||||||
0x89 |
l2f |
棧頂long值強轉float值,而且結果進棧 |
||||||||||||||
0x8A |
l2d |
棧頂long值強轉double值,而且結果進棧 |
||||||||||||||
0x8B |
f2i |
棧頂float值強轉int值,而且結果進棧 |
||||||||||||||
0x8C |
f2l |
棧頂float值強轉long值,而且結果進棧 |
||||||||||||||
0x8D |
f2d |
棧頂float值強轉double值,而且結果進棧 |
||||||||||||||
0x8E |
d2i |
棧頂double值強轉int值,而且結果進棧 |
||||||||||||||
0x8F |
d2l |
棧頂double值強轉long值,而且結果進棧 |
||||||||||||||
0x90 |
d2f |
棧頂double值強轉float值,而且結果進棧 |
||||||||||||||
0x91 |
i2b |
棧頂int值強轉byte值,而且結果進棧 |
||||||||||||||
0x92 |
i2c |
棧頂int值強轉char值,而且結果進棧 |
||||||||||||||
0x93 |
i2s |
棧頂int值強轉short值,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x94 |
lcmp |
比較棧頂兩long型數值大小,而且結果(1,0,-1)進棧 |
||||||||||||||
0x95 |
fcmpl |
比較棧頂兩float型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時, -1進棧 |
||||||||||||||
0x96 |
fcmpg |
比較棧頂兩float型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時,1進棧 |
||||||||||||||
0x97 |
dcmpl |
比較棧頂兩double型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時,-1進棧 |
||||||||||||||
0x98 |
dcmpg |
比較棧頂兩double型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時,1進棧 |
||||||||||||||
|
||||||||||||||||
0x99 |
ifeq |
當棧頂int型數值等於0時跳轉 |
||||||||||||||
0x9A |
ifne |
當棧頂int型數值不等於0時跳轉 |
||||||||||||||
0x9B |
iflt |
當棧頂int型數值小於0時跳轉 |
||||||||||||||
0x9C |
ifge |
當棧頂int型數值大於等於0時跳轉 |
||||||||||||||
0x9D |
ifgt |
當棧頂int型數值大於0時跳轉 |
||||||||||||||
0x9E |
ifle |
當棧頂int型數值小於等於0時跳轉 |
||||||||||||||
0x9F |
if_icmpeq |
比較棧頂兩int型數值大小,當結果等於0時跳轉 |
||||||||||||||
0xA0 |
if_icmpne |
比較棧頂兩int型數值大小,當結果不等於0時跳轉 |
||||||||||||||
0xA1 |
if_icmplt |
比較棧頂兩int型數值大小,當結果小於0時跳轉 |
||||||||||||||
0xA2 |
if_icmpge |
比較棧頂兩int型數值大小,當結果大於等於0時跳轉 |
||||||||||||||
0xA3 |
if_icmpgt |
比較棧頂兩int型數值大小,當結果大於0時跳轉 |
||||||||||||||
0xA4 |
if_icmple |
比較棧頂兩int型數值大小,當結果小於等於0時跳轉 |
||||||||||||||
0xA5 |
if_acmpeq |
比較棧頂兩引用型數值,當結果相等時跳轉 |
||||||||||||||
0xA6 |
if_acmpne |
比較棧頂兩引用型數值,當結果不相等時跳轉 |
||||||||||||||
|
||||||||||||||||
0xA7 |
goto |
無條件跳轉 |
||||||||||||||
|
||||||||||||||||
0xA8 |
jsr |
跳轉至指定16位offset位置,並將jsr下一條指令地址壓入棧頂 |
||||||||||||||
0xA9 |
ret |
返回至局部變量指定的index的指令位置(一般與jsr、jsr_w聯合使用) |
||||||||||||||
0xAA |
tableswitch |
用於switch條件跳轉,case值連續(可變長度指令) |
||||||||||||||
0xAB |
lookupswitch |
用於switch條件跳轉,case值不連續(可變長度指令) |
||||||||||||||
|
||||||||||||||||
0xAC |
ireturn |
當前方法返回int |
||||||||||||||
0xAD |
lreturn |
當前方法返回long |
||||||||||||||
0xAE |
freturn |
當前方法返回float |
||||||||||||||
0xAF |
dreturn |
當前方法返回double |
||||||||||||||
0xB0 |
areturn |
指令格式: areturn
功能描述: 從方法中返回一個對象的引用。
拋出異常: 若是當前方法是 而且當前線程不是改方法的鎖的擁有者, 會拋出 IllegalMonitorStateException。
objectref : 被返回的對象引用。
|
||||||||||||||
0xB1 |
return |
當前方法返回void |
||||||||||||||
|
||||||||||||||||
0xB2 |
getstatic |
獲取指定類的靜態域,並將其值壓入棧頂 |
||||||||||||||
0xB3 |
putstatic |
爲指定的類的靜態域賦值 |
||||||||||||||
0xB4 |
getfield |
獲取指定類的實例域,並將其值壓入棧頂 |
||||||||||||||
0xB5 |
putfield |
爲指定的類的實例域賦值 |
||||||||||||||
|
||||||||||||||||
0xB6 |
invokevirtual |
調用實例方法 |
||||||||||||||
0xB7 |
invokespecial |
調用超類構造方法、實例初始化方法、私有方法 |
||||||||||||||
0xB8 |
invokestatic |
調用靜態方法 |
||||||||||||||
0xb9 |
invokeinterface |
調用接口方法 |
||||||||||||||
|
||||||||||||||||
0xBA |
--- |
由於歷史緣由,該碼點爲未使用的保留碼點 |
||||||||||||||
|
||||||||||||||||
0xBB |
new |
建立一個對象,而且其引用進棧 |
||||||||||||||
0xBC |
newarray |
建立一個基本類型數組,而且其引用進棧 |
||||||||||||||
0xBD |
anewarray |
指令格式: anewarray index1 index2
功能描述: 棧頂數值(count)做爲數組長度,建立 一個引用 型數組。棧頂數值出棧,數組引 用進棧。
拋出異常: 若是count小於0,會拋出 NegativeArraySizeException
count : int類型。 arrayref : 對所建立的數組的引用。
|
||||||||||||||
0xBE |
arraylength |
指令格式: arraylength
功能描述: 棧頂的數組引用(arrayref)出棧,該 數組的長度進棧。
拋出異常: 若是arrayref的值爲null,會拋出 NullPointerException。
arrayref : 數組引用 length : 數組長度
|
||||||||||||||
|
||||||||||||||||
0xBF |
athrow |
指令格式: athrow
功能描述: 將棧頂的數值做爲異常或錯誤拋出
拋出異常: 若是棧頂數值爲null,則使用 NullPointerException代替棧頂數 值拋出。 若是方法是的,則有可能拋出 IllegalMonitorStateException。
objectref : Throwable或其子類的實例的引用。
|
||||||||||||||
0xC0 |
checkcast |
類型轉換檢查,若是該檢查未經過將會拋出ClassCastException異常 |
||||||||||||||
0xc1 |
instanceof |
檢查對象是不是指定的類的實例。若是是,1進棧;不然,0進棧 |
||||||||||||||
|
||||||||||||||||
0xC2 |
monitorenter |
得到對象鎖 |
||||||||||||||
0xC3 |
monitorexit |
釋放對象鎖 |
||||||||||||||
|
||||||||||||||||
0xC4 |
wide |
用於修改其餘指令的行爲 |
||||||||||||||
|
||||||||||||||||
0xC5 |
multianewarray |
建立指定類型和維度的多維數組(執行該指令時,棧中必須包含各維度的長度值),而且其引用值進棧 |
||||||||||||||
|
||||||||||||||||
0xC6 |
ifnull |
爲null時跳轉 |
||||||||||||||
0xC7 |
ifnonnull |
不爲null時跳轉 |
||||||||||||||
0xC8 |
goto_w |
無條件跳轉(寬索引) |
||||||||||||||
0xC9 |
jsr_w |
跳轉至指定32位offset位置,而且jsr_w下一條指令地址進棧 |
||||||||||||||
|
||||||||||||||||
0xCA |
breakpoint |
|
||||||||||||||
|
||||||||||||||||
0xFE |
impdep1 |
|
||||||||||||||
0xFF |
impdep2 |
|
JVM指令集(指令碼、助記符、功能描述)
指令碼 |
助記符 |
功能描述 |
||||||||||||||
0x00 |
nop |
無操做 |
||||||||||||||
|
||||||||||||||||
0x01 |
aconst_null |
指令格式: aconst_null
功能描述: null進棧。
注意:JVM並無爲null指派一個具體的值。
|
||||||||||||||
|
||||||||||||||||
0x02 |
iconst_m1 |
int型常量值-1進棧 |
||||||||||||||
0x03 |
iconst_0 |
int型常量值0進棧 |
||||||||||||||
0x04 |
iconst_1 |
int型常量值1進棧 |
||||||||||||||
0x05 |
iconst_2 |
int型常量值2進棧 |
||||||||||||||
0x06 |
iconst_3 |
int型常量值3進棧 |
||||||||||||||
0x07 |
iconst_4 |
int型常量值4進棧 |
||||||||||||||
0x08 |
iconst_5 |
int型常量值5進棧 |
||||||||||||||
|
||||||||||||||||
0x09 |
lconst_0 |
long型常量值0進棧 |
||||||||||||||
0x0A |
lconst_1 |
long型常量值1進棧 |
||||||||||||||
|
||||||||||||||||
0x0B |
fconst_0 |
float型常量值0進棧 |
||||||||||||||
0x0C |
fconst_1 |
float型常量值1進棧 |
||||||||||||||
0x0D |
fconst_2 |
float型常量值2進棧 |
||||||||||||||
|
||||||||||||||||
0x0E |
dconst_0 |
double型常量值0進棧 |
||||||||||||||
0x0F |
dconst_1 |
double型常量值1進棧 |
||||||||||||||
|
||||||||||||||||
0x10 |
bipush |
將一個byte型常量值推送至棧頂 |
||||||||||||||
0x11 |
sipush |
將一個short型常量值推送至棧頂 |
||||||||||||||
|
||||||||||||||||
0x12 |
ldc |
將int、float或String型常量值從常量池中推送至棧頂 |
||||||||||||||
0x13 |
ldc_w |
將int、float或String型常量值從常量池中推送至棧頂(寬索引) |
||||||||||||||
0x14 |
ldc2_w |
將long或double型常量值從常量池中推送至棧頂(寬索引) |
||||||||||||||
|
||||||||||||||||
0x15 |
iload |
指定的int型局部變量進棧 |
||||||||||||||
0x16 |
lload |
指定的long型局部變量進棧 |
||||||||||||||
0x17 |
fload |
指定的float型局部變量進棧 |
||||||||||||||
0x18 |
dload |
指定的double型局部變量進棧 |
||||||||||||||
0x19 |
aload |
指令格式: aload index
功能描述: 當前frame的局部變量數組中下標爲 index的引用型局部變量進棧
index : 無符號一byte整型。和wide指令聯用, 能夠使index爲兩byte。
|
||||||||||||||
|
||||||||||||||||
0x1A |
iload_0 |
第一個int型局部變量進棧 |
||||||||||||||
0x1B |
iload_1 |
第二個int型局部變量進棧 |
||||||||||||||
0x1C |
iload_2 |
第三個int型局部變量進棧 |
||||||||||||||
0x1D |
iload_3 |
第四個int型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x1E |
lload_0 |
第一個long型局部變量進棧 |
||||||||||||||
0x1F |
lload_1 |
第二個long型局部變量進棧 |
||||||||||||||
0x20 |
lload_2 |
第三個long型局部變量進棧 |
||||||||||||||
0x21 |
lload_3 |
第四個long型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x22 |
fload_0 |
第一個float型局部變量進棧 |
||||||||||||||
0x23 |
fload_1 |
第二個float型局部變量進棧 |
||||||||||||||
0x24 |
fload_2 |
第三個float型局部變量進棧 |
||||||||||||||
0x25 |
fload_3 |
第四個float型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x26 |
dload_0 |
第一個double型局部變量進棧 |
||||||||||||||
0x27 |
dload_1 |
第二個double型局部變量進棧 |
||||||||||||||
0x28 |
dload_2 |
第三個double型局部變量進棧 |
||||||||||||||
0x29 |
dload_3 |
第四個double型局部變量進棧 |
||||||||||||||
|
||||||||||||||||
0x2A |
aload_0 |
指令格式:aload_0
該指令的行爲相似於aload指令index爲0的狀況。
|
||||||||||||||
0x2B |
aload_1 |
同上
|
||||||||||||||
0x2C |
aload_2 |
同上
|
||||||||||||||
0x2D |
aload_3 |
同上
|
||||||||||||||
|
||||||||||||||||
0x2E |
iaload |
指定的int型數組的指定下標處的值進棧 |
||||||||||||||
0x2F |
laload |
指定的long型數組的指定下標處的值進棧 |
||||||||||||||
0x30 |
faload |
指定的float型數組的指定下標處的值進棧 |
||||||||||||||
0x31 |
daload |
指定的double型數組的指定下標處的值進棧 |
||||||||||||||
0x32 |
aaload |
指令格式: aaload
功能描述: 棧頂的數組下標(index)、數組引用 (arrayref)出棧,並根據這兩個數值 取出對應的數組元素值(value)進棧。
拋出異常: 若是arrayref的值爲null,會拋出 NullPointerException。 若是index形成數組越界,會拋出 ArrayIndexOutOfBoundsException。
index : int類型 arrayref : 數組的引用
|
||||||||||||||
0x33 |
baload |
指定的boolean或byte型數組的指定下標處的值進棧 |
||||||||||||||
0x34 |
caload |
指定的char型數組的指定下標處的值進棧 |
||||||||||||||
0x35 |
saload |
指定的short型數組的指定下標處的值進棧 |
||||||||||||||
|
||||||||||||||||
0x36 |
istore |
將棧頂int型數值存入指定的局部變量 |
||||||||||||||
0x37 |
lstore |
將棧頂long型數值存入指定的局部變量 |
||||||||||||||
0x38 |
fstore |
將棧頂float型數值存入指定的局部變量 |
||||||||||||||
0x39 |
dstore |
將棧頂double型數值存入指定的局部變量 |
||||||||||||||
0x3A |
astore |
指令格式: astore index
功能描述: 將棧頂數值(objectref)存入當前 frame的局部變量數組中指定下標 (index)處的變量中,棧頂數值出棧。
index : 無符號一byte整數。該指令和wide聯 用,index能夠爲無符號兩byte整數。
|
||||||||||||||
|
||||||||||||||||
0x3B |
istore_0 |
將棧頂int型數值存入第一個局部變量 |
||||||||||||||
0x3C |
istore_1 |
將棧頂int型數值存入第二個局部變量 |
||||||||||||||
0x3D |
istore_2 |
將棧頂int型數值存入第三個局部變量 |
||||||||||||||
0x3E |
istore_3 |
將棧頂int型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x3F |
lstore_0 |
將棧頂long型數值存入第一個局部變量 |
||||||||||||||
0x40 |
lstore_1 |
將棧頂long型數值存入第二個局部變量 |
||||||||||||||
0x41 |
lstore_2 |
將棧頂long型數值存入第三個局部變量 |
||||||||||||||
0x42 |
lstore_3 |
將棧頂long型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x43 |
fstore_0 |
將棧頂float型數值存入第一個局部變量 |
||||||||||||||
0x44 |
fstore_1 |
將棧頂float型數值存入第二個局部變量 |
||||||||||||||
0x45 |
fstore_2 |
將棧頂float型數值存入第三個局部變量 |
||||||||||||||
0x46 |
fstore_3 |
將棧頂float型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x47 |
dstore_0 |
將棧頂double型數值存入第一個局部變量 |
||||||||||||||
0x48 |
dstore_1 |
將棧頂double型數值存入第二個局部變量 |
||||||||||||||
0x49 |
dstore_2 |
將棧頂double型數值存入第三個局部變量 |
||||||||||||||
0x4A |
dstore_3 |
將棧頂double型數值存入第四個局部變量 |
||||||||||||||
|
||||||||||||||||
0x4B |
astore_0 |
指令格式: astore_0
功能描述: 該指令的行爲相似於astore指令index 爲0的狀況。
|
||||||||||||||
0x4C |
astore_1 |
同上
|
||||||||||||||
0x4D |
astore_2 |
同上
|
||||||||||||||
0x4E |
astore_3 |
同上
|
||||||||||||||
|
||||||||||||||||
0x4F |
iastore |
將棧頂int型數值存入指定數組的指定下標處 |
||||||||||||||
0x50 |
lastore |
將棧頂long型數值存入指定數組的指定下標處 |
||||||||||||||
0x51 |
fastore |
將棧頂float型數值存入指定數組的指定下標處 |
||||||||||||||
0x52 |
dastore |
將棧頂double型數值存入指定數組的指定下標處 |
||||||||||||||
0x53 |
aastore |
指令格式: aastore
功能描述: 根據棧頂的引用型數值(value)、數組下 標(index)、數組引用(arrayref)出 棧,將數值存入對應的數組元素中。
拋出異常: 若是value的類型和arrayref所引用 的數組的元素類型不兼容,會拋出拋出 ArrayStoreException。 若是index形成數組越界,會拋出 ArrayIndexOutOfBoundsException。 若是arrayref值爲null,會拋出 NullPointerException。
arrayref : 必須是對數組的引用 index : int類型 value : 引用類型
|
||||||||||||||
0x54 |
bastore |
將棧頂boolean或byte型數值存入指定數組的指定下標處 |
||||||||||||||
0x55 |
castore |
將棧頂char型數值存入指定數組的指定下標處 |
||||||||||||||
0x56 |
sastore |
將棧頂short型數值存入指定數組的指定下標處 |
||||||||||||||
|
||||||||||||||||
0x57 |
pop |
棧頂數值出棧 (該棧頂數值不能是long或double型) |
||||||||||||||
0x58 |
pop2 |
棧頂的一個(若是是long、double型的)或兩個(其它類型的)數值出棧 |
||||||||||||||
|
||||||||||||||||
0x59 |
dup |
複製棧頂數值,而且複製值進棧 |
||||||||||||||
0x5A |
dup_x1 |
複製棧頂數值,而且複製值進棧2次 |
||||||||||||||
0x5B |
dup_x2 |
複製棧頂數值,而且複製值進棧2次或3次 |
||||||||||||||
0x5C |
dup2 |
複製棧頂一個(long、double型的)或兩個(其它類型的)數值,而且複製值進棧 |
||||||||||||||
0x5D |
dup2_x1 |
|
||||||||||||||
0x5E |
dup2_x2 |
|
||||||||||||||
|
||||||||||||||||
0x5F |
swap |
棧頂的兩個數值互換(要求棧頂的兩個數值不能是long或double型的) |
||||||||||||||
|
||||||||||||||||
0x60 |
iadd |
棧頂兩int型數值相加,而且結果進棧 |
||||||||||||||
0x61 |
ladd |
棧頂兩long型數值相加,而且結果進棧 |
||||||||||||||
0x62 |
fadd |
棧頂兩float型數值相加,而且結果進棧 |
||||||||||||||
0x63 |
dadd |
棧頂兩double型數值相加,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x64 |
isub |
棧頂兩int型數值相減,而且結果進棧 |
||||||||||||||
0x65 |
lsub |
棧頂兩long型數值相減,而且結果進棧 |
||||||||||||||
0x66 |
fsub |
棧頂兩float型數值相減,而且結果進棧 |
||||||||||||||
0x67 |
dsub |
棧頂兩double型數值相減,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x68 |
imul |
棧頂兩int型數值相乘,而且結果進棧 |
||||||||||||||
0x69 |
lmul |
棧頂兩long型數值相乘,而且結果進棧 |
||||||||||||||
0x6A |
fmul |
棧頂兩float型數值相乘,而且結果進棧 |
||||||||||||||
0x6B |
dmul |
棧頂兩double型數值相乘,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x6C |
idiv |
棧頂兩int型數值相除,而且結果進棧 |
||||||||||||||
0x6D |
ldiv |
棧頂兩long型數值相除,而且結果進棧 |
||||||||||||||
0x6E |
fdiv |
棧頂兩float型數值相除,而且結果進棧 |
||||||||||||||
0x6F |
ddiv |
棧頂兩double型數值相除,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x70 |
irem |
棧頂兩int型數值做取模運算,而且結果進棧 |
||||||||||||||
0x71 |
lrem |
棧頂兩long型數值做取模運算,而且結果進棧 |
||||||||||||||
0x72 |
frem |
棧頂兩float型數值做取模運算,而且結果進棧 |
||||||||||||||
0x73 |
drem |
棧頂兩double型數值做取模運算,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x74 |
ineg |
棧頂int型數值取負,而且結果進棧 |
||||||||||||||
0x75 |
lneg |
棧頂long型數值取負,而且結果進棧 |
||||||||||||||
0x76 |
fneg |
棧頂float型數值取負,而且結果進棧 |
||||||||||||||
0x77 |
dneg |
棧頂double型數值取負,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x78 |
ishl |
int型數值左移指定位數,而且結果進棧 |
||||||||||||||
0x79 |
lshl |
long型數值左移指定位數,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x7A |
ishr |
int型數值帶符號右移指定位數,而且結果進棧 |
||||||||||||||
0x7B |
lshr |
long型數值帶符號右移指定位數,而且結果進棧 |
||||||||||||||
0x7C |
iushr |
int型數值無符號右移指定位數,而且結果進棧 |
||||||||||||||
0x7D |
lushr |
long型數值無符號右移指定位數,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x7E |
iand |
棧頂兩int型數值按位與,而且結果進棧 |
||||||||||||||
0x7F |
land |
棧頂兩long型數值按位與,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x80 |
ior |
棧頂兩int型數值按位或,而且結果進棧 |
||||||||||||||
0x81 |
lor |
棧頂兩long型數值按位或,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x82 |
ixor |
棧頂兩int型數值按位異或,而且結果進棧 |
||||||||||||||
0x83 |
lxor |
棧頂兩long型數值按位異或,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x84 |
iinc |
指定int型變量增長指定值 |
||||||||||||||
|
||||||||||||||||
0x85 |
i2l |
棧頂int值強轉long值,而且結果進棧 |
||||||||||||||
0x86 |
i2f |
棧頂int值強轉float值,而且結果進棧 |
||||||||||||||
0x87 |
i2d |
棧頂int值強轉double值,而且結果進棧 |
||||||||||||||
0x88 |
l2i |
棧頂long值強轉int值,而且結果進棧 |
||||||||||||||
0x89 |
l2f |
棧頂long值強轉float值,而且結果進棧 |
||||||||||||||
0x8A |
l2d |
棧頂long值強轉double值,而且結果進棧 |
||||||||||||||
0x8B |
f2i |
棧頂float值強轉int值,而且結果進棧 |
||||||||||||||
0x8C |
f2l |
棧頂float值強轉long值,而且結果進棧 |
||||||||||||||
0x8D |
f2d |
棧頂float值強轉double值,而且結果進棧 |
||||||||||||||
0x8E |
d2i |
棧頂double值強轉int值,而且結果進棧 |
||||||||||||||
0x8F |
d2l |
棧頂double值強轉long值,而且結果進棧 |
||||||||||||||
0x90 |
d2f |
棧頂double值強轉float值,而且結果進棧 |
||||||||||||||
0x91 |
i2b |
棧頂int值強轉byte值,而且結果進棧 |
||||||||||||||
0x92 |
i2c |
棧頂int值強轉char值,而且結果進棧 |
||||||||||||||
0x93 |
i2s |
棧頂int值強轉short值,而且結果進棧 |
||||||||||||||
|
||||||||||||||||
0x94 |
lcmp |
比較棧頂兩long型數值大小,而且結果(1,0,-1)進棧 |
||||||||||||||
0x95 |
fcmpl |
比較棧頂兩float型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時, -1進棧 |
||||||||||||||
0x96 |
fcmpg |
比較棧頂兩float型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時,1進棧 |
||||||||||||||
0x97 |
dcmpl |
比較棧頂兩double型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時,-1進棧 |
||||||||||||||
0x98 |
dcmpg |
比較棧頂兩double型數值大小,而且結果(1,0,-1)進棧;當其中一個數值爲NaN時,1進棧 |
||||||||||||||
|
||||||||||||||||
0x99 |
ifeq |
當棧頂int型數值等於0時跳轉 |
||||||||||||||
0x9A |
ifne |
當棧頂int型數值不等於0時跳轉 |
||||||||||||||
0x9B |
iflt |
當棧頂int型數值小於0時跳轉 |
||||||||||||||
0x9C |
ifge |
當棧頂int型數值大於等於0時跳轉 |
||||||||||||||
0x9D |
ifgt |
當棧頂int型數值大於0時跳轉 |
||||||||||||||
0x9E |
ifle |
當棧頂int型數值小於等於0時跳轉 |
||||||||||||||
0x9F |
if_icmpeq |
比較棧頂兩int型數值大小,當結果等於0時跳轉 |
||||||||||||||
0xA0 |
if_icmpne |
比較棧頂兩int型數值大小,當結果不等於0時跳轉 |
||||||||||||||
0xA1 |
if_icmplt |
比較棧頂兩int型數值大小,當結果小於0時跳轉 |
||||||||||||||
0xA2 |
if_icmpge |
比較棧頂兩int型數值大小,當結果大於等於0時跳轉 |
||||||||||||||
0xA3 |
if_icmpgt |
比較棧頂兩int型數值大小,當結果大於0時跳轉 |
||||||||||||||
0xA4 |
if_icmple |
比較棧頂兩int型數值大小,當結果小於等於0時跳轉 |
||||||||||||||
0xA5 |
if_acmpeq |
比較棧頂兩引用型數值,當結果相等時跳轉 |
||||||||||||||
0xA6 |
if_acmpne |
比較棧頂兩引用型數值,當結果不相等時跳轉 |
||||||||||||||
|
||||||||||||||||
0xA7 |
goto |
無條件跳轉 |
||||||||||||||
|
||||||||||||||||
0xA8 |
jsr |
跳轉至指定16位offset位置,並將jsr下一條指令地址壓入棧頂 |
||||||||||||||
0xA9 |
ret |
返回至局部變量指定的index的指令位置(一般與jsr、jsr_w聯合使用) |
||||||||||||||
0xAA |
tableswitch |
用於switch條件跳轉,case值連續(可變長度指令) |
||||||||||||||
0xAB |
lookupswitch |
用於switch條件跳轉,case值不連續(可變長度指令) |
||||||||||||||
|
||||||||||||||||
0xAC |
ireturn |
當前方法返回int |
||||||||||||||
0xAD |
lreturn |
當前方法返回long |
||||||||||||||
0xAE |
freturn |
當前方法返回float |
||||||||||||||
0xAF |
dreturn |
當前方法返回double |
||||||||||||||
0xB0 |
areturn |
指令格式: areturn
功能描述: 從方法中返回一個對象的引用。
拋出異常: 若是當前方法是 而且當前線程不是改方法的鎖的擁有者, 會拋出 IllegalMonitorStateException。
objectref : 被返回的對象引用。
|
||||||||||||||
0xB1 |
return |
當前方法返回void |
||||||||||||||
|
||||||||||||||||
0xB2 |
getstatic |
獲取指定類的靜態域,並將其值壓入棧頂 |
||||||||||||||
0xB3 |
putstatic |
爲指定的類的靜態域賦值 |
||||||||||||||
0xB4 |
getfield |
獲取指定類的實例域,並將其值壓入棧頂 |
||||||||||||||
0xB5 |
putfield |
爲指定的類的實例域賦值 |
||||||||||||||
|
||||||||||||||||
0xB6 |
invokevirtual |
調用實例方法 |
||||||||||||||
0xB7 |
invokespecial |
調用超類構造方法、實例初始化方法、私有方法 |
||||||||||||||
0xB8 |
invokestatic |
調用靜態方法 |
||||||||||||||
0xb9 |
invokeinterface |
調用接口方法 |
||||||||||||||
|
||||||||||||||||
0xBA |
--- |
由於歷史緣由,該碼點爲未使用的保留碼點 |
||||||||||||||
|
||||||||||||||||
0xBB |
new |
建立一個對象,而且其引用進棧 |
||||||||||||||
0xBC |
newarray |
建立一個基本類型數組,而且其引用進棧 |
||||||||||||||
0xBD |
anewarray |
指令格式: anewarray index1 index2
功能描述: 棧頂數值(count)做爲數組長度,建立 一個引用 型數組。棧頂數值出棧,數組引 用進棧。
拋出異常: 若是count小於0,會拋出 NegativeArraySizeException
count : int類型。 arrayref : 對所建立的數組的引用。
|
||||||||||||||
0xBE |
arraylength |
指令格式: arraylength
功能描述: 棧頂的數組引用(arrayref)出棧,該 數組的長度進棧。
拋出異常: 若是arrayref的值爲null,會拋出 NullPointerException。
arrayref : 數組引用 length : 數組長度
|
||||||||||||||
|
||||||||||||||||
0xBF |
athrow |
指令格式: athrow
功能描述: 將棧頂的數值做爲異常或錯誤拋出
拋出異常: 若是棧頂數值爲null,則使用 NullPointerException代替棧頂數 值拋出。 若是方法是的,則有可能拋出 IllegalMonitorStateException。
objectref : Throwable或其子類的實例的引用。
|
||||||||||||||
0xC0 |
checkcast |
類型轉換檢查,若是該檢查未經過將會拋出ClassCastException異常 |
||||||||||||||
0xc1 |
instanceof |
檢查對象是不是指定的類的實例。若是是,1進棧;不然,0進棧 |
||||||||||||||
|
||||||||||||||||
0xC2 |
monitorenter |
得到對象鎖 |
||||||||||||||
0xC3 |
monitorexit |
釋放對象鎖 |
||||||||||||||
|
||||||||||||||||
0xC4 |
wide |
用於修改其餘指令的行爲 |
||||||||||||||
|
||||||||||||||||
0xC5 |
multianewarray |
建立指定類型和維度的多維數組(執行該指令時,棧中必須包含各維度的長度值),而且其引用值進棧 |
||||||||||||||
|
||||||||||||||||
0xC6 |
ifnull |
爲null時跳轉 |
||||||||||||||
0xC7 |
ifnonnull |
不爲null時跳轉 |
||||||||||||||
0xC8 |
goto_w |
無條件跳轉(寬索引) |
||||||||||||||
0xC9 |
jsr_w |
跳轉至指定32位offset位置,而且jsr_w下一條指令地址進棧 |
||||||||||||||
|
||||||||||||||||
0xCA |
breakpoint |
|
||||||||||||||
|
||||||||||||||||
0xFE |
impdep1 |
|
||||||||||||||
0xFF |
impdep2 |