📄 opcode.java
字号:
// Opcode.java -- definitions of Java bytecode operationspackage toba.classfile;import java.io.*;public class Opcode { // instance variables public int code; // The exact bytecode for this instruction public int length; // instruction length (0 if variable) public int kind; // kind (classification) of operation public int flags; // flag bits public int var; // variant for distinguishing similar ops public int pop; // number of words popped public String push; // number and types of words pushed public String name; // mnemonic name public String opr; // operator for use in generated code// global opcode tablestatic Opcode table[]; // instruction flagspublic static final int I8 = 0x0001; // instr has 8-bit signed argpublic static final int I16 = 0x0002; // instr has 16-bit signed argpublic static final int I32 = 0x0004; // instr has 16-bit signed argpublic static final int U8 = 0x0010; // instr has 8-bit unsigned argpublic static final int U16 = 0x0020; // instr has 16-bit unsigned argpublic static final int MORE = 0x0080; // instr has further additional argspublic static final int NFT = 0x0100; // no fallthrough to following instrpublic static final int PC = 0x0200; // argument is PC relativepublic static final int CTAB = 0x0800; // argument indexes constant tablepublic static final int UNS = 0x1000; // unsigned variant of a shiftpublic static final int SWCH = 0x2000; // switch instructionpublic static final int INST = 0x4000; // instanceof (including cast & aastore)public static final int JSRI = 0x8000; // JSR instruction flag// newarray typespublic static final int T_BOOLEAN = 4;public static final int T_CHAR = 5;public static final int T_FLOAT = 6;public static final int T_DOUBLE = 7;public static final int T_BYTE = 8;public static final int T_SHORT = 9;public static final int T_INT = 10;public static final int T_LONG = 11;// symbolic definitions of operations and classes of operations// (these generally don't have to match Java bytecode codes, although many do)// Constants are defined for wide classes of similar instructions, and // specific instances of those instructions are listed under the class.// The translator can deal with simliar instructions all at once, while// the interpreter deals with each individual instruction.public static final int NOP = 0; // Class of opcodes that do nothing in the public static final int POP = 87; // translator, and their specific numberspublic static final int POP2 = 88;public static final int CONST = 1; // constant load class of opspublic static final int ACONST_NULL = 1; // and specific bytecode of the classpublic static final int ICONST_M1 = 2;public static final int ICONST_0 = 3;public static final int ICONST_1 = 4;public static final int ICONST_2 = 5;public static final int ICONST_3 = 6;public static final int ICONST_4 = 7;public static final int ICONST_5 = 8;public static final int LCONST_0 = 9;public static final int LCONST_1 = 10;public static final int FCONST_0 = 11;public static final int FCONST_1 = 12;public static final int FCONST_2 = 13;public static final int DCONST_0 = 14;public static final int DCONST_1 = 15;public static final int BIPUSH = 16;public static final int SIPUSH = 17;public static final int LDC = 18; // ldc, ldc2, ldc2_wpublic static final int LDC_W = 19; public static final int LDC2_W = 20;public static final int LOAD = 21; // all non-array loadspublic static final int ILOAD = 21; // and specific instancespublic static final int LLOAD = 22;public static final int FLOAD = 23;public static final int DLOAD = 24;public static final int ALOAD = 25;public static final int ILOAD_0 = 26;public static final int ILOAD_1 = 27;public static final int ILOAD_2 = 28;public static final int ILOAD_3 = 29;public static final int LLOAD_0 = 30;public static final int LLOAD_1 = 31;public static final int LLOAD_2 = 32;public static final int LLOAD_3 = 33;public static final int FLOAD_0 = 34;public static final int FLOAD_1 = 35;public static final int FLOAD_2 = 36;public static final int FLOAD_3 = 37;public static final int DLOAD_0 = 38;public static final int DLOAD_1 = 39;public static final int DLOAD_2 = 40;public static final int DLOAD_3 = 41;public static final int ALOAD_0 = 42;public static final int ALOAD_1 = 43;public static final int ALOAD_2 = 44;public static final int ALOAD_3 = 45;public static final int STORE = 54; // all simple store operationspublic static final int ISTORE = 54; // and specific instancespublic static final int LSTORE = 55;public static final int FSTORE = 56;public static final int DSTORE = 57;public static final int ASTORE = 58;public static final int ISTORE_0 = 59;public static final int ISTORE_1 = 60;public static final int ISTORE_2 = 61;public static final int ISTORE_3 = 62;public static final int LSTORE_0 = 63;public static final int LSTORE_1 = 64;public static final int LSTORE_2 = 65;public static final int LSTORE_3 = 66;public static final int FSTORE_0 = 67;public static final int FSTORE_1 = 68;public static final int FSTORE_2 = 69;public static final int FSTORE_3 = 70;public static final int DSTORE_0 = 71;public static final int DSTORE_1 = 72;public static final int DSTORE_2 = 73;public static final int DSTORE_3 = 74;public static final int ASTORE_0 = 75;public static final int ASTORE_1 = 76;public static final int ASTORE_2 = 77;public static final int ASTORE_3 = 78;public static final int ARRAYLOAD = 46; // array load operationspublic static final int IALOAD = 46; // and specific instancespublic static final int LALOAD = 47;public static final int FALOAD = 48;public static final int DALOAD = 49;public static final int AALOAD = 50;public static final int BALOAD = 51;public static final int CALOAD = 52;public static final int SALOAD = 53;public static final int ARRAYSTORE = 79; // array store operationpublic static final int IASTOR = 79; // and specific instancespublic static final int LASTOR = 80;public static final int FASTOR = 81;public static final int DASTOR = 82;public static final int AASTOR = 83;public static final int BASTOR = 84;public static final int CASTOR = 85;public static final int SASTOR = 86;public static final int DUP = 89; // duppublic static final int DUPX1 = 90; // dup_x1public static final int DUPX2 = 91; // dup_x2public static final int DUP2 = 92; // dup2public static final int D2X1 = 93; // dup2_x1public static final int D2X2 = 94; // dup2_x2public static final int SWAP = 95; // swappublic static final int BINOP = 96; // binary operators public static final int IADD = 96; // and their specific instancespublic static final int LADD = 97;public static final int FADD = 98;public static final int DADD = 99;public static final int ISUB =100;public static final int LSUB =101;public static final int FSUB =102;public static final int DSUB =103;public static final int IMUL =104;public static final int LMUL =105;public static final int FMUL =106;public static final int DMUL =107;public static final int FDIV =110;public static final int DDIV =111;public static final int IAND = 126;public static final int LAND = 127;public static final int IOR = 128;public static final int LOR = 129;public static final int IXOR = 130;public static final int LXOR = 131;public static final int IINC = 132; // iinc (all by itself)public static final int DIVOP = 108; // division ops that throw division bypublic static final int IDIV = 108; // zero exceptionspublic static final int LDIV = 109; public static final int IREM = 112; public static final int LREM = 113; public static final int FREM = 114; // float (or double) remainder opspublic static final int DREM = 115; // and the specific double variantpublic static final int SHIFT = 120; // shift operatorspublic static final int ISHL = 120; // and the specific instancespublic static final int LSHL = 121;public static final int ISHR = 122;public static final int LSHR = 123;public static final int IUSHR = 124;public static final int LUSHR = 125;public static final int UNOP = 116; // unary operators public static final int INEG = 116; // and the specific instances of that classpublic static final int LNEG = 117;public static final int FNEG = 118;public static final int DNEG = 119;public static final int I2L = 133;public static final int I2F = 134;public static final int I2D = 135;public static final int L2I = 136;public static final int L2F = 137;public static final int L2D = 138;public static final int F2D = 141;public static final int D2F = 144;public static final int INT2BYTE = 145;public static final int INT2CHAR = 146;public static final int INT2SHORT = 147;public static final int FTOI = 139; // f2l, d2l, f2i, d2i conversionspublic static final int F2I = 139; // and specific instancespublic static final int F2L = 140;public static final int D2I = 142;public static final int D2L = 143;public static final int CMP = 148; // compares without branchingpublic static final int LCMP = 148;public static final int FCMPL = 149;public static final int FCMPG = 150;public static final int DCMPL = 151;public static final int DCMPG = 152;public static final int IFZRO = 153; // compare to zero and branchespublic static final int IFEQ = 153;public static final int IFNE = 154;public static final int IFLT = 155;public static final int IFGE = 156;public static final int IFGT = 157;public static final int IFLE = 158;public static final int IFNULL = 198;public static final int IFNONNULL = 199;public static final int IFCMP = 159; // compare and branchespublic static final int IF_ICMPEQ = 159;public static final int IF_ICMPNE = 160;public static final int IF_ICMPLT = 161;public static final int IF_ICMPGE = 162;public static final int IF_ICMPGT = 163;public static final int IF_ICMPLE = 164;public static final int IF_ACMPEQ = 165;public static final int IF_ACMPNE = 166;public static final int GOTO = 167; // goto, goto_wpublic static final int GOTO_W = 200;public static final int JSR = 168; // jsr, jsr_wpublic static final int JSR_W = 201;public static final int RET = 169; // ret, ret_wpublic static final int TBLSW = 170; // tableswitchpublic static final int LKPSW = 171; // lookupswitchpublic static final int RETV = 172; // return value (iret, aret, etc.)public static final int IRETURN = 172;public static final int LRETURN = 173;public static final int FRETURN = 174;public static final int DRETURN = 175;public static final int ARETURN = 176;public static final int RETRN = 177; // return, no valuepublic static final int GETS = 178; // getstaticpublic static final int PUTS = 179; // putstaticpublic static final int GETF = 180; // getfield
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -