zoukankan      html  css  js  c++  java
  • JVM-操作码助记符

      整理如下,用于以后查找:

    Opcode Mnemonics Note
    Constants
    0x00 nop 无动作
    0x01 aconst_null 把 null 推到操作数栈
    0x02 iconst_m1 把 int 常量 –1 推到操作数栈
    0x03 iconst_0 把 int 常量 0 推到操作数栈
    0x04 iconst_1 把 int 常量 1 推到操作数栈
    0x05 iconst_2 把 int 常量 2 推到操作数栈
    0x06 iconst_3 把 int 常量 3 推到操作数栈
    0x07 iconst_4 把 int 常量 4 推到操作数栈
    0x08 iconst_5 把 int 常量 5 推到操作数栈
    0x09 lconst_0 把 long 常量 0 推到操作数栈
    0x0A lconst_1 把 long 常量 1 推到操作数栈
    0x0B fconst_0 把 float 常量 0 推到操作数栈
    0x0C fconst_1 把 float 常量 1 推到操作数栈
    0x0D fconst_2 把 float 常量 2 推到操作数栈
    0x0E dconst_0 把 double 常量 0 推到操作数栈
    0x0F dconst_1 把 double 常量 1 推到操作数栈
    0x10 bipush 把单字节常量(-128~127)推到操作数栈
    0x11 sipush 把 short 常量(-32768~32767)推到操作数栈
    0x12 ldc 把常量池中的int,float,String型常量取出并推到操作数栈
    0x13 ldc_w 把常量池中的int,float,String型常量取出并推到操作数栈(宽索引)
    0x14 ldc2_w 把常量池中的long,double型常量取出并推到操作数栈(宽索引)
    Loads
    0x15 iload 把 int 型局部变量推到操作数栈
    0x16 lload 把 long 型局部变量推到操作数栈
    0x17 fload 把 float 型局部变量推到操作数栈
    0x18 dload 把 double 型局部变量推到操作数栈
    0x19 aload 把引用型局部变量推到操作数栈
    0x1A iload_0 把局部变量第 1 个 int 型局部变量推到操作数栈
    0x1B iload_1 把局部变量第 2 个 int 型局部变量推到操作数栈
    0x1C iload_2 把局部变量第 3 个 int 型局部变量推到操作数栈
    0x1D iload_3 把局部变量第 4 个 int 型局部变量推到操作数栈
    0x1E lload_0 把局部变量第 1 个 long 型局部变量推到操作数栈
    0x1F lload_1 把局部变量第 2 个 long 型局部变量推到操作数栈
    0x20 lload_2 把局部变量第 3 个 long 型局部变量推到操作数栈
    0x21 lload_3 把局部变量第 4 个 long 型局部变量推到操作数栈
    0x22 fload_0 把局部变量第 1 个 float 型局部变量推到操作数栈
    0x23 fload_1 把局部变量第 2 个 float 型局部变量推到操作数栈
    0x24 fload_2 把局部变量第 3 个 float 型局部变量推到操作数栈
    0x25 fload_3 把局部变量第 4 个 float 型局部变量推到操作数栈
    0x26 dload_0 把局部变量第 1 个 double 型局部变量推到操作数栈
    0x27 dload_1 把局部变量第 2 个 double 型局部变量推到操作数栈
    0x28 dload_2 把局部变量第 3 个 double 型局部变量推到操作数栈
    0x29 dload_3 把局部变量第 4 个 double 型局部变量推到操作数栈
    0x2A aload_0 把局部变量第 1 个引用型局部变量推到操作数栈
    0x2B aload_1 把局部变量第 2 个引用型局部变量推到操作数栈
    0x2C aload_2 把局部变量第 3 个引用型局部变量推到操作数栈
    0x2D aload_3 把局部变量第 4 个引用 型局部变量推到操作数栈
    0x2E iaload 把 int 型数组指定索引的值推到操作数栈
    0x2F laload 把 long 型数组指定索引的值推到操作数栈
    0x30 faload 把 float 型数组指定索引的值推到操作数栈
    0x31 daload 把 double 型数组指定索引的值推到操作数栈
    0x32 aaload 把引用型数组指定索引的值推到操作数栈
    0x33 baload 把 boolean或byte型数组指定索引的值推到操作数栈
    0x34 caload 把 char 型数组指定索引的值推到操作数栈
    0x35 saload 把 short 型数组指定索引的值推到操作数栈
    Stores
    0x36 istore 把栈顶 int 型数值存入指定局部变量
    0x37 lstore 把栈顶 long 型数值存入指定局部变量
    0x38 fstore 把栈顶 float 型数值存入指定局部变量
    0x39 dstore 把栈顶 double 型数值存入指定局部变量
    0x3A astore 把栈顶引用型数值存入指定局部变量
    0x3B istore_0 把栈顶 int 型数值存入第 1 个局部变量
    0x3C istore_1 把栈顶 int 型数值存入第 2 个局部变量
    0x3D istore_2 把栈顶 int 型数值存入第 3 个局部变量
    0x3E istore_3 把栈顶 int 型数值存入第 4 个局部变量
    0x3F lstore_0 把栈顶 long 型数值存入第 1 个局部变量
    0x40 lstore_1 把栈顶 long 型数值存入第 2 个局部变量
    0x41 lstore_2 把栈顶 long 型数值存入第 3 个局部变量
    0x42 lstore_3 把栈顶 long 型数值存入第 4 个局部变量
    0x43 fstore_0 把栈顶 float 型数值存入第 1 个局部变量
    0x44 fstore_1 把栈顶 float 型数值存入第 2 个局部变量
    0x45 fstore_2 把栈顶 float 型数值存入第 3 个局部变量
    0x46 fstore_3 把栈顶 float 型数值存入第 4 个局部变量
    0x47 dstore_0 把栈顶 double 型数值存入第 1 个局部变量
    0x48 dstore_1 把栈顶 double 型数值存入第 2 个局部变量
    0x49 dstore_2 把栈顶 double 型数值存入第 3 个局部变量
    0x4A dstore_3 把栈顶 double 型数值存入第 4 个局部变量
    0x4B astore_0 把栈顶 引用 型数值存入第 1 个局部变量
    0x4C astore_1 把栈顶 引用 型数值存入第 2 个局部变量
    0x4D astore_2 把栈顶 引用 型数值存入第 3 个局部变量
    0x4E astore_3 把栈顶 引用 型数值存入第 4 个局部变量
    0x4F iastore 把栈顶 int 型数值存入数组指定索引位置
    0x50 lastore 把栈顶 long 型数值存入数组指定索引位置
    0x51 fastore 把栈顶 float 型数值存入数组指定索引位置
    0x52 dastore 把栈顶 double 型数值存入数组指定索引位置
    0x53 aastore 把栈顶 引用 型数值存入数组指定索引位置
    0x54 bastore 把栈顶 boolean or byte 型数值存入数组指定索引位置
    0x55 castore 把栈顶 char 型数值存入数组指定索引位置
    0x56 sastore 把栈顶 short 型数值存入数组指定索引位置
    Stack
    0x57 pop 把栈顶数值弹出(非long,double数值)
    0x58 pop2 把栈顶的一个long或double值弹出,或弹出2个其他类型数值
    0x59 dup 复制栈顶数值并把数值入栈
    0x5A dup_x1 复制栈顶数值并把数值入栈
    0x5B dup_x2
    0x5C dup2
    0x5D dup2_x1
    0x5E dup2_x2
    0x5F swap 把栈顶端的两个数的值交换
    Math
    0x60 iadd 把栈顶两个 int 型数值相加并将结果入栈
    0x61 ladd 把栈顶两个 long 型数值相加并将结果入栈
    0x62 fadd 把栈顶两个 float 型数值相加并将结果入栈
    0x63 dadd 把栈顶两个 double 型数值相加并将结果入栈
    0x64 isub 把栈顶两个 int 型数值相减并将结果入栈
    0x65 lsub 把栈顶两个 long 型数值相减并将结果入栈
    0x66 fsub 把栈顶两个 float 型数值相减并将结果入栈
    0x67 dsub 把栈顶两个 double 型数值相减并将结果入栈
    0x68 imul 把栈顶两个 int 型数值相乘并将结果入栈
    0x69 lmul 把栈顶两个 long 型数值相乘并将结果入栈
    0x6A fmul 把栈顶两个 float 型数值相乘并将结果入栈
    0x6B dmul 把栈顶两个 double 型数值相乘并将结果入栈
    0x6C idiv 把栈顶两个 int 型数值相除并将结果入栈
    0x6D ldiv 把栈顶两个 long 型数值相除并将结果入栈
    0x6E fdiv 把栈顶两个 float 型数值相除并将结果入栈
    0x6F ddiv 把栈顶两个 double 型数值相除并将结果入栈
    0x70 irem 把栈顶两个 int 型数值模运算并将结果入栈
    0x71 lrem 把栈顶两个 long 型数值模运算并将结果入栈
    0x72 frem 把栈顶两个 float 型数值模运算并将结果入栈
    0x73 drem 把栈顶两个 double 型数值模运算并将结果入栈
    0x74 ineg 把栈顶 int 型数值取负并将结果入栈
    0x75 lneg 把栈顶 long 型数值取负并将结果入栈
    0x76 fneg 把栈顶 float 型数值取负并将结果入栈
    0x77 dneg 把栈顶 double 型数值取负并将结果入栈
    0x78 ishl 把 int 型数左移指定位数并将结果入栈
    0x79 lshl 把 long 型数左移指定位数并将结果入栈
    0x7A ishr 把 int 型数右移指定位数并将结果入栈(有符号)
    0x7B lshr 把 long 型数右移指定位数并将结果入栈(有符号)
    0x7C iushr 把 int 型数右移指定位数并将结果入栈(无符号)
    0x7D lushr 把 long 型数右移指定位数并将结果入栈(无符号)
    0x7E iand 把栈顶两个 int 型数值 按位与 并将结果入栈
    0x7F land 把栈顶两个 long 型数值 按位与 并将结果入栈
    0x80 ior 把栈顶两个 int 型数值 按位或 并将结果入栈
    0x81 lor 把栈顶两个 long 型数值 按或与 并将结果入栈
    0x82 ixor 把栈顶两个 int 型数值 按位异或 并将结果入栈
    0x83 lxor 把栈顶两个 long 型数值 按位异或 并将结果入栈
    0x84 iinc 把指定 int 型增加指定值
    Conversions
    0x85 i2l 把栈顶 int 强转 long 并入栈
    0x86 i2f 把栈顶 int 强转 float 并入栈
    0x87 i2d 把栈顶 int 强转 double 并入栈
    0x88 l2i 把栈顶 long 强转 int 并入栈
    0x89 l2f 把栈顶 long 强转 float 并入栈
    0x8A l2d 把栈顶 long 强转 double 并入栈
    0x8B f2i 把栈顶 float 强转 int 并入栈
    0x8C f2l 把栈顶 float 强转 long 并入栈
    0x8D f2d 把栈顶 float 强转 double 并入栈
    0x8E d2i 把栈顶 double 强转 int 并入栈
    0x8F d2l 把栈顶 double 强转 long 并入栈
    0x90 d2f 把栈顶 double 强转 float 并入栈
    0x91 i2b 把栈顶 int 强转 byte 并入栈
    0x92 i2c 把栈顶 int 强转 char 并入栈
    0x93 i2s 把栈顶 int 强转 short 并入栈
    Comparisons
    0x94 lcmp 比较栈顶两个long 型数值,把结果入栈(-1 or 0 or 1)
    0x95 fcmpl 比较栈顶两个 float 型数值,把结果入栈,若有 NaN,入栈 -1
    0x96 fcmpg 比较栈顶两个 float 型数值,把结果入栈,若有 NaN,入栈 1
    0x97 dcmpl 比较栈顶两个 double 型数值,把结果入栈,若有 NaN,入栈 -1
    0x98 dcmpg 比较栈顶两个 double 型数值,把结果入栈,若有 NaN,入栈 -1
    0x99 ifeq 当栈顶 int 型数值等于0时,跳转
    0x9A ifne 当栈顶 int 型数值不等于0时,跳转
    0x9B iflt 当栈顶 int 型数值小于0时,跳转
    0x9C ifge 当栈顶 int 型数值大于等于0时,跳转
    0x9D ifgt 当栈顶 int 型数值大于0时,跳转
    0x9E ifle 当栈顶 int 型数值小于等于0时,跳转
    0x9F if_icmpeq 比较栈顶两个 int 型数值,等于0时,跳转
    0xA0 if_icmpne 比较栈顶两个 int 型数值,不等于0时,跳转
    0xA1 if_icmplt 比较栈顶两个 int 型数值,小于0时,跳转
    0xA2 if_icmpge 比较栈顶两个 int 型数值,大于等于0时,跳转
    0xA3 if_icmpgt 比较栈顶两个 int 型数值,大于0时,跳转
    0xA4 if_icmple 比较栈顶两个 int 型数值,小于等于0时,跳转
    0xA5 if_acmpeq 比较栈顶两个 引用 型数值,相等时跳转
    0xA6 if_acmpne 比较栈顶两个 引用 型数值,不相等时跳转
    Control
    0xA7 goto 无条件跳转
    0xA8 jsr 跳转指定16bit偏移位置,并将jsr下一条指令地址入栈
    0xA9 ret 返回局部变量指定index指定位置,与jsr,jsr_w配合使用
    0xAA tableswitch switch跳转,case连续
    0xAB lookupswitch switch跳转,case不连续
    0xAC ireturn 从当前方法返回 int
    0xAD lreturn 从当前方法返回 long
    0xAE freturn 从当前方法返回 float
    0xAF dreturn 从当前方法返回 double
    0xB0 areturn 从当前方法返回 对象引用
    0xB1 return 从当前方法返回 void
    References
    0xB2 getstatic 获取类的静态域,并将值入栈顶
    0xB3 putstatic 为类的静态域赋值
    0xB4 getfield 获取类的实例域,并将值入栈顶
    0xB5 putfield 为类的实例域赋值
    0xB6 invokevirtual 调用实例方法
    0xB7 invokespecial 调用父类构造方法,实例初始化方法,私有方法
    0xB8 invokestatic 调用静态方法
    0xB9 invokeinterface 调用接口方法
    0xBA invokedynamic 调用动态链接方法
    0xBB new 创建一个对象,并将引用值入栈
    0xBC newarray 创建一个原始类型数组,并将引用值入栈
    0xBD anewarray 创建一个引用类型数组,并将引用值入栈
    0xBE arraylength 获取数组长度并入栈
    0xBF athrow 抛出栈顶异常
    0xC0 checkcast 检验类型转换
    0xC1 instanceof 检验是否是类的实例,是1入栈,否0入栈
    0xC2 monitorenter 获取对象的monitor,用于同步块或方法
    0xC3 monitorexit 释放对象的monitor,用于同步块或方法
    Extended
    0xC4 wide 扩展访问局部变量表的索引宽度
    0xC5 multianewarray 创建多维数组,并将引用值入栈
    0xC6 ifnull 为 null 时跳转
    0xC7 ifnonnull 非 null 时跳转
    0xC8 goto_w 无条件跳转(宽索引)
    0xC9 jsr_w 跳转指定32bit偏移位置,并将jsr_w下一条指令地址入栈
    Reserved
    0xCA breakpoint 调试时的断点
    0xFE impdep1 用于在特定硬件中使用的语言后门
    0xFF impdep2 用于在特定硬件中使用的语言后门
    作 者:创心coder
    QQ群:361982568
    订阅号:cxcoder
    文章不足之处,还请谅解!本文会不断完善更新,转载请保留出处。如果帮到了您,烦请点赞,以资鼓励。
  • 相关阅读:
    网络通信过程
    路由表转发分析实例
    随机生成MAC地址和IP地址
    zabbix监控LAMP全教程
    linux ssh利用公钥免密登陆
    如果Mysql插入字符始终乱码怎么办?
    Windows 桌面利用 Navicat等工具连接 虚拟机Mysql
    pagefile.sys 虚拟内存
    linux常用命令---------------find
    当你使用Pycharm编译程序的时候,遇到了这个问题,该怎么办?please select a valid interpreter
  • 原文地址:https://www.cnblogs.com/cwane/p/6097838.html
Copyright © 2011-2022 走看看