指令 | 16进制码 | 英文描述 | 中文解释 |
---|---|---|---|
aaload | 32 | loads onto the stack a reference from an array | 将引用型数组指定索引的值推送至栈顶 |
aastore | 53 | stores into a referince to an array | 将栈顶引用型数值存入数组指定位置 |
aconst_null | 01 | pushes a null reference onto the stack | 将null 推送至栈顶 |
aload | 19 | loads a reference onto the stack from a local variable #index | 将指定的引用类型本地变量推送至栈顶 |
aload _0 | 2a | loads a reference onto the stack from local variable 0 | 将第一个引用类型本地变量推送至栈顶 |
aload_1 | 2b | loads a reference onto the stack from local variable 1 | 将二个引用类型本地变量推送至栈顶 |
aload_2 | 2c | loads a reference onto the stack from local variable 2 | 将第三个引用类型本地变量推送至栈顶 |
aload_3 | 2d | loads a reference onto the stack from local variable 3 | 将第个引用类型本地变量推送至栈顶 |
anewarray | bd | creates a new array of references of length count and component type identified by the class reference index (indexbyte1 <<8 + indexbyte2) in the comstant pool | 创建一个引用型(如类,接口,数组)的数组,并将其引用值压入栈顶 |
areturn | b0 | return a reference from a method | 从当前方法返回对象引用 |
arraylength | be | gets the length of an array | 获得数组的长度值并压入栈顶 |
astore | 3a | stores a reference into a local variable | 将栈顶引用型数值存入指定本地变量 |
astore_0 | 4b | stores a reference into a local variable 0 | 将栈顶引用型数值存入第一个本地变量 |
astore_1 | 4c | stores a reference into a local variable 1 | 将栈顶引用型数值存入第二个本地变量 |
astore_2 | 4d | stores a reference into a local variable 2 | 将栈顶引用型数值存入第三个本地变量 |
astore_3 | 4e | stores a reference into a local variable 3 | 将栈顶引用型数值存入第四个本地变量 |
athrow | bf | thows an error or exception | 将栈顶的异常抛出 |
baload | 33 | loads a byte or Boolean value from an array | 将long型数组指定索引的值推送至栈顶 |
bastore | 54 | stores a byte onnto the stack as an integer value | 将栈顶boolean或byte型数值存入指定数组的指定索引位置 |
bipush | 10 | stores a byte or Boolean value from an array | 将单字节的常量值(-128~127)推送至栈顶 |
caload | 34 | loads a char from an array | 将char型数组指定索引的值推送至栈顶 |
castore | 55 | stores a char into an array | 将栈顶char型数值存入指定数组的指定索引位置 |
checkcaset | c0 | checks whether an objectref is or a certain type ,the class reference of which is in the constant pool at index (indexbyte1 << 8+ indexbyte2) | 检验类型转换,检验未通过将抛出ClassCastException |
d2f | 90 | converts a double to a float | 将栈顶double型数值强制转换成float型数值并将结果压入栈顶 |
d2i | 8e | converts a double to an int | 将栈顶double型数值强制转换成int型数值并将结果压入栈顶 |
d2l | 8f | converts a double to a long | 将栈顶double型数值强制转换成long型数值并将结果压入栈顶 |
dadd | 63 | adds two doubles | 将栈顶两double型数值相加并将结果压入栈顶 |
daload | 31 | loads a double from an array | 将double型数组指定索引的值推送至栈顶 |
dastore | 52 | stores a double into an array | 将栈顶double型数值存入指定数组的指定索引位置 |
dcmpg | 98 | compares two doubles | 比较栈顶两double型数值大小,并将结果(1,0,-1)压入栈顶;当其中一个数值为NaN时,将1压入栈顶 |
dcmpl | 97 | compares two doubles | 比较栈顶两do ube型数值大小,并将结果(1,0,-1)压入栈顶;当其中一个数值为NaN时,将-1压入栈顶 |
dconst_0 | 0e | pushes the constant 0.0 onto the stack | 将double型0推送至栈顶 |
dconst_1 | 0f | pushes the consant 1.0 onto the stack | 将double型1推送至栈顶 |
ddiv | 6f | divides two doubles | 将栈顶两double型数值相除并将结果压入栈顶 |
dload | 18 | loads a double value from a local variable #index | 将指定的double型本地变量复制到栈顶 |
dload_0 | 26 | loads a double value from a local variable 0 | 将第一个doule型本地变量推送至栈顶 |
dload_1 | 27 | loads a double value from a local variable 1 | 将第二个doule型本地变量推送至栈顶 |
dload_2 | 28 | loads a double value from a local variable 2 | 将第三个doule型本地变量推送至栈顶 |
dload_3 | 29 | loads a double value from a local variable 3 | 将第四个doule型本地变量推送至栈顶 |
dmul | 6b | multiplies two doubles | 将栈顶两double型数值相乘并将结果压入栈顶 |
dneg | 77 | negates a double | 将栈顶doblle型数值取负并将结果压入栈顶 |
drem | 73 | gets the remainder from a division between two doubles | 将栈顶两double型数值作取模运算并将结果压入栈顶 |
dreturn | af | returns a double from method | 从当前方法返回double |
dstore | 39 | stores a double value into a local variable #index | 将栈顶double型数值存入指定本地变量 |
dstore_0 | 47 | stores a double value into a local variable 0 | 将栈顶double型数值存入第一个本地变量 |
dstore_1 | 48 | stores a double value into a local variable 1 | 将栈顶double型数值存入第二个本地变量 |
dstore_2 | 49 | stores a double value into a local variable 2 | 将栈顶double型数值存入第三个本地变量 |
dstore_3 | 4a | stores a double value into a local variable 3 | 将栈顶double型数值存入第四个本地变量 |
dsub | 67 | subtracts a double from another | 将栈顶两double型数值相减并将结果压入栈顶 |
dup | 59 | duplicates the value on top of the stack | 复制栈顶数值(数值不能是long或double类型的)并将复制值压入栈顶 |
dup_x1 | 5a | inserts a copyof the top value into the stack two values from the top | 复制栈顶数值(数值不能是long或double类型的)并将两个复制值压入栈顶 |
dup_x2 | 5b | inserts a copyof the top value into the stack two (if value2 is double or long it takes up the entry of value3,too) or three values(if value2 is neither double nor long) from the top | 复制栈顶数值(数值不能是long或double类型的)并将三个(或两个)复制值压入栈顶 |
dup2 | 5c | duplicate top two stack words(two values,if value1 is not double nor long;a single value,if value1 is double or long) | 复制栈顶一个(long或double类型的)或两个(其它)数值并将复制值压入栈顶 |
dup2_x1 | 5d | duplicate two words and insert beneath third word(see explanation ablove) | 复制栈顶数值(long或double类型的)并将两个复制值压入栈顶 |
dup2_x2 | 5e | duplicate two words and insert beneath fourth word | 复制栈顶数值(long或double类型的)并将三个(或两个)复制值压入栈顶 |
f2d | 8d | converts a float to a double | 将栈顶float型数值强制转换成do le型数值并将结果压入栈顶 |
f2i | 8b | converts a float to an int | 将栈顶float型数值强制转换成int型数值并将结果压入栈顶 |
f2l | 8c | converts a float to a long | 将栈顶float型数值强制转换成long型数值并将结果压入栈顶 |
fadd | 62 | adds two floats | 将栈顶两float型数值相加并将结果压入栈顶 |
faload | 30 | loads a float from an array | 将float型数组指定索引的值推送至栈顶 |
fastore | 51 | stores a float in an array | 将栈顶float型数值存入指定数组的指定索引位置 |
fcmpg | 96 | compares two floats | 比较栈顶两float型数值大小,并将结果(1,0,-1)压入栈顶;当其中一个数值为NaN时,将1压入栈顶 |
fcmpl | 95 | compares two floats | 比较栈顶两float型数值大小,并将结果(1,0,-1)压入栈顶;当其中一个数值为NaN时,将-1压入栈顶 |
fconst_0 | 0b | pushes 0,0f on the stack | 将float型0推送至栈顶 |
fconst_1 | 0b | pushes 1,0f on the stack | 将float型1推送至栈顶 |
fconst_2 | 0b | pushes 2,0f on the stack | 将float型2推送至栈顶 |
fdiv | 6e | divides two floats | 将栈顶两float型数值相除并将结果压入栈顶 |
fload | 17 | loads a float value from a local variable #index | 将指定的float型本地变量复制到栈顶 |
fload_0 | 22 | loads a float value from a local variable 0 | 将第一个float型本地变量推送至栈顶 |
fload_1 | 23 | loads a float value from a local variable 1 | 将第二个float型本地变量推送至栈顶 |
fload_2 | 24 | loads a float value from a local variable 2 | 将第三个float型本地变量推送至栈顶 |
fload_3 | 25 | loads a float value from a local variable 3 | 将第四个float型本地变量推送至栈顶 |
fmul | 6a | muitiplies two floats | 将栈顶两float型数值相乘并将结果压入栈顶 |
fneg | 76 | negates a float | 将栈顶float型数值取负并将结果压入栈顶 |
frem | 72 | gets the remainder from a division between two floats | 将栈顶两float型数值作取模运算并将结果压入栈顶 |
freturn | ae | returns a float | 从当前方法返回float |
fstore | 38 | stores a float value into a local variable #index | 将栈顶float型数值存入指定本地变量 |
fstore_0 | 43 | stores a float value into a local variable 0 | 将栈顶float型数值存入第一个本地变量 |
fstore_1 | 44 | stores a float value into a local variable 1 | 将栈顶float型数值存入第二个本地变量 |
fstore_2 | 45 | stores a float value into a local variable 2 | 将栈顶float型数值存入第三个本地变量 |
fstore_3 | 46 | stores a float value into a local variable 3 | 将栈顶float型数值存入第四个本地变量 |
fsub | 66 | subtracts two flats | 将栈顶两float型数值相减并将结果压入栈顶 |
getfield | b4 | gets a field valude of an object objectref ,where ther field is identified by field rreference in the constant pool index(index1<<8+index2) | 获取指定类的实例域,并将其值压入栈顶 |
getstatic | b2 | gets a static field valude of an object objectref ,where ther field is identified by field rreference in the constant pool index(index1<<8+index2) | 获取指定类的静态域,并将其值压入栈顶 |
goto | a7 | goes to another instruction at branchoffset(signed short constructed from unsigned bytes brancbyte1<<8+branchbyte2) | 无条件跳转 |
goto_w | c8 | goes to another instruction at branchoffset(signed int constructed from unsigned bytes brancbyte1<<24+branchbyte2 << 16+branchbyte3<<8+branchbyte4) | 无条件跳转(宽索引) |
i2b | 91 | converts an int into a byte | 将栈顶int型数值强制转换成byte型数值并将结果压入栈顶 |
i2c | 92 | converts an int into a character | 将栈顶int型数值强制转换成char型数值并将结果压入栈顶 |
i2d | 87 | converts an int into a double | 将栈顶int型数值强制转换成do le型数值并将结果压入栈顶 |
i2f | 86 | convers an int into a float | 将栈顶int型数值强制转换成float型数值并将结果压入栈顶 |
i2l | 85 | converts an int into a long | 将栈顶int型数值强制转换成long型数值并将结果压入栈顶 |
i2s | 93 | converts an int into a short | 将栈顶int型数值强制转换成short型数值并将结果压入栈顶 |
iadd | 60 | adds two ints together | 将栈顶两int型数值相加并将结果压入栈顶 |
iaload | 2e | loads an int from an array | 将int型数组指定索引的值推送至栈顶 |
iand | 7e | performs a bitwisse and on two integers | 将栈顶两int型数值作“按位与”并将结果压入栈顶 |
iastore | 4f | stores an int into an array | 将栈顶int型数值存入指定数组的指定索引位置 |
iconst_m1 | 02 | loads the int value -1 onto the stack | 将int型-1推送至栈顶 |
iconst_0 | 03 | loads the int value 0 onto the stack | 将int型0推送至栈顶 |
iconst_1 | 04 | loads the int value 1 onto the stack | 将int型1推送至栈顶 |
iconst_2 | 05 | loads the int value 2 onto the stack | 将int型2推送至栈顶 |
iconst_3 | 06 | loads the int value 3 onto the stack | 将int型3推送至栈顶 |
iconst_4 | 07 | loads the int value 4 onto the stack | 将int型4推送至栈顶 |
iconst_5 | 08 | loads the int value 5 onto the stack | 将int型5推送至栈顶 |
idiv | 6c | invides two integers | 将栈顶两int型数值相除并将结果压入栈顶 |
if_acmpeq | a5 | if references are equal,branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两引用型数值,当结果相等时跳转 |
if_acmpne | a6 | if references are not equal,branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两引用型数值,当结果不相等时跳转 |
if_icmpeq | 9f | if ints are equal,branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两int型数值大小,当结果等于0时跳转 |
if_icmpne | a0 | if ints are not equal,branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两int型数值大小,当结果不等于0时跳转 |
if_icmplt | a1 | if value1 is less than value2, branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两int型数值大小,当结果小于0时跳转 |
if_icmpge | a2 | if value1 is gather than or equal to value2, branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两int型数值大小,当结果大于等于0时跳转 |
if_icmpgt | a3 | if value1 is gather than value2 ,branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两int型数值大小,当结果大于0时跳转 |
if_icmple | a4 | if value1 is less than or equal to value2, branch to instruction at branchoffset(signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 比较栈顶两int型数值大小,当结果小于等于0时跳转 |
ifeq | 99 | if vlaue is 0 ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 当栈顶int型数值等于0时跳转 |
ifnq | 9a | if vlaue is not 0 ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 当栈顶int型数值不等于0时跳转 |
iflt | 9b | if vlaue is less than 0 ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 当栈顶int型数值小于0时跳转 |
ifge | 9c | if vlaue is gather than or equal to 0 ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 当栈顶int型数值大于等于0时跳转 |
ifgt | 9d | if vlaue is gather than 0 ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 当栈顶int型数值大于0时跳转 |
ifle | 9e | if vlaue is less than or equal to 0 ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 当栈顶int型数值小于等于0时跳转 |
ifnonnull | c7 | if vlaue is not null ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 不为null时跳转 |
ifnull | c6 | if vlaue is null ,branch to instruction at branchoffset (signed short constructed from unsigned bytes branchbyte1<<8+branchbyte2) | 为null时跳转 |
iinc | 84 | increment local variable #index bysigned byte const | 将指定int型变量增加指定值(i++, i–, i+=2) |
iload | 15 | loads an int value from a local varivale #index | 将指定的int型本地变量复制到栈顶 |
iload_0 | 1a | loads an int value from a local varivale 0 | 将第一个int型本地变量推送至栈顶 |
iload_1 | 1b | loads an int value from a local varivale 1 | 将第二个int型本地变量推送至栈顶 |
iload_2 | 1c | loads an int value from a local varivale 2 | 将第三个int型本地变量推送至栈顶 |
iload_3 | 1d | loads an int value from a local varivale 3 | 将第四个int型本地变量推送至栈顶 |
imul | 68 | nultiply two integers | 将栈顶两int型数值相乘并将结果压入栈顶 |
ineg | 74 | negate int | 将栈顶int型数值取负并将结果压入栈顶 |
instanceof | c1 | determines if an object objectref is of a given type,identified by class refeence index in constant pool(indexbyte1<<8+indexbyte2) | 检验对象是否是指定的类的实例,如果是将1压入栈顶,否则将0压入栈顶 |
invokeinterface | b9 | invokes an interface method on object objectref, where the interface method is identified by method refenence index in constant pool(indexbyte1<<8+indexbyte2) | 调用接口方法 |
invokespecial | b7 | invokes instance method on object objectref, where the interface method is identified by method refenence index in constant pool(indexbyte1<<8+indexbyte2) | 调用超类构造方法,实例初始化方法,私有方法 |
invokestatic | b8 | invokes a static method, where the method is identified by method refenence index in constant pool(indexbyte1<<8+indexbyte2) | 调用静态方法 |
invokevirtual | b6 | invokes virtual method on object objectref, where the interface method is identified by method refenence index in constant pool(indexbyte1<<8+indexbyte2) | 调用实例方法 |
ior | 80 | bitwise int or | 将栈顶两int型数值作“按位或”并将结果压入栈顶 |
irem | 70 | logical int remainder | 将栈顶两int型数值作取模运算并将结果压入栈顶 |
ireturn | ac | returns an integer from a method | 当前方法返回int |
ishl | 78 | int shift left | 将int型数值左移位指定位数并将结果压入栈顶 |
ishr | 7a | int arithmetic shift right | 将int型数值右(符号)移位指定位数并将结果压入栈顶 |
istore | 36 | store int value into vairable #index | 将栈顶int型数值存入指定本地变量 |
istore_0 | 3b | store int value into vairable 0 | 将栈顶int型数值存入第一个本地变量 |
istore_1 | 3b | store int value into vairable 1 | 将栈顶int型数值存入第二个本地变量 |
istore_2 | 3b | store int value into vairable 2 | 将栈顶int型数值存入第三个本地变量 |
istore_3 | 3b | store int value into vairable 3 | 将栈顶int型数值存入第四个本地变量 |
isub | 64 | int subtract | 将栈顶两int型数值相减并将结果压入栈顶 |
iushr | 7c | int logical shift right | 将int型数值右(无符号)移位指定位数并将结果压入栈顶 |
ixor | 82 | int xor | 将栈顶两int型数值作“按位异或”并将结果压入栈顶 |
jsr | a8 | iump to subroutine at branchoffset(signed short constructed from unsigned bytes brancbyte1<<8+branchbyte2) and place the return adress ont stack | 跳转至指定16位offset位置,并将jsr下一条指令地址压入栈顶 |
jsr_w | c9 | iump to subroutine at branchoffset(signed intconstructed from unsigned bytes brancbyte1<<24+branchbyte2<<16++branchbyte3<<8++branchbyte4) and place the return adress ont stack | 跳转至指定32位offset位置,并将jsr_w下一条指令地址压入栈顶 |
l2d | 8a | converts a long to a double | 将栈顶long型数值强制转换成do le型数值并将结果压入栈顶 |
l2f | 89 | converts a long to a float | 将栈顶long型数值强制转换成float型数值并将结果压入栈顶 |
l2i | 88 | converts a long to a int | 将栈顶long型数值强制转换成int型数值并将结果压入栈顶 |
ladd | 61 | add two longs | 将栈顶两long型数值相加并将结果压入栈顶 |
laload | 2f | load a long from an array | 将long型数组指定索引的值推送至栈顶 |
land | 7f | bitwise and of two longs | 将栈顶两long型数值作“按位与”并将结果压入栈顶 |
lastore | 50 | store a long to an array | 将栈顶long型数值存入指定数组的指定索引位置 |
lcmp | 94 | compares two longs values | 比较栈顶两long型数值大小,并将结果(1,0,-1)压入栈顶 |
lconst_0 | 09 | pushes the long 0 onto the stack | 将long型0推送至栈顶 |
lconst_1 | 0a | pushes the long 1 onto the stack | 将long型1推送至栈顶 |
ldc | 12 | pushes a constant #index from a constant pool(String,int or float) onto the stack | 将int, float或String型常量值从常量池中推送至栈顶 |
ldc_w | 12 | pushes a constant #index from a constant pool(String,int or float) onto the stack (wide index is constructed as indexbyte1<<8+indexbyte2) | 将int, float或String型常量值从常量池中推送至栈顶(宽索引) |
ldc2_w | 12 | pushes a constant #index from a constant pool(double or long) onto the stack (side index is constructed as indexbyte1<<8+indexbyte2) | 将long或double型常量值从常量池中推送至栈顶(宽索引) |
ldiv | 6d | divide two longs | 将栈顶两long型数值相除并将结果压入栈顶 |
lload | 16 | load a long value from a local variable #index | 将指定的long型本地变量复制到栈顶 |
lload_0 | 1e | load a long value from a local variable 0 | 将第一个long型本地变量推送至栈顶 |
lload_1 | 1f | load a long value from a local variable 1 | 将第二个long型本地变量推送至栈顶 |
lload_2 | 20 | load a long value from a local variable 2 | 将第三个long型本地变量推送至栈顶 |
lload_3 | 21 | load a long value from a local variable 3 | 将第四个long型本地变量推送至栈顶 |
lmul | 69 | multiplies two longs | 将栈顶两long型数值相乘并将结果压入栈顶 |
lneg | 75 | negates a long | 将栈顶long型数值取负并将结果压入栈顶 |
lookupswitch | ab | a target address is looked up from a table using a key and execution continues from the instruction at that address | 用于switch条件跳转,case值不连续(可变长度指令) |
lor | 81 | bitwise or of two longs | 将栈顶两long型数值作“按位或”并将结果压入栈顶 |
lrem | 71 | remainder of division of two longs | 将栈顶两long型数值作取模运算并将结果压入栈顶 |
lreturn | ad | returns along value | 从当前方法返回long |
lshl | 79 | bitwise shift left of a long value1 by value2 positions | 将long型数值左移位指定位数并将结果压入栈顶 |
lshr | 7b | bitwise shift right of a long value1 by value2 positions | 将long型数值右(符号)移位指定位数并将结果压入栈顶 |
lstore | 37 | store a long value in a local variable #index | 将栈顶long型数值存入指定本地变量 |
lstore_0 | 3f | store a long value in a local variable 0 | 将栈顶long型数值存入第一个本地变量 |
lstore_1 | 40 | store a long value in a local variable 1 | 将栈顶long型数值存入第二个本地变量 |
lstore_2 | 41 | store a long value in a local variable 2 | 将栈顶long型数值存入第三个本地变量 |
lstore_3 | 42 | store a long value in a local variable 3 | 将栈顶long型数值存入第四个本地变量 |
lsub | 65 | subtract two longs | 将栈顶两long型数值相减并将结果压入栈顶 |
lushr | 7d | bitwise shift right of a long value1 by value2 positions, unsigned | 将long型数值右(无符号)移位指定位数并将结果压入栈顶 |
lxor | 83 | bitwise exclusive or of two longs | 将栈顶两long型数值作“按位异或”并将结果压入栈顶 |
monitorenter | c2 | enter monitor for object(“grab the lock” -start of synchronized() selection) | 获得对象的锁,用于同步方法或同步块 |
monitorexit | c3 | exit monitor for object(“grab the lock” -start of synchronized() selection) | 释放对象的锁,用于同步方法或同步块 |
multianewarray | c5 | create a new array of dimensions dimensions with elements of type identified by class reference in constant pool index(indexbyte1<<8+indexbyte2);the sizes of each dimension is identified by count1,[coount2,etc] | 创建指定类型和指定维度的多维数组(执行该指令时,操作栈中必须包含各维度的长度值),并将其引用值压入栈顶 |
new | bb | creates new object of type identified by class reference in constant pool ndex(indexbyte1<<8+indexbyte2) | 创建一个对象,并将其引用值压入栈顶 |
newarray | bc | creates new array with count elements of primitive type identified by atype | 创建一个指定原始类型(如int, float, char…)的数组,并将其引用值压入栈顶 |
nop | 00 | performs no operation | 什么都不做 |
pop | 57 | discards the top value on the stack | 将栈顶数值弹出 (数值不能是long或do le类型的) |
pop2 | 58 | discards the top two values on the stack(or one value,if it is a double or long) | 将栈顶的一个(long或do le类型的)或两个数值弹出(其它) |
putfield | b5 | set field to value in an object objectref,where the field is identified by a field reference index in constant pool ndex(indexbyte1<<8+indexbyte2) | 为指定的类的实例域赋值 |
putstatic | b3 | set static field to value in an object objectref,where the field is identified by a field reference index in constant pool ndex(indexbyte1<<8+indexbyte2) | 为指定的类的静态域赋值 |
ret | a9 | continue execution from adress taken from a local variable #index(the asymmetry with jsr is intentional) | 返回至本地变量 |
return | b1 | return void from method | 从当前方法返回void |
saload | 35 | load short from array | 将short型数组指定索引的值推送至栈顶 |
sastore | 56 | shore short to array | 将栈顶short型数值存入指定数组的指定索引位置 |
sipush | 11 | pushes a signed integer(byte1 << 8+byte2) onto the stack | 将一个短整型常量值(-32768~32767)推送至栈顶 |
swap | 5f | swaps two top words on the stack(note that value1 and valude2 mush not be double or lomg) | 将栈最顶端的两个数值互换(数值不能是long或do le类型的) |
tableswitch | aa | continue execution from an address in the table at offset index | 用于switch条件跳转,case值连续(可变长度指令) |
wide | c4 | execute opcode,where opcode is either iload, fload, aload, lload, dload,istore, fstore, astore,lstore, dstore, or ret, but assume the index is 16 bit ; or execute iincc,where the index is 16 bits and the coonstant to increment by is a signed 16 bit short | 扩充局部变量表的访问索引 |
breakpoint | ca | reserved for breakpoints in Java debuggers;should not appear in my class file | |
impdep1 | fe | reserved for implementation-dependent operations within debuggers;shoud not appear inanyalass file | |
imdep2 | ff | reserved for implementation-dependent operations within debuggers;shoud not appear inanyalass file |
总结以下有助于记忆的类型:
变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_
操作数栈到变量:istore,istore_,lstore,lstore_,fstore,fstore_,dstore,dstor_,astore,astore_
常数到操作数栈:bipush,sipush,ldc,ldc_w,ldc2_w,aconst_null,iconst_ml,iconst_,lconst_,fconst_,dconst_
加:iadd,ladd,fadd,dadd
减:is ,ls ,fs ,ds
乘:imul,lmul,fmul,dmul
除:idiv,ldiv,fdiv,ddiv
余数:irem,lrem,frem,drem
取负:ineg,lneg,fneg,dneg
移位:ishl,lshr,iushr,lshl,lshr,lushr
按位或:ior,lor
按位与:iand,land
按位异或:ixor,lxor
类型转换:i2l,i2f,i2d,l2f,l2d,f2d(放宽数值转换)
i2b,i2c,i2s,l2i,f2i,f2l,d2i,d2l,d2f(缩窄数值转换)
创建类实便:new
创建新数组:newarray,anewarray,multianwarray
访问类的域和类实例域:getfield,putfield,getstatic,putstatic
把数据装载到操作数栈:baload,caload,saload,iaload,laload,faload,daload,aaload
从操作数栈存存储到数组:bastore,castore,sastore,iastore,lastore,fastore,dastore,aastore
获取数组长度:arraylength
检相类实例或数组属性:instanceof,checkcast
操作数栈管理:pop,pop2,dup,dup2,dup_xl,dup2_xl,dup_x2,dup2_x2,swap
有条件转移:ifeq,iflt,ifle,ifne,ifgt,ifge,ifnull,ifnonnull,if_icmpeq,if_icmpene,
if_icmplt,if_icmpgt,if_icmple,if_icmpge,if_acmpeq,if_acmpne,lcmp,fcmpl
fcmpg,dcmpl,dcmpg
复合条件转移:tableswitch,lookupswitch
无条件转移:goto,goto_w,jsr,jsr_w,ret
调度对象的实便方法:invokevirt l
调用由接口实现的方法:invokeinterface
调用需要特殊处理的实例方法:invokespecial
调用命名类中的静态方法:invokestatic
方法返回:ireturn,lreturn,freturn,dreturn,areturn,return
异常:athrow
finally关键字的实现使用:jsr,jsr_w,ret