注意:对于大部分与数据相关的字节码指令
i代表对int类型的数据操作
l代表long类型的数据操作
s代表short类型的数据操作
b代表byte类型的数据操作
c代表char类型的数据操作
f代表float类型的数据操作
d代表double类型的数据操作
a代表reference(引用)类型的数据操作
1.加载和存储指令
加载和存储指令用于将数据从栈帧的局部变量表和操作数栈之间来回传递
- 将本地变量加载到操作数栈的指令(局部变量表->操作数栈):
1.iload,lload,fload,dload,aload后面跟着一个局部变量表的索引值
如iload 1,即表示将局部变量表中索引为1的数据加载到操作数栈中
2.iload_<n>、lload_<n>、fload_<n>、dload_<n>、aload_<n>其中<n>表示局部变量表中的索引(n的取值为0,1,2,3)
如:iload_1:即和iload 1相同
注意:操作byte、char和short类型数据时,用int类型的指令来表示 - 将数值从操作数栈存储到局部变量表中(操作数栈->局部变量表)
1.istore、lstrore、fstore、dstore、astore:后面跟着一个局部变量表的索引值,表示将操作数栈栈顶的数据存入到指定的索引的位置
如:istore 1,表示将操作数栈栈顶数据存储到局部变量表索引为1的位置
2.istore_<n>、lstore_<n>、fstore_<n>、dstore_<n>、astore_<n>其中<n>表示局部变量表中的索引(n的取值为0,1,2,3)
如:istore_1,即和istore 1相同 - 加载一个常量到操作数栈中
| bipush | 将-128~127的数值常量从常量池加载至栈顶(包括-128和127,不包括0,1,2,3,4,5,它们可以通过指令iconst_0指令加载) |
| sipush | 将-32768~32767的数值常量,即short类型的数值常量加载至栈顶(不包括-128~127) |
| ldc | 将int、float或String类型的常量从常量池中加载至栈顶 |
| ldc_w | 将int、float或String类型的常量从常量池中加载至栈顶(宽索引) |
| ldc2_w | 将long或者double类型常量值从常量池中加载至栈顶(宽索引) |
| aconst_null | 将null加载至栈顶 |
| iconst_m1 | 将int类型-1加载至栈顶 |
| iconst_<i> | 将int类型<i>加载至栈顶,即iconst_0,表示加载int类型的0到栈顶(i=0,1,2,3,4,5) |
| lconst_<l> | 将long类型<l>加载至栈顶,即lconst_0,表示加载long类型的0到栈顶(i=0,1) |
| fconst_<f> | 将float类型<f>加载至栈顶,即fconst_0,表示加载float类型的0到栈顶(i=0,1,2) |
| dconst_<d> | 将double类型<d>加载至栈顶,即dconst_0,表示加载double类型的0到栈顶(i=0,1) |

版权声明:本文为wjy160925原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。