好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

JVM指令2

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用于在特定硬件中使用的 语言后门。

查看更多关于JVM指令2的详细内容...

  阅读:32次