⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 javaopcode.java

📁 JPC: x86 PC Hardware Emulator. 牛津大学开发的一个纯JAVA的x86系统结构硬件模拟器。
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        case ISTORE_0:
            return 0;
        case ISTORE_1:
            return 1;
        case ISTORE_2:
            return 2;
        case ISTORE_3:
            return 3;
        case LLOAD:
            return code[i+1] + 1;
        case LLOAD_0:
            return 1;
        case LLOAD_1:
            return 2;
        case LLOAD_2:
            return 3;
        case LLOAD_3:
            return 4;
        case LSTORE:
            return code[i+1] + 1;
        case LSTORE_0:
            return 1;
        case LSTORE_1:
            return 2;
        case LSTORE_2:
            return 3;
        case LSTORE_3:
            return 4;
        case IINC:
            return code[i+1];
        case RET:
            return code[i+1];
        default:
            return 0;
        }
    }

    public static int getConstantPoolIndexSize(int code)
    {
        switch(code) {
        case LDC:
            return 1;
            
        case ANEWARRAY:
        case CHECKCAST:
        case GETFIELD:
        case GETSTATIC:
        case INSTANCEOF:
        case INVOKEINTERFACE:
        case INVOKESPECIAL:
        case INVOKESTATIC:
        case INVOKEVIRTUAL:
        case LDC2_W:
        case LDC_W:
        case MULTIANEWARRAY:
        case NEW:
        case PUTFIELD:
        case PUTSTATIC:
            return 2;

        default:
            throw new IllegalStateException();
        }
    }

    public static int getOpcodeLength(int[] code, int i)
    {
        switch(code[i])
        {
        case AALOAD:
        case AASTORE:
        case ACONST_NULL:
        case ALOAD_0:
        case ALOAD_1:
        case ALOAD_2:
        case ALOAD_3:
        case ARETURN:
        case ARRAYLENGTH:
        case ASTORE_0:
        case ASTORE_1:
        case ASTORE_2:
        case ASTORE_3:
        case ATHROW:
        case BALOAD:
        case BASTORE:
        case CALOAD:
        case CASTORE:
        case D2F:
        case D2I:
        case D2L:
        case DADD:
        case DALOAD:
        case DASTORE:
        case DCMPG:
        case DCMPL:
        case DCONST_0:
        case DCONST_1:
        case DDIV:
        case DLOAD_0:
        case DLOAD_1:
        case DLOAD_2:
        case DLOAD_3:
        case DMUL:
        case DNEG:
        case DREM:
        case DRETURN:
        case DSTORE_0:
        case DSTORE_1:
        case DSTORE_2:
        case DSTORE_3:
        case DSUB:
        case DUP2:
        case DUP2_X1:
        case DUP2_X2:
        case DUP:
        case DUP_X1:
        case DUP_X2:
        case F2D:
        case F2I:
        case F2L:
        case FADD:
        case FALOAD:
        case FASTORE:
        case FCMPG:
        case FCMPL:
        case FCONST_0:
        case FCONST_1:
        case FCONST_2:
        case FDIV:
        case FLOAD_0:
        case FLOAD_1:
        case FLOAD_2:
        case FLOAD_3:
        case FMUL:
        case FNEG:
        case FREM:
        case FRETURN:
        case FSTORE_0:
        case FSTORE_1:
        case FSTORE_2:
        case FSTORE_3:
        case FSUB:
        case I2B:
        case I2C:
        case I2D:
        case I2F:
        case I2L:
        case I2S:
        case IADD:
        case IALOAD:
        case IAND:
        case IASTORE:
        case ICONST_0:
        case ICONST_1:
        case ICONST_2:
        case ICONST_3:
        case ICONST_4:
        case ICONST_5:
        case ICONST_M1:
        case IDIV:
        case ILOAD_0:
        case ILOAD_1:
        case ILOAD_2:
        case ILOAD_3:
        case IMUL:
        case INEG:
        case IOR:
        case IREM:
        case IRETURN:
        case ISHL:
        case ISHR:
        case ISTORE_0:
        case ISTORE_1:
        case ISTORE_2:
        case ISTORE_3:
        case ISUB:
        case IUSHR:
        case IXOR:
        case L2D:
        case L2F:
        case L2I:
        case LADD:
        case LALOAD:
        case LAND:
        case LASTORE:
        case LCMP:
        case LCONST_0:
        case LCONST_1:
        case LDIV:
        case LLOAD_0:
        case LLOAD_1:
        case LLOAD_2:
        case LLOAD_3:
        case LMUL:
        case LNEG:
        case LOR:
        case LREM:
        case LRETURN:
        case LSHL:
        case LSHR:
        case LSTORE_0:
        case LSTORE_1:
        case LSTORE_2:
        case LSTORE_3:
        case LSUB:
        case LUSHR:
        case LXOR:
        case MONITORENTER:
        case MONITOREXIT:
        case NOP:
        case POP2:
        case POP:
        case RETURN:
        case SALOAD:
        case SASTORE:
        case SWAP:
            return 1;
        case ALOAD:
        case ASTORE:
        case BIPUSH:
        case DLOAD:
        case DSTORE:
        case FLOAD:
        case FSTORE:
        case ILOAD:
        case ISTORE:
        case LDC:
        case LLOAD:
        case LSTORE:
        case NEWARRAY:
        case RET:
            return 2;
        case ANEWARRAY:
        case CHECKCAST:
        case GETFIELD:
        case GETSTATIC:
        case GOTO:
        case IFEQ:
        case IFGE:
        case IFGT:
        case IFLE:
        case IFLT:
        case IFNE:
        case IFNONNULL:
        case IFNULL:
        case IF_ACMPEQ:
        case IF_ACMPNE:
        case IF_ICMPEQ:
        case IF_ICMPGE:
        case IF_ICMPGT:
        case IF_ICMPLE:
        case IF_ICMPLT:
        case IF_ICMPNE:
        case IINC:
        case INSTANCEOF:
        case INVOKESPECIAL:
        case INVOKESTATIC:
        case INVOKEVIRTUAL:
        case JSR:
        case LDC2_W:
        case LDC_W:
        case NEW:
        case PUTFIELD:
        case PUTSTATIC:
        case SIPUSH:
            return 3;
        case MULTIANEWARRAY:
            return 4;
        case GOTO_W:
        case INVOKEINTERFACE:
        case JSR_W:
            return 5;
        case LOOKUPSWITCH:
            return getLookupSwitchLength(code, i);
        case TABLESWITCH:
            return getTableSwitchLength(code, i);
        case WIDE:
            if (code[i+1] == IINC)
                return 6;
            return 4;
        default:
            // reserved instrs -- shouldn't really be here....
           System.err.println("Java Opcode - getOpcodeLength - reserved instrution!");
            return 1;
        }
    }


    private static int getLookupSwitchLength(int[] code, int i)
    {
        int initPosition = i;
        // skip the zeros
        for(i = (initPosition + 1); i < (initPosition + 5); i++)
            if ((i % 4) == 0)
                break;
        // skip the default byte
        i += 4;
        // read the number of pairs
        int npairs = (code[i] << 24) | (code[i+1] << 16) | (code[i+2] << 8) | (code[i+3]);
        i += 4;
        // skip the pairs
        i += 8 * npairs;

        return i - initPosition;
    }

    private static int getTableSwitchLength(int[] code, int i)
    {
        int initPosition = i;
        // skip the zeros
        for(i = (initPosition + 1); i < (initPosition + 4); i++)
            if ((i % 4) == 0)
                break;
        // skip the default byte
        i += 4;
        // read the lowbyte
        int low = (code[i] << 24) | (code[i+1] << 16) | (code[i+2] << 8) | (code[i+3]);
        i += 4;
        // read the highbyte
        int high = (code[i] << 24) | (code[i+1] << 16) | (code[i+2] << 8) | (code[i+3]);
        i += 4;
        // skip the table
        i += 4 * (high - low + 1);

        return i - initPosition;
    }




/*
        case NOP:
        case ACONST_NULL:
        case ICONST_M1:
        case ICONST_0:
        case ICONST_1:
        case ICONST_2:
        case ICONST_3:
        case ICONST_4:
        case ICONST_5:
        case LCONST_0:
        case LCONST_1:
        case FCONST_0:
        case FCONST_1:
        case FCONST_2:
        case DCONST_0:
        case DCONST_1:
        case BIPUSH:
        case SIPUSH:
        case LDC:
        case LDC_W:
        case LDC2_W:
        case ILOAD:
        case LLOAD:
        case FLOAD:
        case DLOAD:
        case ALOAD:
        case ILOAD_0:
        case ILOAD_1:
        case ILOAD_2:
        case ILOAD_3:
        case LLOAD_0:
        case LLOAD_1:
        case LLOAD_2:
        case LLOAD_3:
        case FLOAD_0:
        case FLOAD_1:
        case FLOAD_2:
        case FLOAD_3:
        case DLOAD_0:
        case DLOAD_1:
        case DLOAD_2:
        case DLOAD_3:
        case ALOAD_0:
        case ALOAD_1:
        case ALOAD_2:
        case ALOAD_3:
        case IALOAD:
        case LALOAD:
        case FALOAD:
        case DALOAD:
        case AALOAD:
        case BALOAD:
        case CALOAD:
        case SALOAD:
        case ISTORE:
        case LSTORE:
        case FSTORE:
        case DSTORE:
        case ASTORE:
        case ISTORE_0:
        case ISTORE_1:
        case ISTORE_2:
        case ISTORE_3:
        case LSTORE_0:
        case LSTORE_1:
        case LSTORE_2:
        case LSTORE_3:
        case FSTORE_0:
        case FSTORE_1:
        case FSTORE_2:
        case FSTORE_3:
        case DSTORE_0:
        case DSTORE_1:
        case DSTORE_2:
        case DSTORE_3:
        case ASTORE_0:
        case ASTORE_1:
        case ASTORE_2:
        case ASTORE_3:
        case IASTORE:
        case LASTORE:
        case FASTORE:
        case DASTORE:
        case AASTORE:
        case BASTORE:
        case CASTORE:
        case SASTORE:
        case POP:
        case POP2:
        case DUP:
        case DUP_X1:
        case DUP_X2:
        case DUP2:
        case DUP2_X1:
        case DUP2_X2:
        case SWAP:
        case IADD:
        case LADD:
        case FADD:
        case DADD:
        case ISUB:
        case LSUB:
        case FSUB:
        case DSUB:
        case IMUL:
        case LMUL:
        case FMUL:
        case DMUL:
        case IDIV:
        case LDIV:
        case FDIV:
        case DDIV:
        case IREM:
        case LREM:
        case FREM:
        case DREM:
        case INEG:
        case LNEG:
        case FNEG:
        case DNEG:
        case ISHL:
        case LSHL:
        case ISHR:
        case LSHR:
        case IUSHR:
        case LUSHR:
        case IAND:
        case LAND:
        case IOR:
        case LOR:
        case IXOR:
        case LXOR:
        case IINC:
        case I2L:
        case I2F:
        case I2D:
        case L2I:
        case L2F:
        case L2D:
        case F2I:
        case F2L:
        case F2D:
        case D2I:
        case D2L:
        case D2F:
        case I2B:
        case I2C:
        case I2S:
        case LCMP:
        case FCMPL:
        case FCMPG:
        case DCMPL:
        case DCMPG:
        case IFEQ:
        case IFNE:
        case IFLT:
        case IFGE:
        case IFGT:
        case IFLE:
        case IF_ICMPEQ:
        case IF_ICMPNE:
        case IF_ICMPLT:
        case IF_ICMPGE:
        case IF_ICMPGT:
        case IF_ICMPLE:
        case IF_ACMPEQ:
        case IF_ACMPNE:
        case GOTO:
        case JSR:
        case RET:
        case TABLESWITCH:
        case LOOKUPSWITCH:
        case IRETURN:
        case LRETURN:
        case FRETURN:
        case DRETURN:
        case ARETURN:
        case RETURN:
        case GETSTATIC:
        case PUTSTATIC:
        case GETFIELD:
        case PUTFIELD:
        case INVOKEVIRTUAL:
        case INVOKESPECIAL:
        case INVOKESTATIC:
        case INVOKEINTERFACE:
        case XXXUNUSEDXXX:
        case NEW:
        case NEWARRAY:
        case ANEWARRAY:
        case ARRAYLENGTH:
        case ATHROW:
        case CHECKCAST:
        case INSTANCEOF:
        case MONITORENTER:
        case MONITOREXIT:
        case WIDE:
        case MULTIANEWARRAY:
        case IFNULL:
        case IFNONNULL:
        case GOTO_W:
        case JSR_W:
        case BREAKPOINT:
        case IMPDEP1:
        case IMPDEP2:
*/

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -