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 | 用于在特定硬件中使用的语言后门 |
JVM-操作码助记符的更多相关文章
- JVM指令助记符
以下只是JVM指令助记符,关于JVM指令的详细内容请阅读<JVM指令详解> 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dlo ...
- Java SE7虚拟机指令操作码助记符
本文转载自Java SE7 虚拟机指令操作码助记符 导语 在Class文件中,Java方法里的方法体,也就是代表着一个Java源码程序中程序的部分存储在方法表集合的Code属性中.存储在Code属性中 ...
- 004-JVM指令集(指令码、助记符、功能描述)
一.JVM指令助记符 1)操作数栈 变量到操作数栈:iload,iload_,lload,lload_,fload,fload_,dload,dload_,aload,aload_ 操作数栈到变量:i ...
- [三] java虚拟机 JVM字节码 指令集 bytecode 操作码 指令分类用法 助记符
说明,本文的目的在于从宏观逻辑上介绍清楚绝大多数的字节码指令的含义以及分类 只要认真阅读本文必然能够对字节码指令集有所了解 如果需要了解清楚每一个指令的具体详尽用法,请参阅虚拟机规范 指令简介 计算机 ...
- JVM指令集(指令码、助记符、功能描述)(转)
JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈. 指令 ...
- JVM指令集(指令码、助记符、功能描述)
JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式: aconst_null 功能描述: null进栈. 指令 ...
- JAVA JVM助记符
ldc:将int/float/String类型的常量值从常量池中推送至栈顶(栈顶的值是即将要用的) bipush:将单字节(-128 ~ 127)的常量值从常量池中推至栈顶 sipush:将一个短整型 ...
- JVM常量的含义与反编译助记符详解
1.定义一个常量 public class MyTest2 { public static void main(String[] args) { System.out.println(MyParent ...
- jvm字节码助记符
反编译指令 javap -c xxxx.class JVM参数设置 -xx:+<option> 开启option -xx: -<option> ...
随机推荐
- Linux笔记之——Linux关机命令详解(转)
原文连接:http://www.jb51.net/os/RedHat/1334.html 在linux下一些常用的关机/重启命令有shutdown.halt.reboot.及init,它们都可以达到重 ...
- 读《linux内核完全注释》的FAQ
以下只是个人看了<linux内核完全注释>的一点理解,如果有错误,欢迎指正! 1 eip中保存的地址是逻辑地址.线性地址还是物理地址? 这个应该要分情况.eip保存的是下一条要执行的指令地 ...
- T-Sql(四)表关联和视图(view)
今天讲下T-sql中用于查询的表关联和视图,我们平时做项目的时候会遇到一些复杂的查询操作,比如有班级表,学生表,现在要查询一个学生列表,要求把学生所属班级名称也查询出来,这时候简单的select查询就 ...
- 查看nginx配置文件路径
进入nginx安装目录(我的是/usr/local/nginx-1.7.8/) 进入sbin目录,输入 ./nginx -t查看nginx配置文件路径以及该文件语法是否正确 ./nginx -v查看n ...
- android studio 导入有so 文件的项目是,程序崩溃的可能原因
被这玩意坑了2个多小时. ----------------------------------- 由于 android studio 在建项目时,不会自动识别 so 文件,所以在含有so 文件的项目中 ...
- Delphi TListView刷新闪烁问题
应用场景 TListView可以动态选择列并显示而且列宽度也要保存,加载数据ListView会出现N次闪烁 步骤一: 选择要显示列: 点击"确定"按钮,显示下图 步骤二: 界面会出 ...
- SQL Server 2016 SP1 标准版等同企业版?!
上周微软发布了SQL Server的历史性公告:SQL Server 标准版的SP1提供你和企业版一样得功能.你不信的话?可以点击这里. 这改变了整个关系数据库市场,重重打击了Oracle.在今天的文 ...
- 初学Python遇到的问题一二
这篇文章只是学Python最最最基础的部分知识,如果你已经有过python经验,哪怕就一点点经验,或许你都遇到过,但相信这些问题对你来说早已不算问题了,所以请跳过吧,用你的时间去学习更多其他的知识就好 ...
- iOS查看3D效果的手势交互
公司项目中用到的,仿的人家厂子的效果,看起来还是挺高大上的,其实实现起来很简单,是一种伪3D;用手势滑动查看一个商品的3D展示. 在手机上手指左右滑动可以360°无死角查看这个商品,有兴趣的可以下de ...
- AngularJS------认识AngularJS
之前在C#中也经常使用MVC开发模式,对其的使用有一定的了解,但是现在需要学习AngularJS,这是纯前台的JS代码,那么为什么需要学习这个呢,就是想将验证这里全部在前台执行,不需要在后台代码里面出 ...