目录
1.未归类系列A
此系列暂未归类。
指令码 | 助记符 | 说明 |
0x00 | nop | 什么都不做 |
0x01 |
aconst_null | 将null推送至操作数栈顶 |
2.const系列
- 该系列命令主要负责把简单的数值类型送到栈顶。该系列命令不带参数。注意只把简单的数值类型送到栈 顶时,才使用如下的命令。
- 比如对应int型才该方式只能把-1,0,1,2,3,4,5(分别采用iconst_m1,iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5)送到操作数栈顶。对于int型,其他的数值请使用push系列命令(比如bipush)。
指令码 | 助记符 | 说明 |
0x02 | iconst_m1 | 将int型(-1)推送至操作数栈顶 |
0x03 | iconst_0 | 将int型(0)推送至操作数栈顶 |
0x04 | iconst_1 | 将int型(1)推送至操作数栈顶 |
0x05 | iconst_2 | 将int型(2)推送至操作数栈顶 |
0x06 | iconst_3 | 将int型(3)推送至操作数栈顶 |
0x07 | iconst_4 | 将int型(4)推送至操作数栈顶 |
0x08 | iconst_5 | 将int型(5)推送至操作数栈顶 |
0x09 | lconst_0 | 将long型(0)推送至操作数栈顶 |
0x0a | lconst_1 | 将long型(1)推送至操作数栈顶 |
0x0b | fconst_0 | 将float型(0)推送至操作数栈顶 |
0x0c | fconst_1 | 将float型(1)推送至操作数栈顶 |
0x0d | fconst_2 | 将float型(2)推送至操作数栈顶 |
0x0e | dconst_0 | 将double型(0)推送至操作数栈顶 |
0x0f | dconst_1 | 将double型(1)推送至操作数栈顶 |
3.push系列
- 该系列命令负责把一个整型数字(长度比较小)送到到栈顶。该系列命令有一个 参数,用于指定要送到操作数栈顶的数字。
- 注意该系列命令只能操作一定范围内的整形数值,超出该范围的使用将使用ldc命令系列。
指令码 | 助记符 | 说明 |
0x10 | bipush | 将单字节的常量值(-128~127)推送至操作数栈顶 |
0x11 | sipush | 将一个短整型常量值(-32768~32767)推送至操作数栈顶 |
4.ldc系列
- 该系列命令负责把数值常量或String常量值从常量池中推送至操作数栈顶。
- 该命令后面 需要给一个表示常量在常量池中位置(编号)的参数,
- 哪些常量是放在常量池呢?
- 比如:final static int id=32768;final static float =6.5。
- 对于const系列命令和push系列命令操作范围之外的数值类型常量,都放在常量池中.
- 另外,所有不是通过new创建的String都是放在常量池中的。
指令码 | 助记符 | 说明 |
0x12 | ldc | 将int, float或String型常量值从常量池中推送至操作数栈顶 |
0x13 | ldc_w | 将int, float或String型常量值从常量池中推送至操作数栈顶(宽索引) |
0x14 | ldc2_w | 将long或double型常量值从常量池中推送至操作数栈顶(宽索引) |
5.load系列
5.1 load系列A
- 该系列命令负责把本地变量的送到操作数栈顶。这里的本地变量不仅可以是数值类型, 还可以是引用类型。
- 对于前四个本地变量可以采用iload_0,iload_1,iload_2,iload_3(它们分别表示第 0,1,2,3个整形变量)这种不到参数的简化命令形式。对于第4以上的本地变量将使用iload命令这种形式,在它后面给一参数,以表示 是对第几个(从0开始)本类型的本地变量进行操作。
- 对本地变量所进行的编号,是对所有类型的本地变量进行的(并不按照类型分 类)。
- 对于非静态函数,第一变量是this,即其对于的操作是aload_0.
- 还有函数传入参数也算本地变量,在进行编号时,它是先于函数体的本地变量的。
指令码 | 助记符 | 说明 |
0x15 | iload | 将指定的int型本地变量推送至操作数栈顶 |
0x16 | lload | 将指定的long型本地变量推送至操作数栈顶 |
0x17 | fload | 将指定的float型本地变量推送至操作数栈顶 |
0x18 | dload | 将指定的double型本地变量推送至操作数栈顶 |
0x19 | aload | 将指定的引用类型本地变量推送至操作数操作数栈顶 |
0x1a | iload_0 | 将第一个int型本地变量推送至操作数栈顶 |
0x1b | iload_1 | 将第二个int型本地变量推送至操作数栈顶 |
0x1c | iload_2 | 将第三个int型本地变量推送至操作数栈顶 |
0x1d | iload_3 | 将第四个int型本地变量推送至操作数栈顶 |
0x1e | lload_0 | 将第一个long型本地变量推送至操作数栈顶 |
0x1f | lload_1 | 将第二个long型本地变量推送至操作数栈顶 |
0x20 | lload_2 | 将第三个long型本地变量推送至操作数栈顶 |
0x21 | lload_3 | 将第四个long型本地变量推送至操作数栈顶 |
0x22 | fload_0 | 将第一个float型本地变量推送至操作数栈顶 |
0x23 | fload_1 | 将第二个float型本地变量推送至操作数栈顶 |
0x24 | fload_2 | 将第三个float型本地变量推送至操作数栈顶 |
0x25 | fload_3 | 将第四个float型本地变量推送至操作数栈顶 |
0x26 | dload_0 | 将第一个double型本地变量推送至操作数栈顶 |
0x27 | dload_1 | 将第二个double型本地变量推送至操作数栈顶 |
0x28 | dload_2 | 将第三个double型本地变量推送至操作数栈顶 |
0x29 | dload_3 | 将第四个double型本地变量推送至操作数栈顶 |
0x2a | aload_0 | 将第一个引用类型本地变量推送至操作数栈顶 |
0x2b | aload_1 | 将第二个引用类型本地变量推送至操作数栈顶 |
0x2c | aload_2 | 将第三个引用类型本地变量推送至操作数栈顶</ |