0x59 dup 复制 栈顶数并将复制压入栈顶。 0x5a dup_x1 复制 栈顶数并将两个复制压入栈顶。 0x5b dup_x2 复制 栈顶数并将三个 ( 或两个 ) 复制 压入栈顶。 0x5c dup2 复制 栈顶一个 (long 或 double 类型的 ) 或两个 ( 其它 ) 数 并将复制压入栈顶。 0x5d dup
0x59 dup 复制 栈顶数值并将复制值压入栈顶。
0x5a dup_x1 复制 栈顶数值并将两个复制值压入栈顶。
0x5b dup_x2 复制 栈顶数值并将三个 ( 或两个 ) 复制 值压入栈顶。
0x5c dup2 复制 栈顶一个 (long 或 double 类型的 ) 或两个 ( 其它 ) 数 值并将复制值压入栈顶。
0x5d dup2_x1 dup_x1 指令的双倍版
0x5e dup2_x2 dup_x2 指令的双倍版
0x5f swap 将 栈最顶端的两个数值互换 ( 数 值不能是 long 或 double 类型的 ) 。
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 型 变量增加指定值。
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 型数 值并将结果压入栈顶。
0x94
lcmp
比 较栈顶两 long 型数 值大小 , 并将 结果 (1,0,-1) 压入栈顶
0x95
fcmpl
比 较栈顶两 float 型数 值大小 , 并将 结果 (1,0,-1) 压入栈顶 ; 当其中一个数 值为 “NaN” 时 , 将 -1 压入栈顶。
0x96
fcmpg
比 较栈顶两 float 型数 值大小 , 并将 结果 (1,0,-1) 压入栈顶 ; 当其中一个数 值为 “NaN” 时 , 将 1 压入栈顶。
0x97
dcmpl
比 较栈顶两 double 型数 值大小 , 并将 结果 (1,0,-1) 压入栈顶 ; 当其中一个数 值为 “NaN” 时 , 将 -1 压入栈顶。
0x98
dcmpg
比 较栈顶两 double 型数 值大小 , 并将 结果 (1,0,-1) 压入栈顶 ; 当其中一个数 值为 “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
比 较栈顶两引用型数值 , 当 结果不相等时跳转。
0xa7
goto
无条件跳 转。
0xa8
jsr
跳 转至指定 16 位 offset 位置 , 并将 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 。
0xb2
getstatic
获取指定类的静态域 , 并将其 值压入栈顶。
0xb3
putstatic
为指定的类的静态域赋值。
0xb4
getfield
获取指定类的实例域 , 并将其 值压入栈顶。
0xb5
putfield
为指定的类的实例域赋值。
0xb6
invokevirtual
调用实例方法。
0xb7
invokespecial
调用超类构造方法 , 实例初始化方法 , 私有方法。
0xb8
invokestatic
调用静态方法。
0xb9
invokeinterfac
e
调用接口方法。
0xba
invokedynamic
调用动态链接方法 1 。
0xbb
new
创建一个对象 , 并将其引用 值压入栈顶。
0xbc
newarray
创建一个指定原始类型 ( 如 int 、 float 、 char......) 的数 组 , 并将其引用 值压入栈顶。
0xbd
anewarray
创建一个引用型 ( 如类 , 接口 , 数 组 ) 的数 组 , 并将其引用 值压
入 栈顶。
0xbe
arraylength
获得数组的长度值并压入栈顶。
0xbf
athrow
将 栈顶的异常抛出。
0xc0
checkcast
检验类型转换 , 检验 通 过将抛出 ClassCastException 。
0xc1 instanceof 检验对象是否是指定的类的实例 , 如果是将 1 压入栈顶 , 否 则将 0 压入栈顶。
0xc2 monitorenter 获得对象的 monitor, 用于同步方法或同步 块。
0xc3 monitorexit 释放对象的 monitor, 用于同步方法或同步 块。
0xc4 wide扩展访问局部变量表的索引宽度。
0xc5 multianewarray创建指定类型和指定维度的多维数组 ( 执行该指令时 , 操作 栈中必须包 各 维度的长度值 ), 并将其引用 值压入栈顶。
0xc6 ifnull 为 null 时跳转。
0xc7 ifnonnull 不 为 null 时跳转。
0xc8 goto_w无条件跳 转 ( 宽索引 ) 。
0xc9 jsr_w跳 转至指定 32 位地址偏移量位置 , 并将 jsr_w 下一条指令地址 压入栈顶。
保留指令
0xca breakpoint调试时的断点标志。
0xfe impdep1用于在特定硬件中使用的 语言后门。
0xff impdep1用于在特定硬件中使用的 语言后门。