本表内容来自《Java虚拟机规范(Java SE 8 版)》第7章

操作码助记码指令含义
常量00x00nop什么都不做
10x01aconst_null将null推送至栈顶
20x02iconst_ml将int类型-1推送至栈顶
30x03iconst_0将int类型0推送至栈顶
40x04iconst_1将int类型1推送至栈顶
50x05iconst_2将int类型2推送至栈顶
60x06iconst_3将int类型3推送至栈顶
70x07iconst_4将int类型4推送至栈顶
80x08iconst_5将int类型5推送至栈顶
90x09lconst_0将long类型0推送至栈顶
100x0alconst_1将long类型1推送至栈顶
110x0bfconst_0将float类型0推送至栈顶
120x0cfconst_1将float类型1推送至栈顶
130x0dfconst_2将float类型2推送至栈顶
140x0edconst_0将double类型0推送至栈顶
150x0fdconst_1将double类型1推送至栈顶
160x10bipush将单字节的常量值(-128~127)推送至栈顶
170x11sipush将一个短整类型常量值(-32768~32767) 推送至栈顶
180x12ldc将int、float或String类型常量值从常量池中推送至栈顶
190x13ldc_w将int、float 或String类型常量值从常量池中推送至栈顶(宽索引) 
200x14ldc2_w将long或double类型常量值从常量池中推送至栈顶(宽索引)
加载210x15iload将指定的int类型本地变量推送至栈顶
220x16lload将指定的long类型本地变量推送至栈顶
230x17fload将指定的float类型本地变量推送至栈顶
240x18dload将指定的double类型本地变量推送至栈顶
250x19aload将指定的引用类型本地变量推送至栈顶
260xlaiload_0将第1个int类型本地变量推送至栈顶
270x1biload_1将第2个int类型本地变量推送至栈顶
280x1ciload_2将第3个int类型本地变量推送至栈顶
290xldiload_3将第4个int类型本地变量推送至栈顶
300xlelload_0将第1个long类型本地变量推送至栈顶
310x1flload_1将第2个long类型本地变量推送至栈顶
320x20lload_2将第3个long类型本地变量推送至栈顶
330x21lload_3将第4个long类型本地变量推送至栈顶
340x22fload_0将第1个float类型本地变量推送至栈顶
350x23fload_1将第2个float类型本地变量推送至栈顶
360x24fload_2将第3个float类型本地变量推送至栈顶
370x25fload_3将第4个float类型本地变量推送至栈顶
380x26dload_0将第1个double类型本地变量推送至栈顶
390x27dload_1将第2个double类型本地变量推送至栈顶
400x28dload_2将第3个double类型本地变量推送至栈顶
410x29dload_3将第4个double类型本地变量推送至栈顶
420x2aaload_0将第1个引用类型本地变量推送至栈顶
430x2baload_1将第2个引用类型本地变量推送至栈项
440x2caload_2将第3个引用类型本地变量推送至栈顶
450x2daload_3将第4个引用类型本地变量推送至栈顶
460x2eiaload将int类型数组的指定元素推送至栈顶
470x2flaload将long类型数组的指定元素推送至栈顶
480x30faload将float类型数组的指定元素推送至栈顶
490x31daload将double类型数组的指定元素推送至栈顶
500x32aaload将引用类型数组的指定元素推送至栈顶
510x33baload将boolean或byte类型数组的指定元素推送至栈顶
520x34caload将char类型数组的指定元素推送至栈顶
530x35saload将short类型数组的指定元素推送至栈顶
存储540x36istore将栈顶int类型数值存入指定本地变量
550x37lstore将栈顶long类型数值存人指定本地变量
560x38fstore将栈顶float类型数值存人指定本地变量
570x39dstore将栈顶double类型数值存人指定本地变量
580x3aastore将栈顶引用类型数值存人指定本地变量
590x3bistore_0将栈顶int类型数值存人第1个本地变量
600x3cistore_1将栈顶int类型数值存入第2个本地变量
610x3distore_2将栈顶int类型数值存人第3个本地变量
620x3eistore_3将栈顶int类型数值存人第4个本地变量
630x3flstore_0将栈顶long类型数值存人第1个本地变量
640x40lstore_1将栈顶long类型数值存人第2个本地变量
650x41lstore_2将栈顶long类型数值存人第3个本地变量
660x42lstore_3将栈顶long类型数值存人第4个本地变量
670x43fstore_0将栈顶float类型数值存人第1个本地变量
680x44fstore_1将栈顶float类型数值存人第2个本地变量
690x45fstore_2将栈顶float类型数值存人第3个本地变量
700x46fstore_3将栈顶float类型数值存人第4个本地变量
710x47dstore_0将栈顶double类型数值存人第1个本地变量
720x48dstore_1将栈顶double类型数值存人第2个本地变量
730x49dstore_2将栈顶double类型数值存人第3个本地变量
740x4adstore_3将栈顶double类型数值存人第4个本地变量
750x4bastore_0将栈顶引用类型数值存入第1个本地变量
760x4castore_1将栈顶引用类型数值存人第2个本地变量
770x4dastore_2将栈顶引用类型数值存入第3个本地变量
780x4eastore_3将栈顶引用类型数值存入第4个本地变量
790x4fiastore将栈顶int类型数值存人指定数组的指定索引位置
800x50lastore将栈顶long类型数值存人指定数组的指定索引位置
810x51fastore将栈顶float类型数值存人指定数组的指定索引位置
820x52dastore将栈顶double类型数值存人指定数组的指定索引位置
830x53uastore将栈顶引用类型数值存人指定数组的指定索引位置
840x54bastore将栈顶boolean或byte类型数值存人指定数组的指定索引位置
850x55castore将栈顶char类型数值存人指定数组的指定索引位置
860x56sastore将栈顶short类型数值存人指定数组的指定索引位置
870x57pop将栈顶数值弹出( 数值不能是long或double类型的)
880x58pop2将栈顶的一个long或double类型的数值或两个其他类型的数值弹出
890x59dup复制栈顶数值并将复制值压人栈顶
900x5adup_x1复制栈顶值并将其插人栈顶那两个值的下面
910x5bdup_x2复制栈顶值并将其插人栈顶那两个或三个值的下面
920x5cdup2复制栈顶的一个long或double类型的值,或两个其他类型的值,并将其压人栈顶
930x5ddup2_x1复制栈顶的一个或两个值,并将其插人栈顶那两个或三个值的下面
940x5edup2_x2复制栈顶的一个或两个值,并将其插人栈顶那两个、三个或四个值的下面
950x5fswap将栈顶的两个数值互换(数值不能是long或double类型的)
数学960x60iadd将栈顶两int类型数值相加并将结果压人栈顶
970x61ladd将栈顶两long类型数值相加并将结果压人栈顶
980x62fadd将栈顶两float类型数值相加并将结果压人栈顶
990x63dadd将栈顶两double类型数值相加并将结果压人栈顶
1000x64isub将栈顶两int类型数值相减并将结果压人栈顶
1010x65lsub将栈顶两long类型数值相减并将结果压人栈顶
1020x66fsub将栈顶两float类型数值相减并将结果压人栈顶
1030x67dsub将栈顶两double类型数值相减并将结果压人栈顶
1040x68imul将栈顶两int类型数值相乘并将结果压人栈顶
1050x69lmul将栈顶两long类型数值相乘并将结果压人栈顶
1060x6afmul将栈顶两float类型数值相乘并将结果压人栈顶
1070x6bdmul将栈顶两double类型数值相乘并将结果压人栈顶
1080x6cidiv将栈顶两int类型数值相除并将结果压人栈顶
1090x6dldiv将栈顶两long类型数值相除并将结果压人栈顶
1100x6efdiv将栈顶两float类型数值相除并将结果压人栈顶
1110x6fddiv将栈顶两double类型数值相除并将结果压人栈顶
1120x70irem将栈顶两int类型数值作取模运算并将结果压人栈顶
1130x71lrem将栈顶两long类型数值作取模运算并将结果压人栈顶
1140x72frem将栈顶两float类型数值作取模运算并将结果压人栈顶
1150x73drem将栈顶两double类型数值作取模运算并将结果压人栈顶
1160x74ineg将栈顶int类型数值取负并将结果压入栈项
1170x75lneg将栈顶long类型数值取负并将结果压人栈顶
1180x76fineg将栈顶float类型数值取负并将结果压人栈顶
1190x77dneg将栈顶double类型数值取负并将结果压人栈顶
1200x78ishl将int类型数值左移位指定位数并将结果压人栈项
1210x79lshl将long类型数值左移位指定位数并将结果压人栈顶
1220x7aishr将int类型数值(有符号)右移位指定位数并将结果压入栈顶
1230x7blshr将long类型数值(有符号)右移位指定位数并将结果压入栈顶
1240x7ciushr将int类型数值(无符号)右移位指定位数并将结果压入栈顶
1250x7dlushr将long类型数值(无符号)右移位指定位数并将结果压入栈顶
1260x7eiand将栈顶两int类型数值作“按位与”并将结果压人栈顶
1270x7fland将栈顶两long类型数值作“按位与” 并将结果压人栈顶
1280x80ior将栈顶两int类型数值作“按位或”并将结果压人栈项
1290x81lor将栈顶两long类型数值作“按位或”并将结果压人栈顶
1300x82ixor将栈顶两int类型数值作“按位异或”并将结果压人栈顶
转换1310x83lxor将栈顶两long类型数值作“按位异或”并将结果压人栈顶
1320x84iinc将指定int类型变量增加指定值(i++,i--, i+=2)
1330x85i2l将栈顶int类型数值强制转换成long类型数值并将结果压入栈顶
1340x86i2f将栈顶int类型数值强制转换成float类型数值并将结果压入栈顶
1350x87i2d将栈顶int类型数值强制转换成double类型数值并将结果压入栈顶
1360x88l2i将栈顶long类型数值强制转换成int类型数值并将结果压入栈顶
1370x89l2f将栈顶long类型数值强制转换成float类型数值并将结果压入栈顶
1380x8al2d将栈顶long类型数值强制转换成double类型数值并果压入栈顶
1390x8bf2i将栈顶float类型数值强制转换成int类型数值并将结果压入栈顶
1400x8cf2l将栈顶float类型数值强制转换成long类型数值并将结果压入栈顶
1410x8df2d将栈顶float类型数值强制转换成double类型数值并果压入栈顶
1420x8ed2i将栈顶double类型数值强制转换成int类型数值并将果压入栈顶
1430x8fd2l将栈顶double类型数值强制转换成long类型数值并果压入栈顶
1440x90d2f将栈顶double类型数值强制转换成float类型数值并果压入栈顶
1450x91i2b将栈顶int类型数值强制转换成byte类型数值并将结果压入栈顶
比较1460x92i2c将栈顶int类型数值强制转换成char类型数值并将结果压入栈顶
1470x93i2s将栈顶int类型数值强制转换成short类型数值并将结果压入栈顶
1480x94lcmp比较栈顶两long类型数值大小,并将结果( 1, 0, -1)压入栈顶
1490x95fcmpl比较栈顶两float类型数值大小,并将结果(1, 0, -1)压入栈顶;当其中-一个数值为“NaN"时,将-1压入栈顶
1500x96fcmpg比较栈顶两float类型数值大小,并将结果(1,0, -1)压入栈顶;当其中-一个数值为“NaN"时,将1压入栈顶
1510x97dcmpl比较栈顶两double类型数值大小,并将结果(1,0,-1)压入栈顶;当其中-一个数值为“NaN"时,将-1压入栈顶
1520x98dcmpg比较栈顶两double类型数值大小,并将结果(1.0,-1)压入栈顶;当其中一个数值为“NaN" 时,将1压入栈顶
1530x99ifeq当栈顶int类型数值等于0时跳转
1540x9aifne当栈顶int类型数值不等于0时跳转
1550x9bjft当栈顶int类型数值小于0时跳转
1560x9cifge当栈顶int类型数值大于等于0时跳转
1570x9difgt当栈顶int类型数值大于0时跳转
1580x9eifle当栈顶int类型数值小于等于0时跳转
1590x9fif_icmpeq比较栈顶两int类型数值大小,当前者等于后者时跳转
1600xa0f_icmpne比较栈顶两int类型数值大小,当前者不等于后者时跳转
1610xa1if_icmplt比较栈顶两int类型数值大小,当前者小于后者时跳转
1620xa2if_icmpge比较栈顶两int类型数值大小,当前者大于等于后者时跳转
1630xa3if_icmpgt比较栈顶两int类型数值大小,当前者大于后者时跳转
1640xa4if_icmple比较栈顶两int类型数值大小,当前者小于等于后者时跳转
控制1650xa5if_acmpeq比较栈顶两引用类型数值,当结果相等时跳转
1660xa6if_acmpne比较栈顶两引用类型数值,当结果不相等时跳转
1670xa 7goto无条件跳转
1680xa8jsr跳转至指定16位offset位置,并将jsr下一条指令地址压入栈顶
1690xa9ret返回至由指定的局部变量所给出的指令位置(一般与jsr、jsr_w联合使用)
1700xaatableswitch用于switch条件跳转,case值连续(变长指令)
1710xablookupswitch用于switch条件跳转,case 值不连续(变长指令)
1720xacireturn从当前方法返回int
1730xadlreturn从当前方法返回long
1740xaefreturn从当前方法返回float
1750xafdreturn从当前方法返回double
引用1760xb0areturn从当前方法返回对象引用
1770xb1return从当前方法返回void
1780xb2getstatic获取指定类的静态字段,并将其值压人栈顶
1790xb3putstatic为指定类的静态字段赋值
1800xb4getfield获取指定类的实例字段,并将其值压人栈顶
1810xb5pufield为指定类的实例字段赋值
1820xb6invokevirtual调用实例方法
1830xb7invokespecial调用父类方法、实例初始化方法、私有方法
1840xb8invokestatic调用静态方法
1850xb9invokeinterface调用接口方法
1860xbainvokedynamic调用动态链接方法
1870xbbnew创建一个对象,并将其引用值压人栈顶
1880xbcnewarray创建一个指定原始类型(如int、float、char等)的数组,并将其引用值压人栈顶
1890xbdanewarray创建一个引用型(如类、接口、数组)的数组,并将其引用值压人栈顶
1900xbearraylength获得数组的长度值并压人栈顶
1910xbfathrow将栈顶的异常抛出
1920xc0checkcast检验类型转换,检验未通过将抛出ClassCastException
1930xc1instanceof检验对象是否是指定类的实例,如果是,就将1压人栈顶,否则将0压人栈顶
扩展1940xc2monitorenter获得对象的锁,用于实现同步块
1950xc3monitorexit释放对象的锁,用于实现同步块
1960xc4wide扩展本地变量索引的宽度
1970xc5multianewarray创建指定类型和指定维度的多维数组(执行该指令时,操作栈中必须包含各维度的长度值),并将其引用值压人栈项
1980xc6ifnull为null时跳转
1990xc7ifnonnull不为null时跳转
2000xc8goto_w无条件跳转(宽索引)
2010xc9jsr_w跳转至指定32位offset位置,并将jsr_w下一条指令地址压人栈顶
保留字段2020xcabreakpoint调试时的断点标记
2540xfeimpdep1为特定软件而预留的语言后门
2550xffimpdep2为特定硬件而预留的语言后门