📄 appa.htm
字号:
dload_3=41 Stack: ... ->..., word1, word2 from vars[3] & vars[4]</TT></BLOCKQUOTE><H5>Load Object from Local Variable</H5><BLOCKQUOTE><TT>aload=25 vindex Stack: ...-> ..., object from vars[vindex]<BR>aload_0=42 Stack: ... ->..., object from vars[0]<BR>aload_1=43 Stack: ... ->..., object from vars[1]<BR>aload_2=44 Stack: ... ->..., object from vars[2]<BR>aload_3=45 Stack: ... ->..., object from vars[3]</TT></BLOCKQUOTE><H5>Store Integer into Local Variable</H5><BLOCKQUOTE><TT>istore=54 vindex Stack: ..., INT ->... into vars[vindex]<BR>istore_0=59 Stack: ..., INT-> ... into vars[0]<BR>istore_1=60 Stack: ..., INT-> ... into vars[1]<BR>istore_2=61 Stack: ..., INT-> ... into vars[2]<BR>istore_3=62 Stack: ..., INT-> ... into vars[3]</TT></BLOCKQUOTE><H5>Store Long Integer into Local Variable</H5><BLOCKQUOTE><TT>lstore=55 vindex Stack: ..., word1, word2-> ... into vars[vindex] & vars[vindex+1]<BR>lstore_0=63 Stack: ..., word1,word2 -> ... into vars[0] & vars[1]<BR>lstore_1=64 Stack: ..., word1,word2 -> ... into vars[1] & vars[2]<BR>lstore_2=65 Stack: ..., word1,word2 -> ... into vars[2] & vars[3]<BR>lstore_3=66 Stack: ..., word1,word2 -> ... into vars[3] & vars[4]</TT></BLOCKQUOTE><H5>Store Float into Local Variable</H5><BLOCKQUOTE><TT>fstore=56 vindex Stack: ..., FLOAT ->... into vars[vindex]<BR>fstore_0=67 Stack: ..., FLOAT-> ... into vars[0]<BR>fstore_1=68 Stack: ..., FLOAT-> ... into vars[1]<BR>fstore_2=69 Stack: ..., FLOAT-> ... into vars[2]<BR>fstore_3=70 Stack: ..., FLOAT-> ... into vars[3]</TT></BLOCKQUOTE><H5>Store Double into Local Variable</H5><BLOCKQUOTE><TT>dstore=57 vindex Stack: ..., word1, word2-> ... into vars[vindex] & vars[vindex+1]<BR>dstore_0=71 Stack: ..., word1,word2 -> ... into vars[0] & vars[1]<BR>dstore_1=72 Stack: ..., word1,word2 -> ... into vars[1] & vars[2]<BR>dstore_2=73 Stack: ..., word1,word2 -> ... into vars[2] & vars[3]<BR>dstore_3=74 Stack: ..., word1,word2 -> ... into vars[3] & vars[4]</TT></BLOCKQUOTE><H5>Store Object into Local Variable</H5><BLOCKQUOTE><TT>istore=58 vindex Stack: ..., OBJ ->... into vars[vindex]<BR>istore_0=75 Stack: ..., OBJ-> ... into vars[0]<BR>istore_1=76 Stack: ..., OBJ-> ... into vars[1]<BR>istore_2=77 Stack: ..., OBJ-> ... into vars[2]<BR>istore_3=78 Stack: ..., OBJ-> ... into vars[3]</TT></BLOCKQUOTE><H5>Increment Local Variable </H5><P>This applies only to integers.<BLOCKQUOTE><TT>iinc=132 vindex constant Stack:... -> ... vars[vindex] += constant</TT></BLOCKQUOTE><H4>Managing Arrays</H4><UL><LI>Arrays are treated as objects, but as you learned in <A HREF="Ch10.htm" >Chapter 10</A>,they don't use a method table pointer. Because of this uniqueness,arrays have special bytecodes to create and access them.</UL><H5>Allocate a New Array</H5><BLOCKQUOTE><TT>newarray=188 type Stack: ..., size ->..., OBJ</TT></BLOCKQUOTE><H5>Allocate a New Array of Objects</H5><BLOCKQUOTE><TT>anewarray=189 classindex1 classindex2Stack: ..., size -> ..., OBJ</TT></BLOCKQUOTE><H5>Allocate a New Multi-Dimensional Array</H5><BLOCKQUOTE><TT>newarray=197 indexbyte1 indexbyte1 indexbyte2 Stack:..., size1, size2, etc -> ..., OBJ</TT></BLOCKQUOTE><H5>Get the Array Length</H5><BLOCKQUOTE><TT>arraylength=190 Stack: ..., OBJ ->..., length</TT></BLOCKQUOTE><H5>Load Primitives from the Array</H5><BLOCKQUOTE><TT>iaload=46 Stack: ..., OBJ, index ->..., INT<BR>laload=47 Stack: ..., OBJ, index -> ..., LONG1, LONG2<BR>faload=48 Stack: ..., OBJ, index -> ..., FLOAT<BR>daload=49 Stack: ..., OBJ, index -> ..., DOUBLE1, DOUBLE2<BR>aaload=50 Stack: ..., OBJ, index -> ..., OBJ<BR>baload=51 Stack: ..., OBJ, index -> ..., BYTE<BR>caload=52 Stack: ..., OBJ, index -> ..., CHAR<BR>saload=53 Stack: ..., OBJ, index -> ..., SHORT</TT></BLOCKQUOTE><H5>Store Primitives into the Array</H5><BLOCKQUOTE><TT>iastore-79 Stack: ..., OBJ, index, INT-> ...<BR>lastore=80 Stack: ..., OBJ, index, LONG1, LONG2 -> ...<BR>fastore=81 Stack: ..., OBJ, index, FLOAT -> ...<BR>dastore=82 Stack: ..., OBJ, index, DOUBLE1, DOUBLE2 -> ...<BR>aastore=83 Stack: ..., OBJ, index, OBJ -> ...<BR>bastore=84 Stack: ..., OBJ, index, BYTE -> ...<BR>castore=85 Stack: ..., OBJ, index, CHAR -> ...<BR>sastore=86 Stack: ..., OBJ, index, SHORT -> ...</TT></BLOCKQUOTE><H4>Generic Stack Instructions</H4><P>These are basic operations that alter the stack:<H5>Do Nothing</H5><BLOCKQUOTE><TT>nop=0 Stack: ... ->...</TT></BLOCKQUOTE><H5>Pop Stack Values</H5><BLOCKQUOTE><TT>pop=87 Stack: ..., VAL ->...<BR>pop2=88 Stack: ..., VAL1, VAL2 -> ...</TT></BLOCKQUOTE><H5>Duplicate Stack Values and Possibly Insert Below Stack Top</H5><BLOCKQUOTE><TT>dup=89 Stack:..., V -> ..., V, V<BR>dup2=92 Stack: ..., V1, V2 -> ..., V1,V2, V1, V2<BR>dup_x1=90 Stack: ..., V1, V2 -> ..., V2, V1, V2<BR>dup2_x1=93 Stack: ..., V1, V2, V3 -> ..., V2, V3, V1, V2, V3<BR>dup_x2=91 Stack: ..., V1, V2, V3 -> ..., V3, V1,V2, V3<BR>dup2_x2=94 Stack: ..., V1, V2, V3, V4 -> ..., V3, V4, V1, V2,V3, V4</TT></BLOCKQUOTE><H5>Swap Two-Stack Items</H5><BLOCKQUOTE><TT>swap=95 Stack:..., V1, V2 -> ..., V2, V1</TT></BLOCKQUOTE><H4>Arithmetic and Logical Instructions</H4><P>All the arithmetic operations operate on four possible types:integer, long, float, or double. Logical instructions operateonly on integer and long types.<H5>Addition</H5><BLOCKQUOTE><TT>iadd=96 Stack: ..., INT1,INT2 -> ..., INT1+INT2<BR>ladd=97 Stack: ..., L1_1, L1_2, L2_1, L2_2 -> ...,L1+L2 (high), L1+L2 (low)<BR>fadd=98 Stack: ..., FLOAT1, FLOAT2 -> ..., FLOAT1+FLOAT2<BR>dadd=99 Stack: ..., D1_1, D1_2, D2_1, D2_2 -> ...,D1+D2 (high), D1+D2 (low)</TT></BLOCKQUOTE><H5>Subtraction</H5><BLOCKQUOTE><TT>isub=100 Stack: ..., INT1, INT2 ->..., INT1-INT2<BR>lsub=101 Stack: ..., L1_1, L1_2, L2_1, L2_2 -> ..., L1-L2 (high),L1-L2 (low)<BR>fsub=102 Stack: ..., FLOAT1, FLOAT2 -> ..., FLOAT1-FLOAT2<BR>dsub=103 Stack: ..., D1_1, D1_2, D2_1, D2_2 -> ..., D1-D2 (high),D1-D2 (low)</TT></BLOCKQUOTE><H5>Multiplication</H5><BLOCKQUOTE><TT>imul=104 Stack: ..., INT1,INT2 -> ..., INT1*INT2<BR>lmul=105 Stack: ..., L1_1, L1_2, L2_1, L2_2 -> ...,L1*L2 (high), L1*L2 (low)<BR>fmul=106 Stack: ..., FLOAT1, FLOAT2 -> ..., FLOAT1*FLOAT2<BR>dmul=107 Stack: ..., D1_1, D1_2, D2_1, D2_2 -> ...,D1*D2 (high), D1*D2 (low)</TT></BLOCKQUOTE><H5>Division</H5><BLOCKQUOTE><TT>idiv=108 Stack: ..., INT1,INT2 -> ..., INT1/INT2<BR>ldiv=109 Stack: ..., L1_1, L1_2, L2_1, L2_2 -> ...,L1/L2 (high), L1/L2 (low)<BR>fdiv=110 Stack: ..., FLOAT1, FLOAT2 -> ..., FLOAT1/FLOAT2<BR>ddiv=111 Stack: ..., D1_1, D1_2, D2_1, D2_2 -> ...,D1/D2 (high), D1/D2 (low)</TT></BLOCKQUOTE><H5>Remainder</H5><BLOCKQUOTE><TT>irem=112 Stack: ..., INT1,INT2 -> ..., INT1%INT2<BR>lrem=113 Stack: ..., L1_1, L1_2, L2_1, L2_2 -> ...,L1%L2 (high), L1%L2 (low)<BR>frem=114 Stack: ..., FLOAT1, FLOAT2 -> ..., FLOAT1%FLOAT2<BR>drem=115 Stack: ..., D1_1, D1_2, D2_1, D2_2 -> ...,D1%D2 (high), D1%D2 (low)</TT></BLOCKQUOTE><H5>Negation</H5><BLOCKQUOTE><TT>ineg=116 Stack: ..., INT ->..., -INT<BR>lneg=117 Stack: ..., LONG1, LONG2 -> ..., -LONG1,-LONG2<BR>fneg=118 Stack: ..., FLOAT -> ..., -FLOAT<BR>dneg=119 Stack: ..., DOUBLE1, DOUBLE2 -> ..., -DOUBLE1,-DOUBLE2</TT></BLOCKQUOTE><H5>Integer Logical Instructions </H5><P><TT>>>></TT> denotes an unsignedright shift.<BLOCKQUOTE><TT>ishl=120 Stack: ..., INT1,INT2 -> INT1<<(INT2 & 0x1f)<BR>ishr=122 Stack: ..., INT1, INT2 -> INT1>>(INT2& 0x1f)<BR>iushr=124 Stack: ..., INT1, INT2 -> INT1>>>(INT2 &0x1f)</TT></BLOCKQUOTE><H5>Long Integer Logical Instructions</H5><P><TT>>>></TT> denotes an unsignedright shift.<BLOCKQUOTE><TT>lshl=121 Stack: ..., L1, L2,INT -> L1<<(INT & 0x3f), L2<<(INT & 0x3f)<BR>lshr=123 Stack: ..., L1, L2, INT -> INT1>>(INT& 0x3f), L2>>(INT & 0x03)<BR>lushr=125 Stack: ..., L1, L2, INT -> INT1>>>(INT &0x3f), L2>>>(INT & 0x3f)</TT></BLOCKQUOTE><H5>Integer Boolean Operations</H5><BLOCKQUOTE><TT>iand=126 Stack: ..., INT1,INT2 -> ..., INT1&INT2<BR>ior=128 Stack: ..., INT1, INT2 -> ..., INT1|INT2<BR>ixor=130 Stack: ..., INT1, INT2 -> ..., INT1^INT2</TT></BLOCKQUOTE><H5>Long Integer Boolean Operations</H5><BLOCKQUOTE><TT>land=127 Stack: ..., L1_1,L1_2, L2_1, L2_2 -> ..., L1_1&L2_1, L1_2&L2_2<BR>lor=129 Stack: ..., L1_1, L1_2, L2_1, L2_2 ->..., L1_1|L2_1, L1_2|L2_2<BR>lxor=131 Stack: ..., L1_1, L1_2, L2_1, L2_2 -> ...,L1_1^L2_1. L1_2^L2_2</TT></BLOCKQUOTE><H4>Conversion Instructions</H4><P>Because most of the previous bytecodes expect the stack to containa homogenous set of operands, Java uses conversion functions.In code, you can add a float and an integer, but Java will firstconvert the integer to a float type before performing the addition.<H5>Integer Conversions</H5><BLOCKQUOTE><TT>i2l=133 Stack: .., INT -> ..., LONG1, LONG2<BR>i2f=134 Stack: .., INT ->..., FLOAT<BR>i2d=135 Stack: .., INT ->..., DOUBLE1, DOUBLE2<BR>int2byte=145 Stack: .., INT -> ..., BYTE<BR>int2char=146 Stack: .., INT -> ..., CHAR<BR>int2short=147 Stack: .., INT -> ..., SHORT</TT></BLOCKQUOTE><H5>Long Integer Conversions</H5><BLOCKQUOTE><TT>l2i=136 Stack: .., LONG1, LONG2 -> ..., INT<BR>l2f=137 Stack: .., LONG1,LONG2 -> ..., FLOAT<BR>l2d=138 Stack: .., LONG1,LONG2 -> ..., DOUBLE1, DOUBLE2</TT></BLOCKQUOTE><H5>Float Conversions</H5><BLOCKQUOTE><TT>f2i=139 Stack: .., FLOAT -> ..., INT<BR>f2l=140 Stack: .., FLOAT ->..., LONG1, LONG2<BR>f2d=141 Stack: .., FLOAT ->..., DOUBLE1, DOUBLE2</TT></BLOCKQUOTE><H5>Double Conversions</H5><BLOCKQUOTE><TT>d2i=142 Stack: .., DOUBLE1, DOUBLE2 -> ..., INT<BR>d2l=143 Stack: .., DOUBLE1,DOUBLE2 -> ..., LONG1, LONG2<BR>d2f=144 Stack: .., DOUBLE1,DOUBLE2 -> ..., FLOAT</TT></BLOCKQUOTE><H4>Control Transfer and Function Return</H4><P>All branch indexes are signed 16-bit offsets from the current<TT>pc</TT> register.<H5>Comparisons with Zero</H5><BLOCKQUOTE><TT>ifeq=153 branch1 branch2 Stack:..., INT -> ...<BR>ifne=154 branch1 branch2 Stack: ..., INT ->...<BR>iflt=155 branch1 branch2 Stack: ..., INT ->...<BR>ifge=156 branch1 branch2 Stack: ..., INT ->...<BR>ifgt=157 branch1 branch2 Stack: ..., INT ->...<BR>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -