美文网首页
简单指令解析

简单指令解析

作者: 抬头挺胸才算活着 | 来源:发表于2020-05-29 23:00 被阅读0次

参考资料:
怎么理解JVM中的iload和istore指令

栈:包括局部变量表,操作数栈,动态链接,方法出口等
操作数栈:用来加载数字,或者加减数字
局部变量表:存放局部变量

下面的几个指令都是以操作数栈为中心的
iconst等,将数字加载到操作栈
iload等,将局部变量表加载到操作数栈
istore等,将操作数栈的结果保存到局部变量表


有了上面的知识,看下下面的代码,如果熟悉的话甚至能推倒出字节码。
int c=0;:要将0加载到操作数栈(iconst_0),然后再将操作数栈加载到局部变量表的第二个位置(istore_2)。
c=a+b;:将a和b从局部变量表加载到操作数栈(iload_0,iload_1),在操作数栈中相加(add),再将结果从操作数栈存到局部变量表第二个位置(istore_2)。
return c:将局部变量表第二个位置存储到操作数栈(iload_2),返回(ireturn)。

public static int add(int a,int b){
    int c=0;
    c=a+b;
    return c;
}

最后的字节码

0: iconst_0        //常量0压入操作数栈
1: istore_2        //弹出操作数栈栈顶元素,保存到局部变量表第2个位置
2: iload_0         //第0个变量压入操作数栈
3: iload_1         //第1个变量压入操作数栈
4: iadd            //操作数栈中的前两个int相加,并将结果压入操作数栈顶
5: istore_2        //弹出操作数栈栈顶元素,保存到局部变量表第2个位置
6: iload_2         //加载局部变量表的第2个变量到操作数栈顶
7: ireturn         //返回

相关文章

  • 简单指令解析

    参考资料:怎么理解JVM中的iload和istore指令 栈:包括局部变量表,操作数栈,动态链接,方法出口等操作数...

  • 解析字节码指令

    解析invokeinterface指令 与invokevirtual指令类似,当没有对目标方法进行解析时,需要调用...

  • JVM Call Java Method 之二

    解析invokeinterface字节码指令 与invokevirtual指令类似,当没有对目标方法进行解析时,需...

  • 基本概念和用法-指令 2-6

    解析最简单的指令hello:匹配模式restrict restrict表示匹配模式 A表示属性E表示元素M表示注释...

  • IDA python 脚本

    补丁为nop 解析为code 解析为无指令 查找替换指令 从addr开始,打印内容 从addr开始,向上查找是同一...

  • makefile | makefile语法基础

    makefile是为make指令提供信息的文件。make指令直接解析makefile。因此我们从make指令的起源...

  • AngularJS 参考手册

    AngularJS 指令 本教程用到的 AngularJS 指令 : 过滤器解析 AngularJs 过滤器。 A...

  • nginx简介和使用2

    nginx由多个经配置文件配置中的指令定义的模块组成,。 指令分为:简单指令和块指令。 简单的指令: 指令名、空格...

  • 2. Nginx配置文件结构

    配置文件由指令和参数构成,包含简单指令和复合指令。简单指令(单行)以;结尾。示例如下: 复合指令将相关指令包含在{...

  • 用Java实现JVM第七章《方法调用和返回》

    案例介绍 本章节主要用java实现;方法调用指令、返回指令、解析方法符号引用、参数传递等。实现新的指令后我们的虚拟...

网友评论

      本文标题:简单指令解析

      本文链接:https://www.haomeiwen.com/subject/akdqzhtx.html