《自己动手写Java虚拟机》学习笔记(五)指令集和解释器

本文是《自己动手写Java虚拟机》学习笔记的第五章,主要介绍了字节码和指令集,包括操作码、助记符、指令分类以及指令解码的逻辑。还探讨了Java虚拟机解释器的执行流程,并提及了Go语言的位移操作符特性。
摘要由CSDN通过智能技术生成

第五章 指令集和解释器

本章基于第三章(解析.class文件)和第四章(运行时数据区),编写一个建议的解释器。

5.1 字节码和指令集

每一个类或者接口都可以被Java编译器编译成为一个.class文件,类或接口的方法信息就放在.class文件的method_info结构中。如果方法不是抽象的,也不是本地方法,方法的Java代码就会被编译器便已成为字节码(即使是空的,也有回一条return语句),存放在method_info的Code属性。

JVM每条指令都以一个单字节的操作码开头。即:操作码最多有256个。每条操作码都有对应的助记符。操作码后面可以跟零字节或多字节的操作数。比如:getstatic,如果其操作数是0x0002,表示常量池的第二个常量。为了让编码后的字节码更加紧凑,很多操作码本身就隐含了操作数。比如:iconst_0表示把常数0推入操作数栈。

操作数栈和局部变量表只存放数据的值,并不记录数据类型。那么,指令必须要知道自己在操作什么类型的数据。比如:iadd就是对int值进行加法。

助记符首字母及对应的java数据类型:a(reference),b(byte),c(char),d(double),f(float),i(int),l(long),s(short)。

指令按照用途分为11类:常量(constants)指令

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值