目录
官方说明是jvms14.pdf
nop
0x00 无操作
处理栈
说明 | String | int | float | boolean | char | short | long | double | |
xconst_n x类型的n进栈 | 0x01 aconst_null null进栈 | 0x02 iconst_m1 -1进栈 | |||||||
0x03 iconst_0 | 0x0B fconst_0 | 0x09 lconst_0 | 0x0E dconst_0 | ||||||
0x04 iconst_1 | 0x0C fconst_1 | 0x0A lconst_1 | 0x0F dconst_1 | ||||||
0x05 iconst_2 | 0x0D fconst_2 | ||||||||
0x06 iconst_3 | |||||||||
0x07 iconst_4 | |||||||||
0x08 iconst_5 5进栈 | |||||||||
ldc | 0x12 ldc 将常量值从常量池推栈顶 | ||||||||
0x13 ldc_w将常量值从常量池推栈顶(宽索引) | 0x14 ldc2_w 将常量值从常量池推栈顶 | ||||||||
tload [index] 将局部变量进栈 | 0x19 aload 将index执行局部变量进栈 | 0x15 iload | 0x17 fload | 0x16 lload | 0x18 dload | ||||
tload_n 将第n个t形局部变量进栈 | 0x2A aload_0 | 0x1A iload_0 | 0x22 fload_0 | 0x1E lload_0 | 0x26 dload_0 | ||||
0x2B aload_1 | 0x1B iload_1 | 0x23 fload_1 | 0x1F lload_1 | 0x27 dload_1 | |||||
0x2C aload_2 | 0x1C iload_2 | 0x24 fload_2 | 0x20 lload_2 | 0x28 dload_2 | |||||
0x2D aload_3 | 0x1D iload_3 | 0x25 fload_2 | 0x21 lload_3 | 0x29 dload_3 | |||||
taload 将t形数组第index值进栈 | 0x32 aaload | 0x2E iaload | 0x30 faload | 0x33 baload | 0x34 caload | 0x35 saload | 0x2F laload | 0x31 daload | |
tstore 将栈顶数值存入局部变量 | 0x3A astore | 0x36 istore | 0x38 fstore | 0x37 lstore | 0x39 dstore | ||||
tstore_n 将栈顶存入第n个局部变量 | 0x4B astore_0 | 0x3B istore_0 | 0x43 fstore_0 | 0x3F lstore_0 | 0x47 dstore_0 | ||||
0x4C astore_1 | 0x3C istore_1 | 0x44 fstore_1 | 0x40 lstore_1 | 0x48 dstore_1 | |||||
0x4D astore_2 | 0x3D istore_2 | 0x45 fstore_2 | 0x41 lstore_2 | 0x49 dstore_2 | |||||
0x4E astore_3 | 0x3E istore_3 | 0x46 fstore_3 | 0x42 lstore_3 | 0x4A dstore_3 | |||||
tastore 将栈顶数值存入数组 | 0x53 aastore | 0x4F iastore | 0x51 fastore | 0x54 bastore | 0x55 castore | 0x56 sastore | 0x50 lastore | 0x52 dastore | |
pop | 0x57 pop 栈顶出栈 | ||||||||
0x58 pop2 栈顶一个(long/double)/两个(其他类型)出栈 | |||||||||
dup | 0x59 dup 复制栈顶并进栈 | ||||||||
0x5A dup_x1 复制栈顶并插入栈中(必须看官网文档) | |||||||||
0x5B dup_x2 复制栈顶并插入栈中(必须看官网文档) | |||||||||
0x5C dup2 | |||||||||
0x5D dup2_x1 | |||||||||
0x5E dup2_x2 | |||||||||
swap | 0x5F swap 交换栈顶两个数值 | ||||||||
cmp | 0x95 fcmpl 一个为NaN则为-1 | 0x94 lcmp比较栈顶 | 0x97 dcmpl 一个为NaN则为-1 | ||||||
0x96 fcompg 一个为NaN则为1 | 0x98 dcmpg | ||||||||
算数运算
i | f | l | d | |
tadd 栈顶两数值相加并进栈(原数消失) | iadd 0x60 | fadd 0x62 | ladd 0x61 | dadd 0x63 |
tsub(栈顶是减数) | isub 0x64 | fsub 0x66 | lsub 0x65 | dsub 0x67 |
tmul | imul 0x68 | fmul 0x6A | lmul 0x69 | dmul 0x6B |
tdiv(遵循IEEE规范) | 0x6C idiv | 0x6E fdiv | 0x6D ldiv | 0x6F ddiv |
trem(取模) | ||||
tneg(取相反数) | ||||
0x84 iinc 自增1 |
位运算
tshl(左移) |
tshr(带符号右移>>) |
tushr(>>>) |
tand(按位与) |
tor(按位或) |
txor(按位异或) |
类型装换
i | l | f | d | |
i | l2i 0x88 | f2i 0x8B | d2i 0x8E | |
l | i2l 0x85 | f2l 0x8C | d2l 0x8F | |
f | i2f 0x86 | l2f 0x89 | d2f 0x90 | |
d | i2d 0x87 | l2d 0x8A | 0x8D | |
b | i2b 0x91 | |||
c | i2c 0x92 | |||
s | i2s 0x93 |
方法调用
invokevitual
invokeinterface
invokespecial:调用不会被重写的方法(私有方法,初始化方法,父类方法)
invokestatic:调用静态方法