操作码1:栈和局部变量操作
来源:互联网 发布:淘宝不能缴纳保证金吗 编辑:程序博客网 时间:2024/06/05 18:55
int和float都是一个字长的值,Java栈的每个位置的长度都是一个字长(至少32位宽),每当一个int或者float类型被压入栈时,它都将占据一个位置。
iconst_ml 将int类型值-1压入栈
iconst_0 将int类型值0压入栈
iconst_1 将int类型值1压入栈
iconst_2将int类型值2压入栈
iconst_3 将int类型值3压入栈
iconst_4将int类型值4压入栈
iconst_5 将int类型值5压入栈
fconst_0将float类型值0压入栈
fconst_1将float类型值1压入栈
fconst_2 将float类型值2压入栈
long和double类型值是64位长度的值,每当一个long或者double类型的值压入栈时,都将占据2个位置
lconst_0将long类型值0压入栈
lconst_1将long类型值1压入栈
dconst_0将double类型值0压入栈
dconst_1将double类型值1压入栈
空对象处理
aconst_null将空(null)对象引用压入栈
byte或者short类型在压入栈之前被扩展成int类型值
bipush byte1 将byte1转换为int类型,然后压入栈
sipush byte1,byte2将byte1和byte2转换为int类型,然后压入栈
常量池入口压入栈
常量池索引是一个无符号值,它在字节码流中直接跟随在操作码后面,ldc和ldc_w把一个字长的项压入栈,该项或者是一个int类型,float类型的值,或者是一个String类型的对象引用
ldc indexbyte1 从由indexbyte1指向的常量池入口取出一个字长的值,然后压入栈
ldc_w indexbyte1,indexbyte2 从由indexbyte1和indexbyte2指向的常量池入口取出一个字长的值,然后压入栈
ldc1_w indexbyte1,indexbyte2 从由indexbyte1和indexbyte2指向的常量池入口中取出两个字长的值,然后压入栈
通用栈操作
nop 不做任何操作
pop从操作数栈中弹出栈顶部的一个字
pop2从操作数栈中弹出最顶端的两个字
swap交换栈顶部的两个字
dup复制栈顶部的一个字
dup2复制栈顶部的两个字
dup_x1复制栈顶的一个字,并将复制内容及原来弹出的两个字长的内容压入栈
dup_x2复制栈顶的一个字,并将复制内容及原来弹出的三个字长的内容压入栈
dup2_x1复制操作数栈的两个字,并将复制内容及原来弹出的三个字长的内容压入栈
dup2_x2复制操作数栈的两个字,并将复制内容及原来弹出的四个字长的内容压入栈
将一个字长的局部变量压入栈
iload videx将为之为vindex的int类型局部变量压入栈
iload_0将位置为0的int类型局部变量压入栈
iload_1将位置为1的int类型局部变量压入栈
iload_2将位置为2的int类型局部变量压入栈
iload_3将位置为3的 int类型局部变量压入栈
fload vindex将位置为vindex的float类型局部变量压入栈
fload_0将位置为0的float类型局部变量压入栈
fload_1将位置为1的flaot类型局部变量压入栈
fload_2将位置为2的float类型局部变量压入栈
fload_3将位置为3的float类型局部变量压入栈
两个字长的局部变量
lload vindex 将位置vindex和vindex+1的long类型压入栈
lload_0 0和1
lload_1 1和2
lload_2 2和3
lload_3 3和4
dload vindex 将位置vindex和vindex+1的double类型局部变量压入栈
引用变量
aload vindex 将位置为vindex的对象局部变量压入栈
aload_0
aload_1
aload_2
aload_3
弹出栈顶部元素,将其赋给局部变量
istore vindex从栈中弹出int类型值,然后将其存到位置为vindex的局部变量中
istore_0从栈中弹出int类型值,然后保存到位置为0的局部变量中
istore_1
istore_2
istore_3
fstore vindex
fstore_0
fstore_1
fstore_2
fstore_3
lstore vindex从栈中弹出long类型值,然后将其存在位置为vindex和vindex+1的局部变量中
lstore_0
lstore_1
lstore_2
dstore
dstore_0
dstore_1
dstore_2
dstore_3
astore vindex从栈中弹出对象引用,然后将其存在位置为vindex的局部变量中
astore_0
astore_1
astore_2
astore_3
wide 无符号8位局部变量索引(普通指令后的索引),把方法中局部变量数限制在256以下,一条单独的wide的指令可以将8位的索引再扩展8位,这样就可以把对局部变量扩展到65536,跟随在wide操作码和修改过的操作码之后的两个字节组成指向局部变量的16位无符号索引
wide iload indexbyte1,indexbyte2从局部变量位置为index的地方取出int类型值,压入栈
wide lload
wide fload
wide dload
wide aload
wide istore从栈中弹出int类型值,然后将其压入位置为index的局部变量中
wide lstore
wide fstore
wide dstore
wide astore
- 操作码1:栈和局部变量操作
- Java栈和局部变量操作
- Java栈和局部变量操作(一)
- Java栈和局部变量操作(二)
- Java栈和局部变量操作(二)
- Java栈和局部变量操作(一)
- Java栈和局部变量操作(一)
- Java栈和局部变量操作(一)
- 全局变量和局部变量同名时操作
- 静态局部变量和后增操作符
- 关于局部指针变量和数组的操作返回值
- 临时变量,局部变量的return操作
- 临时变量,局部变量的return操作
- 《深入Java虚拟机学习笔记》- 第10章 栈和局部变量操作
- 《深入java虚拟机》学习笔记(第十章 栈和局部变量操作)
- Java多线程操作局部变量与全局变量
- 5.3.1成员变量和局部变量
- 解析C++汇编代码-局部变量空间分配及程序栈操作
- fedora传输文件出现权限问题
- TOC、LEAN、SIX SIGMA的本质区别以及改善效果
- TortoiseSVN的简单使用
- 【微信公众平台】微信营销推广的12种方法,让您的订单增加两倍以上!
- 关于where子句中的子查询语法说明
- 操作码1:栈和局部变量操作
- Android 数据存储 之 SQLite数据库详解
- Fatal error: Unknown: Failed opening required 'c:/wamp/www/view.php' (include_path='.
- mysql 常用的 ddl 语句。
- 操作码2:类型转换
- 图像特征提取
- 操作码3:整数运算
- 优化SQL查询:如何写出高性能SQL语句
- mysql的一个日常用法的BUG