JVM 指令码表解析:开启虚拟机运行的指令指南
2024-02-03 15:17:38
常量入栈指令
-
指令码 0x01:aconst_null
-
操作数:无
-
将 null 值入栈。
-
-
指令码 0x02:iconst_m1
-
操作数:无
-
:将 -1(int)值入栈。
-
-
指令码 0x03:iconst_0
-
操作数:无
-
:将 0(int)值入栈。
-
-
指令码 0x04:iconst_1
-
操作数:无
-
描述:将 1(int)值入栈。
-
-
指令码 0x05:iconst_2
-
操作数:无
-
描述:将 2(int)值入栈。
-
-
指令码 0x06:iconst_3
-
操作数:无
-
描述:将 3(int)值入栈。
-
-
指令码 0x07:iconst_4
-
操作数:无
-
描述:将 4(int)值入栈。
-
-
指令码 0x08:iconst_5
-
操作数:无
-
描述:将 5(int)值入栈。
-
加载指令
-
指令码 0x15:iload
-
操作数:局部变量索引
-
描述:将指定索引的局部变量的值加载到栈顶。
-
-
指令码 0x16:lload
-
操作数:局部变量索引
-
描述:将指定索引的局部变量的值加载到栈顶。
-
-
指令码 0x17:fload
-
操作数:局部变量索引
-
描述:将指定索引的局部变量的值加载到栈顶。
-
-
指令码 0x18:dload
-
操作数:局部变量索引
-
描述:将指定索引的局部变量的值加载到栈顶。
-
-
指令码 0x19:aload
-
操作数:局部变量索引
-
描述:将指定索引的局部变量的值加载到栈顶。
-
存储指令
-
指令码 0x36:istore
-
操作数:局部变量索引
-
描述:将栈顶的值存储到指定索引的局部变量中。
-
-
指令码 0x37:lstore
-
操作数:局部变量索引
-
描述:将栈顶的值存储到指定索引的局部变量中。
-
-
指令码 0x38:fstore
-
操作数:局部变量索引
-
描述:将栈顶的值存储到指定索引的局部变量中。
-
-
指令码 0x39:dstore
-
操作数:局部变量索引
-
描述:将栈顶的值存储到指定索引的局部变量中。
-
-
指令码 0x3a:astore
-
操作数:局部变量索引
-
描述:将栈顶的值存储到指定索引的局部变量中。
-
算术指令
-
指令码 0x60:iadd
-
操作数:无
-
描述:将栈顶的两个 int 值相加,结果入栈。
-
-
指令码 0x61:ladd
-
操作数:无
-
描述:将栈顶的两个 long 值相加,结果入栈。
-
-
指令码 0x62:fadd
-
操作数:无
-
描述:将栈顶的两个 float 值相加,结果入栈。
-
-
指令码 0x63:dadd
-
操作数:无
-
描述:将栈顶的两个 double 值相加,结果入栈。
-
-
指令码 0x64:isub
-
操作数:无
-
描述:将栈顶的两个 int 值相减,结果入栈。
-
-
指令码 0x65:lsub
-
操作数:无
-
描述:将栈顶的两个 long 值相减,结果入栈。
-
-
指令码 0x66:fsub
-
操作数:无
-
描述:将栈顶的两个 float 值相减,结果入栈。
-
-
指令码 0x67:dsub
-
操作数:无
-
描述:将栈顶的两个 double 值相减,结果入栈。
-
比较指令
-
指令码 0x94:if_icmpeq
-
操作数:偏移量
-
描述:比较栈顶的两个 int 值是否相等,相等则跳转到偏移量处执行。
-
-
指令码 0x95:if_icmpne
-
操作数:偏移量
-
描述:比较栈顶的两个 int 值是否不等,不等则跳转到偏移量处执行。
-
-
指令码 0x96:if_icmplt
-
操作数:偏移量
-
描述:比较栈顶的两个 int 值是否小于,小于则跳转到偏移量处执行。
-
-
指令码 0x97:if_icmpgt
-
操作数:偏移量
-
描述:比较栈顶的两个 int 值是否大于,大于则跳转到偏移量处执行。
-
-
指令码 0x98:if_icmple
-
操作数:偏移量
-
描述:比较栈顶的两个 int 值是否小于或等于,小于或等于则跳转到偏移量处执行。
-
-
指令码 0x99:if_icmpge
-
操作数:偏移量
-
描述:比较栈顶的两个 int 值是否大于或等于,大于或等于则跳转到偏移量处执行。
-
跳转指令
-
指令码 0xa7:goto
-
操作数:偏移量
-
描述:无条件跳转到偏移量处执行。
-
-
指令码 0xa8:jsr
-
操作数:偏移量
-
描述:无条件跳转到偏移量处执行,并将当前指令的下一条指令的地址压入栈顶。
-
-
指令码 0xa9:ret
-
操作数:偏移量
-
描述:从当前方法返回,并跳转到调用该方法的指令的下一条指令处执行。
-
调用指令
-
指令码 0xb8:invokevirtual
-
操作数:方法签名
-
描述:调用指定方法的虚方法版本。
-
-
指令码 0xb9:invokespecial
-
操作数:方法签名
-
描述:调用指定方法的特殊方法版本。
-
-
指令码 0xba:invokestatic
-
操作数:方法签名
-
描述:调用指定方法的静态方法版本。
-
返回指令
-
指令码 0xb1:ireturn
-
操作数:无
-
描述:将栈顶的 int 值作为返回值,并从当前方法返回。
-
-
指令码 0xb2:lreturn
-
操作数:无
-
描述:将栈顶的 long 值作为返回值,并从当前方法返回。
-
-
指令码 0xb3:freturn
-
操作数:无
-
描述:将栈顶的 float 值作为返回值,并从当前方法返回。
-
-
指令码 0xb4:dreturn
-
操作数:无
-
描述:将栈顶的 double 值作为返回值,并从当前方法返回。
-
-
指令码 0xb5:areturn
-
操作数:无
-
描述:将栈顶的对象引用作为返回值,并从当前方法返回。
-
异常处理指令
-
指令码 0xa7:athrow
-
操作数:无
-
描述:抛出栈顶的对象作为异常。
-
-
指令码 0xa8: monitorenter
-
操作数:无
-
描述:进入对象监视器。
-
-
指令码 0xa9: monitorexit
-
操作数:无
-
描述:退出对象监视器。
-