「Java」- 虚拟机指令

iconst_<i>

「int型值」推至「栈顶」

Forms
iconst_m1 = 2 (0x2)
iconst_0 = 3 (0x3)
iconst_1 = 4 (0x4)
iconst_2 = 5 (0x5)
iconst_3 = 6 (0x6)
iconst_4 = 7 (0x7)
iconst_5 = 8 (0x8)

Operand Stack
… →
…, <i>

istore 0x36

「栈顶int型值」存入指定「本地变量」

Format
istore
index

Operand Stack
…, value →

istore_<n>

「栈顶int型值」存入「第n+1个本地变量」

Forms
istore_0 = 59 (0x3b)
istore_1 = 60 (0x3c)
istore_2 = 61 (0x3d)
istore_3 = 62 (0x3e)

Operand Stack
…, value →

iload 0x15

将指定的「int类型本地变量」推至「栈顶」

iload_<n>

将索引为「n」「int型本地变量」推至「栈顶」

Forms
iload_0 = 26 (0x1a)
iload_1 = 27 (0x1b)
iload_2 = 28 (0x1c)
iload_3 = 29 (0x1d)

Operand Stack
… →
…, value

ixor 0x82

将栈顶两int型数值作“按位异或”(value1 ~ value2),然后将结果压入栈顶

Operand Stack
…, value1, value2 →
…, result

iinc 0x84

格式:iinc index const
将指定int型变量增加指定值(i++, i–, i+=2)

Operand Stack
No change

i2b 0x91

将栈顶int型数值强制转换成byte型数值并将结果压入栈顶

i2c 0x92

将栈顶int型数值强制转换成char型数值并将结果压入栈顶

Operand Stack
…, value →
…, result

i2s 0x93

将栈顶int型数值强制转换成short型数值并将结果压入栈顶

instanceof 0xc1

检验对象是否是指定的类的实例,如果是将1压入栈顶,否则将0压入栈顶

i2l 0x85

将栈顶int型数值强制转换成long型数值并将结果压入栈顶

i2f 0x86

将栈顶int型数值强制转换成float型数值并将结果压入栈顶

i2d 0x87

将栈顶int型数值强制转换成double型数值并将结果压入栈顶

iaload 0x2e

将int型数组指定索引的值推至栈顶

iastore 0x4f

将栈顶int型数值存入指定数组的指定索引位置

ireturn 0xac

从当前方法返回int类型值

Format
ireturn

Operand Stack
…, value →
[empty]

ior 0x80

将栈顶两int型数值作“按位或”并将结果压入栈顶

iand 0x7e

将栈顶两int型数值作“按位与”并将结果压入栈顶

iushr 0x7c

将int型数值右(无符号)移位指定位数并将结果压入栈顶

ishl 0x78

将int型数值左移位指定位数并将结果压入栈顶

ishr 0x7a

将int型数值右(符号)移位指定位数并将结果压入栈顶

ineg 0x74

将栈顶int型数值取负并将结果压入栈顶

iadd 0x60

将栈顶两int型数值相加并将结果压入栈顶

isub 0x64

将栈顶两int型数值相减并将结果压入栈顶

imul 0x68

将栈顶两int型数值相乘并将结果压入栈顶

idiv 0x6c

将栈顶两int型数值相除并将结果压入栈顶

irem 0x70

将栈顶两int型数值作取模运算,并将结果压入栈顶。
用靠近栈底的数值对模以