日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java bytecode instruction listings

發(fā)布時間:2023/12/3 java 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java bytecode instruction listings 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

【0】README

0.1)these contents are shiped from ?https://en.wikipedia.org/wiki/Java_bytecode_instruction_listings


Mnemonic Opcode
(in hexadecimal) Opcode (in binary) Other bytes Stack
[before]→[after] Description
(no name)cb-fd???these values are currently unassigned for opcodes and are reserved for future use
aaload320011 0010?arrayref, index → valueload onto the stack a reference from an array
aastore530101 0011?arrayref, index, value →store into a reference in an array
aconst_null010000 0001?→ nullpush a?null?reference onto the stack
aload190001 10011: index→ objectrefload a reference onto the stack from a local variable?#index
aload_02a0010 1010?→ objectrefload a reference onto the stack from local variable 0
aload_12b0010 1011?→ objectrefload a reference onto the stack from local variable 1
aload_22c0010 1100?→ objectrefload a reference onto the stack from local variable 2
aload_32d0010 1101?→ objectrefload a reference onto the stack from local variable 3
anewarraybd1011 11012: indexbyte1, indexbyte2count → arrayrefcreate a new array of references of length?count?and component type identified by the class reference?index?(indexbyte1 << 8 + indexbyte2) in the constant pool
areturnb01011 0000?objectref → [empty]return a reference from a method
arraylengthbe1011 1110?arrayref → lengthget the length of an array
astore3a0011 10101: indexobjectref →store a reference into a local variable?#index
astore_04b0100 1011?objectref →store a reference into local variable 0
astore_14c0100 1100?objectref →store a reference into local variable 1
astore_24d0100 1101?objectref →store a reference into local variable 2
astore_34e0100 1110?objectref →store a reference into local variable 3
athrowbf1011 1111?objectref → [empty], objectrefthrows an error or exception (notice that the rest of the stack is cleared, leaving only a reference to the Throwable)
baload330011 0011?arrayref, index → valueload a byte or Boolean value from an array
bastore540101 0100?arrayref, index, value →store a byte or Boolean value into an array
bipush100001 00001: byte→ valuepush a?byte?onto the stack as an integer?value
breakpointca1100 1010??reserved for breakpoints in Java debuggers; should not appear in any class file
caload340011 0100?arrayref, index → valueload a char from an array
castore550101 0101?arrayref, index, value →store a char into an array
checkcastc01100 00002: indexbyte1, indexbyte2objectref → objectrefchecks whether an?objectref?is of a certain type, the class reference of which is in the constant pool at?index?(indexbyte1 << 8 + indexbyte2)
d2f901001 0000?value → resultconvert a double to a float
d2i8e1000 1110?value → resultconvert a double to an int
d2l8f1000 1111?value → resultconvert a double to a long
dadd630110 0011?value1, value2 → resultadd two doubles
daload310011 0001?arrayref, index → valueload a double from an array
dastore520101 0010?arrayref, index, value →store a double into an array
dcmpg981001 1000?value1, value2 → resultcompare two doubles
dcmpl971001 0111?value1, value2 → resultcompare two doubles
dconst_00e0000 1110?→ 0.0push the constant?0.0?onto the stack
dconst_10f0000 1111?→ 1.0push the constant?1.0?onto the stack
ddiv6f0110 1111?value1, value2 → resultdivide two doubles
dload180001 10001: index→ valueload a double?value?from a local variable?#index
dload_0260010 0110?→ valueload a double from local variable 0
dload_1270010 0111?→ valueload a double from local variable 1
dload_2280010 1000?→ valueload a double from local variable 2
dload_3290010 1001?→ valueload a double from local variable 3
dmul6b0110 1011?value1, value2 → resultmultiply two doubles
dneg770111 0111?value → resultnegate a double
drem730111 0011?value1, value2 → resultget the remainder from a division between two doubles
dreturnaf1010 1111?value → [empty]return a double from a method
dstore390011 10011: indexvalue →store a double?value?into a local variable?#index
dstore_0470100 0111?value →store a double into local variable 0
dstore_1480100 1000?value →store a double into local variable 1
dstore_2490100 1001?value →store a double into local variable 2
dstore_34a0100 1010?value →store a double into local variable 3
dsub670110 0111?value1, value2 → resultsubtract a double from another
dup590101 1001?value → value, valueduplicate the value on top of the stack
dup25c0101 1100?{value2, value1} → {value2, value1}, {value2, value1}duplicate top two stack words (two values, if value1 is not double nor long; a single value, if value1 is double or long)
dup2_x15d0101 1101?value3, {value2, value1} → {value2, value1}, value3, {value2, value1}duplicate two words and insert beneath third word (see explanation above)
dup2_x25e0101 1110?{value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1}duplicate two words and insert beneath fourth word
dup_x15a0101 1010?value2, value1 → value1, value2, value1insert a copy of the top value into the stack two values from the top. value1 and value2 must not be of the type double or long.
dup_x25b0101 1011?value3, value2, value1 → value1, value3, value2, value1insert a copy of 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
f2d8d1000 1101?value → resultconvert a float to a double
f2i8b1000 1011?value → resultconvert a float to an int
f2l8c1000 1100?value → resultconvert a float to a long
fadd620110 0010?value1, value2 → resultadd two floats
faload300011 0000?arrayref, index → valueload a float from an array
fastore510101 0001?arrayref, index, value →store a float in an array
fcmpg961001 0110?value1, value2 → resultcompare two floats
fcmpl951001 0101?value1, value2 → resultcompare two floats
fconst_00b0000 1011?→ 0.0fpush?0.0f?on the stack
fconst_10c0000 1100?→ 1.0fpush?1.0f?on the stack
fconst_20d0000 1101?→ 2.0fpush?2.0f?on the stack
fdiv6e0110 1110?value1, value2 → resultdivide two floats
fload170001 01111: index→ valueload a float?value?from a local variable?#index
fload_0220010 0010?→ valueload a float?value?from local variable 0
fload_1230010 0011?→ valueload a float?value?from local variable 1
fload_2240010 0100?→ valueload a float?value?from local variable 2
fload_3250010 0101?→ valueload a float?value?from local variable 3
fmul6a0110 1010?value1, value2 → resultmultiply two floats
fneg760111 0110?value → resultnegate a float
frem720111 0010?value1, value2 → resultget the remainder from a division between two floats
freturnae1010 1110?value → [empty]return a float
fstore380011 10001: indexvalue →store a float?value?into a local variable?#index
fstore_0430100 0011?value →store a float?value?into local variable 0
fstore_1440100 0100?value →store a float?value?into local variable 1
fstore_2450100 0101?value →store a float?value?into local variable 2
fstore_3460100 0110?value →store a float?value?into local variable 3
fsub660110 0110?value1, value2 → resultsubtract two floats
getfieldb41011 01002: index1, index2objectref → valueget a field?value?of an object?objectref, where the field is identified by field reference in the constant pool?index?(index1 << 8 + index2)
getstaticb21011 00102: index1, index2→ valueget a static field?value?of a class, where the field is identified by field reference in the constant pool?index?(index1 << 8 + index2)
gotoa71010 01112: branchbyte1, branchbyte2[no change]goes to another instruction at?branchoffset?(signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
goto_wc81100 10004: branchbyte1, branchbyte2, branchbyte3, branchbyte4[no change]goes to another instruction at?branchoffset?(signed int constructed from unsigned bytesbranchbyte1 << 24 +?branchbyte2 << 16 +?branchbyte3 << 8 + branchbyte4)
i2b911001 0001?value → resultconvert an int into a byte
i2c921001 0010?value → resultconvert an int into a character
i2d871000 0111?value → resultconvert an int into a double
i2f861000 0110?value → resultconvert an int into a float
i2l851000 0101?value → resultconvert an int into a long
i2s931001 0011?value → resultconvert an int into a short
iadd600110 0000?value1, value2 → resultadd two ints
iaload2e0010 1110?arrayref, index → valueload an int from an array
iand7e0111 1110?value1, value2 → resultperform a bitwise and on two integers
iastore4f0100 1111?arrayref, index, value →store an int into an array
iconst_0030000 0011?→ 0load the int value 0 onto the stack
iconst_1040000 0100?→ 1load the int value 1 onto the stack
iconst_2050000 0101?→ 2load the int value 2 onto the stack
iconst_3060000 0110?→ 3load the int value 3 onto the stack
iconst_4070000 0111?→ 4load the int value 4 onto the stack
iconst_5080000 1000?→ 5load the int value 5 onto the stack
iconst_m1020000 0010?→ -1load the int value ?1 onto the stack
idiv6c0110 1100?value1, value2 → resultdivide two integers
if_acmpeqa51010 01012: branchbyte1, branchbyte2value1, value2 →if references are equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_acmpnea61010 01102: branchbyte1, branchbyte2value1, value2 →if references are not equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpeq9f1001 11112: branchbyte1, branchbyte2value1, value2 →if ints are equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpgea21010 00102: branchbyte1, branchbyte2value1, value2 →if?value1?is greater than or equal to?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpgta31010 00112: branchbyte1, branchbyte2value1, value2 →if?value1?is greater than?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmplea41010 01002: branchbyte1, branchbyte2value1, value2 →if?value1?is less than or equal to?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmplta11010 00012: branchbyte1, branchbyte2value1, value2 →if?value1?is less than?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpnea01010 00002: branchbyte1, branchbyte2value1, value2 →if ints are not equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifeq991001 10012: branchbyte1, branchbyte2value →if?value?is 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifge9c1001 11002: branchbyte1, branchbyte2value →if?value?is greater than or equal to 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifgt9d1001 11012: branchbyte1, branchbyte2value →if?value?is greater than 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifle9e1001 11102: branchbyte1, branchbyte2value →if?value?is less than or equal to 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
iflt9b1001 10112: branchbyte1, branchbyte2value →if?value?is less than 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifne9a1001 10102: branchbyte1, branchbyte2value →if?value?is not 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifnonnullc71100 01112: branchbyte1, branchbyte2value →if?value?is not null, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifnullc61100 01102: branchbyte1, branchbyte2value →if?value?is null, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
iinc841000 01002: index, const[No change]increment local variable?#index?by signed byte?const
iload150001 01011: index→ valueload an int?value?from a local variable?#index
iload_01a0001 1010?→ valueload an int?value?from local variable 0
iload_11b0001 1011?→ valueload an int?value?from local variable 1
iload_21c0001 1100?→ valueload an int?value?from local variable 2
iload_31d0001 1101?→ valueload an int?value?from local variable 3
impdep1fe1111 1110??reserved for implementation-dependent operations within debuggers; should not appear in any class file
impdep2ff1111 1111??reserved for implementation-dependent operations within debuggers; should not appear in any class file
imul680110 1000?value1, value2 → resultmultiply two integers
ineg740111 0100?value → resultnegate int
instanceofc11100 00012: indexbyte1, indexbyte2objectref → resultdetermines if an object?objectref?is of a given type, identified by class reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokedynamicba1011 10104: indexbyte1, indexbyte2, 0, 0[arg1, [arg2 ...]] → resultinvokes a dynamic method and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokeinterfaceb91011 10014: indexbyte1, indexbyte2, count, 0objectref, [arg1, arg2, ...] → resultinvokes an interface method on object?objectref?and puts the result on the stack (might be void); the interface method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokespecialb71011 01112: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke instance method on object?objectref?and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokestaticb81011 10002: indexbyte1, indexbyte2[arg1, arg2, ...] → resultinvoke a static method and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokevirtualb61011 01102: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke virtual method on object?objectref?and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
ior801000 0000?value1, value2 → resultbitwise int or
irem700111 0000?value1, value2 → resultlogical int remainder
ireturnac1010 1100?value → [empty]return an integer from a method
ishl780111 1000?value1, value2 → resultint shift left
ishr7a0111 1010?value1, value2 → resultint arithmetic shift right
istore360011 01101: indexvalue →store int?value?into variable?#index
istore_03b0011 1011?value →store int?value?into variable 0
istore_13c0011 1100?value →store int?value?into variable 1
istore_23d0011 1101?value →store int?value?into variable 2
istore_33e0011 1110?value →store int?value?into variable 3
isub640110 0100?value1, value2 → resultint subtract
iushr7c0111 1100?value1, value2 → resultint logical shift right
ixor821000 0010?value1, value2 → resultint xor
jsra81010 10002: branchbyte1, branchbyte2→ addressjump to subroutine at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2) and place the return address on the stack
jsr_wc91100 10014: branchbyte1, branchbyte2, branchbyte3, branchbyte4→ addressjump to subroutine at?branchoffset?(signed int constructed from unsigned bytes?branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack
l2d8a1000 1010?value → resultconvert a long to a double
l2f891000 1001?value → resultconvert a long to a float
l2i881000 1000?value → resultconvert a long to a int
ladd610110 0001?value1, value2 → resultadd two longs
laload2f0010 1111?arrayref, index → valueload a long from an array
land7f0111 1111?value1, value2 → resultbitwise and of two longs
lastore500101 0000?arrayref, index, value →store a long to an array
lcmp941001 0100?value1, value2 → resultpush 0 if the two longs are the same, 1 if value1 is greater than value2, -1 otherwise
lconst_0090000 1001?→ 0Lpush the long 0 onto the stack
lconst_10a0000 1010?→ 1Lpush the long 1 onto the stack
ldc120001 00101: index→ valuepush a constant?#index?from a constant pool (String, int or float) onto the stack
ldc2_w140001 01002: indexbyte1, indexbyte2→ valuepush a constant?#index?from a constant pool (double or long) onto the stack (wide?index?is constructed as?indexbyte1 << 8 + indexbyte2)
ldc_w130001 00112: indexbyte1, indexbyte2→ valuepush a constant?#index?from a constant pool (String, int or float) onto the stack (wideindex?is constructed as?indexbyte1 << 8 + indexbyte2)
ldiv6d0110 1101?value1, value2 → resultdivide two longs
lload160001 01101: index→ valueload a long value from a local variable?#index
lload_01e0001 1110?→ valueload a long value from a local variable 0
lload_11f0001 1111?→ valueload a long value from a local variable 1
lload_2200010 0000?→ valueload a long value from a local variable 2
lload_3210010 0001?→ valueload a long value from a local variable 3
lmul690110 1001?value1, value2 → resultmultiply two longs
lneg750111 0101?value → resultnegate a long
lookupswitchab1010 10114+: <0–3 bytes padding>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-offset pairs...key →a target address is looked up from a table using a key and execution continues from the instruction at that address
lor811000 0001?value1, value2 → resultbitwise or of two longs
lrem710111 0001?value1, value2 → resultremainder of division of two longs
lreturnad1010 1101?value → [empty]return a long value
lshl790111 1001?value1, value2 → resultbitwise shift left of a long?value1?by int?value2?positions
lshr7b0111 1011?value1, value2 → resultbitwise shift right of a long?value1?by int?value2?positions
lstore370011 01111: indexvalue →store a long?value?in a local variable?#index
lstore_03f0011 1111?value →store a long?value?in a local variable 0
lstore_1400100 0000?value →store a long?value?in a local variable 1
lstore_2410100 0001?value →store a long?value?in a local variable 2
lstore_3420100 0010?value →store a long?value?in a local variable 3
lsub650110 0101?value1, value2 → resultsubtract two longs
lushr7d0111 1101?value1, value2 → resultbitwise shift right of a long?value1?by int?value2?positions, unsigned
lxor831000 0011?value1, value2 → resultbitwise exclusive or of two longs
monitorenterc21100 0010?objectref →enter monitor for object ("grab the lock" – start of synchronized() section)
monitorexitc31100 0011?objectref →exit monitor for object ("release the lock" – end of synchronized() section)
multianewarrayc51100 01013: indexbyte1, indexbyte2, dimensionscount1, [count2,...] → arrayrefcreate 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, [count2, etc.]
newbb1011 10112: indexbyte1, indexbyte2→ objectrefcreate new object of type identified by class reference in constant pool?index?(indexbyte1 << 8 + indexbyte2)
newarraybc1011 11001: atypecount → arrayrefcreate new array with?count?elements of primitive type identified by?atype
nop000000 0000?[No change]perform no operation
pop570101 0111?value →discard the top value on the stack
pop2580101 1000?{value2, value1} →discard the top two values on the stack (or one value, if it is a double or long)
putfieldb51011 01012: indexbyte1, indexbyte2objectref, value →set field to?value?in an object?objectref, where the field is identified by a field reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
putstaticb31011 00112: indexbyte1, indexbyte2value →set static field to?value?in a class, where the field is identified by a field referenceindex?in constant pool (indexbyte1 << 8 + indexbyte2)
reta91010 10011: index[No change]continue execution from address taken from a local variable?#index?(the asymmetry with jsr is intentional)
returnb11011 0001?→ [empty]return void from method
saload350011 0101?arrayref, index → valueload short from array
sastore560101 0110?arrayref, index, value →store short to array
sipush110001 00012: byte1, byte2→ valuepush a short onto the stack
swap5f0101 1111?value2, value1 → value1, value2swaps two top words on the stack (note that value1 and value2 must not be double or long)
tableswitchaa1010 10104+: [0–3 bytes padding], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, jump offsets...index →continue execution from an address in the table at offset?index
widec41100 01003/5: opcode, indexbyte1, indexbyte2
or
iinc, indexbyte1, indexbyte2, countbyte1, countbyte2
[same as for corresponding instructions]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 iinc, where theindex?is 16 bits and the constant to increment by is a signed 16 bit short

Mnemonic Opcode
(in hexadecimal) Opcode (in binary) Other bytes Stack
[before]→[after] Description
(no name)cb-fd???these values are currently unassigned for opcodes and are reserved for future use
aaload320011 0010?arrayref, index → valueload onto the stack a reference from an array
aastore530101 0011?arrayref, index, value →store into a reference in an array
aconst_null010000 0001?→ nullpush a?null?reference onto the stack
aload190001 10011: index→ objectrefload a reference onto the stack from a local variable?#index
aload_02a0010 1010?→ objectrefload a reference onto the stack from local variable 0
aload_12b0010 1011?→ objectrefload a reference onto the stack from local variable 1
aload_22c0010 1100?→ objectrefload a reference onto the stack from local variable 2
aload_32d0010 1101?→ objectrefload a reference onto the stack from local variable 3
anewarraybd1011 11012: indexbyte1, indexbyte2count → arrayrefcreate a new array of references of length?count?and component type identified by the class reference?index?(indexbyte1 << 8 + indexbyte2) in the constant pool
areturnb01011 0000?objectref → [empty]return a reference from a method
arraylengthbe1011 1110?arrayref → lengthget the length of an array
astore3a0011 10101: indexobjectref →store a reference into a local variable?#index
astore_04b0100 1011?objectref →store a reference into local variable 0
astore_14c0100 1100?objectref →store a reference into local variable 1
astore_24d0100 1101?objectref →store a reference into local variable 2
astore_34e0100 1110?objectref →store a reference into local variable 3
athrowbf1011 1111?objectref → [empty], objectrefthrows an error or exception (notice that the rest of the stack is cleared, leaving only a reference to the Throwable)
baload330011 0011?arrayref, index → valueload a byte or Boolean value from an array
bastore540101 0100?arrayref, index, value →store a byte or Boolean value into an array
bipush100001 00001: byte→ valuepush a?byte?onto the stack as an integer?value
breakpointca1100 1010??reserved for breakpoints in Java debuggers; should not appear in any class file
caload340011 0100?arrayref, index → valueload a char from an array
castore550101 0101?arrayref, index, value →store a char into an array
checkcastc01100 00002: indexbyte1, indexbyte2objectref → objectrefchecks whether an?objectref?is of a certain type, the class reference of which is in the constant pool at?index?(indexbyte1 << 8 + indexbyte2)
d2f901001 0000?value → resultconvert a double to a float
d2i8e1000 1110?value → resultconvert a double to an int
d2l8f1000 1111?value → resultconvert a double to a long
dadd630110 0011?value1, value2 → resultadd two doubles
daload310011 0001?arrayref, index → valueload a double from an array
dastore520101 0010?arrayref, index, value →store a double into an array
dcmpg981001 1000?value1, value2 → resultcompare two doubles
dcmpl971001 0111?value1, value2 → resultcompare two doubles
dconst_00e0000 1110?→ 0.0push the constant?0.0?onto the stack
dconst_10f0000 1111?→ 1.0push the constant?1.0?onto the stack
ddiv6f0110 1111?value1, value2 → resultdivide two doubles
dload180001 10001: index→ valueload a double?value?from a local variable?#index
dload_0260010 0110?→ valueload a double from local variable 0
dload_1270010 0111?→ valueload a double from local variable 1
dload_2280010 1000?→ valueload a double from local variable 2
dload_3290010 1001?→ valueload a double from local variable 3
dmul6b0110 1011?value1, value2 → resultmultiply two doubles
dneg770111 0111?value → resultnegate a double
drem730111 0011?value1, value2 → resultget the remainder from a division between two doubles
dreturnaf1010 1111?value → [empty]return a double from a method
dstore390011 10011: indexvalue →store a double?value?into a local variable?#index
dstore_0470100 0111?value →store a double into local variable 0
dstore_1480100 1000?value →store a double into local variable 1
dstore_2490100 1001?value →store a double into local variable 2
dstore_34a0100 1010?value →store a double into local variable 3
dsub670110 0111?value1, value2 → resultsubtract a double from another
dup590101 1001?value → value, valueduplicate the value on top of the stack
dup25c0101 1100?{value2, value1} → {value2, value1}, {value2, value1}duplicate top two stack words (two values, if value1 is not double nor long; a single value, if value1 is double or long)
dup2_x15d0101 1101?value3, {value2, value1} → {value2, value1}, value3, {value2, value1}duplicate two words and insert beneath third word (see explanation above)
dup2_x25e0101 1110?{value4, value3}, {value2, value1} → {value2, value1}, {value4, value3}, {value2, value1}duplicate two words and insert beneath fourth word
dup_x15a0101 1010?value2, value1 → value1, value2, value1insert a copy of the top value into the stack two values from the top. value1 and value2 must not be of the type double or long.
dup_x25b0101 1011?value3, value2, value1 → value1, value3, value2, value1insert a copy of 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
f2d8d1000 1101?value → resultconvert a float to a double
f2i8b1000 1011?value → resultconvert a float to an int
f2l8c1000 1100?value → resultconvert a float to a long
fadd620110 0010?value1, value2 → resultadd two floats
faload300011 0000?arrayref, index → valueload a float from an array
fastore510101 0001?arrayref, index, value →store a float in an array
fcmpg961001 0110?value1, value2 → resultcompare two floats
fcmpl951001 0101?value1, value2 → resultcompare two floats
fconst_00b0000 1011?→ 0.0fpush?0.0f?on the stack
fconst_10c0000 1100?→ 1.0fpush?1.0f?on the stack
fconst_20d0000 1101?→ 2.0fpush?2.0f?on the stack
fdiv6e0110 1110?value1, value2 → resultdivide two floats
fload170001 01111: index→ valueload a float?value?from a local variable?#index
fload_0220010 0010?→ valueload a float?value?from local variable 0
fload_1230010 0011?→ valueload a float?value?from local variable 1
fload_2240010 0100?→ valueload a float?value?from local variable 2
fload_3250010 0101?→ valueload a float?value?from local variable 3
fmul6a0110 1010?value1, value2 → resultmultiply two floats
fneg760111 0110?value → resultnegate a float
frem720111 0010?value1, value2 → resultget the remainder from a division between two floats
freturnae1010 1110?value → [empty]return a float
fstore380011 10001: indexvalue →store a float?value?into a local variable?#index
fstore_0430100 0011?value →store a float?value?into local variable 0
fstore_1440100 0100?value →store a float?value?into local variable 1
fstore_2450100 0101?value →store a float?value?into local variable 2
fstore_3460100 0110?value →store a float?value?into local variable 3
fsub660110 0110?value1, value2 → resultsubtract two floats
getfieldb41011 01002: index1, index2objectref → valueget a field?value?of an object?objectref, where the field is identified by field reference in the constant pool?index?(index1 << 8 + index2)
getstaticb21011 00102: index1, index2→ valueget a static field?value?of a class, where the field is identified by field reference in the constant pool?index?(index1 << 8 + index2)
gotoa71010 01112: branchbyte1, branchbyte2[no change]goes to another instruction at?branchoffset?(signed short constructed from unsigned bytesbranchbyte1 << 8 + branchbyte2)
goto_wc81100 10004: branchbyte1, branchbyte2, branchbyte3, branchbyte4[no change]goes to another instruction at?branchoffset?(signed int constructed from unsigned bytesbranchbyte1 << 24 +?branchbyte2 << 16 +?branchbyte3 << 8 + branchbyte4)
i2b911001 0001?value → resultconvert an int into a byte
i2c921001 0010?value → resultconvert an int into a character
i2d871000 0111?value → resultconvert an int into a double
i2f861000 0110?value → resultconvert an int into a float
i2l851000 0101?value → resultconvert an int into a long
i2s931001 0011?value → resultconvert an int into a short
iadd600110 0000?value1, value2 → resultadd two ints
iaload2e0010 1110?arrayref, index → valueload an int from an array
iand7e0111 1110?value1, value2 → resultperform a bitwise and on two integers
iastore4f0100 1111?arrayref, index, value →store an int into an array
iconst_0030000 0011?→ 0load the int value 0 onto the stack
iconst_1040000 0100?→ 1load the int value 1 onto the stack
iconst_2050000 0101?→ 2load the int value 2 onto the stack
iconst_3060000 0110?→ 3load the int value 3 onto the stack
iconst_4070000 0111?→ 4load the int value 4 onto the stack
iconst_5080000 1000?→ 5load the int value 5 onto the stack
iconst_m1020000 0010?→ -1load the int value ?1 onto the stack
idiv6c0110 1100?value1, value2 → resultdivide two integers
if_acmpeqa51010 01012: branchbyte1, branchbyte2value1, value2 →if references are equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_acmpnea61010 01102: branchbyte1, branchbyte2value1, value2 →if references are not equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpeq9f1001 11112: branchbyte1, branchbyte2value1, value2 →if ints are equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpgea21010 00102: branchbyte1, branchbyte2value1, value2 →if?value1?is greater than or equal to?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpgta31010 00112: branchbyte1, branchbyte2value1, value2 →if?value1?is greater than?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmplea41010 01002: branchbyte1, branchbyte2value1, value2 →if?value1?is less than or equal to?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmplta11010 00012: branchbyte1, branchbyte2value1, value2 →if?value1?is less than?value2, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
if_icmpnea01010 00002: branchbyte1, branchbyte2value1, value2 →if ints are not equal, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifeq991001 10012: branchbyte1, branchbyte2value →if?value?is 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifge9c1001 11002: branchbyte1, branchbyte2value →if?value?is greater than or equal to 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifgt9d1001 11012: branchbyte1, branchbyte2value →if?value?is greater than 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifle9e1001 11102: branchbyte1, branchbyte2value →if?value?is less than or equal to 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
iflt9b1001 10112: branchbyte1, branchbyte2value →if?value?is less than 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifne9a1001 10102: branchbyte1, branchbyte2value →if?value?is not 0, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifnonnullc71100 01112: branchbyte1, branchbyte2value →if?value?is not null, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
ifnullc61100 01102: branchbyte1, branchbyte2value →if?value?is null, branch to instruction at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2)
iinc841000 01002: index, const[No change]increment local variable?#index?by signed byte?const
iload150001 01011: index→ valueload an int?value?from a local variable?#index
iload_01a0001 1010?→ valueload an int?value?from local variable 0
iload_11b0001 1011?→ valueload an int?value?from local variable 1
iload_21c0001 1100?→ valueload an int?value?from local variable 2
iload_31d0001 1101?→ valueload an int?value?from local variable 3
impdep1fe1111 1110??reserved for implementation-dependent operations within debuggers; should not appear in any class file
impdep2ff1111 1111??reserved for implementation-dependent operations within debuggers; should not appear in any class file
imul680110 1000?value1, value2 → resultmultiply two integers
ineg740111 0100?value → resultnegate int
instanceofc11100 00012: indexbyte1, indexbyte2objectref → resultdetermines if an object?objectref?is of a given type, identified by class reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokedynamicba1011 10104: indexbyte1, indexbyte2, 0, 0[arg1, [arg2 ...]] → resultinvokes a dynamic method and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokeinterfaceb91011 10014: indexbyte1, indexbyte2, count, 0objectref, [arg1, arg2, ...] → resultinvokes an interface method on object?objectref?and puts the result on the stack (might be void); the interface method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokespecialb71011 01112: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke instance method on object?objectref?and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokestaticb81011 10002: indexbyte1, indexbyte2[arg1, arg2, ...] → resultinvoke a static method and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
invokevirtualb61011 01102: indexbyte1, indexbyte2objectref, [arg1, arg2, ...] → resultinvoke virtual method on object?objectref?and puts the result on the stack (might be void); the method is identified by method reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
ior801000 0000?value1, value2 → resultbitwise int or
irem700111 0000?value1, value2 → resultlogical int remainder
ireturnac1010 1100?value → [empty]return an integer from a method
ishl780111 1000?value1, value2 → resultint shift left
ishr7a0111 1010?value1, value2 → resultint arithmetic shift right
istore360011 01101: indexvalue →store int?value?into variable?#index
istore_03b0011 1011?value →store int?value?into variable 0
istore_13c0011 1100?value →store int?value?into variable 1
istore_23d0011 1101?value →store int?value?into variable 2
istore_33e0011 1110?value →store int?value?into variable 3
isub640110 0100?value1, value2 → resultint subtract
iushr7c0111 1100?value1, value2 → resultint logical shift right
ixor821000 0010?value1, value2 → resultint xor
jsra81010 10002: branchbyte1, branchbyte2→ addressjump to subroutine at?branchoffset?(signed short constructed from unsigned bytes?branchbyte1 << 8 + branchbyte2) and place the return address on the stack
jsr_wc91100 10014: branchbyte1, branchbyte2, branchbyte3, branchbyte4→ addressjump to subroutine at?branchoffset?(signed int constructed from unsigned bytes?branchbyte1 << 24 + branchbyte2 << 16 + branchbyte3 << 8 + branchbyte4) and place the return address on the stack
l2d8a1000 1010?value → resultconvert a long to a double
l2f891000 1001?value → resultconvert a long to a float
l2i881000 1000?value → resultconvert a long to a int
ladd610110 0001?value1, value2 → resultadd two longs
laload2f0010 1111?arrayref, index → valueload a long from an array
land7f0111 1111?value1, value2 → resultbitwise and of two longs
lastore500101 0000?arrayref, index, value →store a long to an array
lcmp941001 0100?value1, value2 → resultpush 0 if the two longs are the same, 1 if value1 is greater than value2, -1 otherwise
lconst_0090000 1001?→ 0Lpush the long 0 onto the stack
lconst_10a0000 1010?→ 1Lpush the long 1 onto the stack
ldc120001 00101: index→ valuepush a constant?#index?from a constant pool (String, int or float) onto the stack
ldc2_w140001 01002: indexbyte1, indexbyte2→ valuepush a constant?#index?from a constant pool (double or long) onto the stack (wide?index?is constructed as?indexbyte1 << 8 + indexbyte2)
ldc_w130001 00112: indexbyte1, indexbyte2→ valuepush a constant?#index?from a constant pool (String, int or float) onto the stack (wideindex?is constructed as?indexbyte1 << 8 + indexbyte2)
ldiv6d0110 1101?value1, value2 → resultdivide two longs
lload160001 01101: index→ valueload a long value from a local variable?#index
lload_01e0001 1110?→ valueload a long value from a local variable 0
lload_11f0001 1111?→ valueload a long value from a local variable 1
lload_2200010 0000?→ valueload a long value from a local variable 2
lload_3210010 0001?→ valueload a long value from a local variable 3
lmul690110 1001?value1, value2 → resultmultiply two longs
lneg750111 0101?value → resultnegate a long
lookupswitchab1010 10114+: <0–3 bytes padding>, defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, npairs1, npairs2, npairs3, npairs4, match-offset pairs...key →a target address is looked up from a table using a key and execution continues from the instruction at that address
lor811000 0001?value1, value2 → resultbitwise or of two longs
lrem710111 0001?value1, value2 → resultremainder of division of two longs
lreturnad1010 1101?value → [empty]return a long value
lshl790111 1001?value1, value2 → resultbitwise shift left of a long?value1?by int?value2?positions
lshr7b0111 1011?value1, value2 → resultbitwise shift right of a long?value1?by int?value2?positions
lstore370011 01111: indexvalue →store a long?value?in a local variable?#index
lstore_03f0011 1111?value →store a long?value?in a local variable 0
lstore_1400100 0000?value →store a long?value?in a local variable 1
lstore_2410100 0001?value →store a long?value?in a local variable 2
lstore_3420100 0010?value →store a long?value?in a local variable 3
lsub650110 0101?value1, value2 → resultsubtract two longs
lushr7d0111 1101?value1, value2 → resultbitwise shift right of a long?value1?by int?value2?positions, unsigned
lxor831000 0011?value1, value2 → resultbitwise exclusive or of two longs
monitorenterc21100 0010?objectref →enter monitor for object ("grab the lock" – start of synchronized() section)
monitorexitc31100 0011?objectref →exit monitor for object ("release the lock" – end of synchronized() section)
multianewarrayc51100 01013: indexbyte1, indexbyte2, dimensionscount1, [count2,...] → arrayrefcreate 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, [count2, etc.]
newbb1011 10112: indexbyte1, indexbyte2→ objectrefcreate new object of type identified by class reference in constant pool?index?(indexbyte1 << 8 + indexbyte2)
newarraybc1011 11001: atypecount → arrayrefcreate new array with?count?elements of primitive type identified by?atype
nop000000 0000?[No change]perform no operation
pop570101 0111?value →discard the top value on the stack
pop2580101 1000?{value2, value1} →discard the top two values on the stack (or one value, if it is a double or long)
putfieldb51011 01012: indexbyte1, indexbyte2objectref, value →set field to?value?in an object?objectref, where the field is identified by a field reference?index?in constant pool (indexbyte1 << 8 + indexbyte2)
putstaticb31011 00112: indexbyte1, indexbyte2value →set static field to?value?in a class, where the field is identified by a field referenceindex?in constant pool (indexbyte1 << 8 + indexbyte2)
reta91010 10011: index[No change]continue execution from address taken from a local variable?#index?(the asymmetry with jsr is intentional)
returnb11011 0001?→ [empty]return void from method
saload350011 0101?arrayref, index → valueload short from array
sastore560101 0110?arrayref, index, value →store short to array
sipush110001 00012: byte1, byte2→ valuepush a short onto the stack
swap5f0101 1111?value2, value1 → value1, value2swaps two top words on the stack (note that value1 and value2 must not be double or long)
tableswitchaa1010 10104+: [0–3 bytes padding], defaultbyte1, defaultbyte2, defaultbyte3, defaultbyte4, lowbyte1, lowbyte2, lowbyte3, lowbyte4, highbyte1, highbyte2, highbyte3, highbyte4, jump offsets...index →continue execution from an address in the table at offset?index
widec41100 01003/5: opcode, indexbyte1, indexbyte2
or
iinc, indexbyte1, indexbyte2, countbyte1, countbyte2
[same as for corresponding instructions]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 iinc, where theindex?is 16 bits and the constant to increment by is a signed 16 bit short

總結(jié)

以上是生活随笔為你收集整理的Java bytecode instruction listings的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。