美文网首页
7、指令集

7、指令集

作者: 陈桐Caliburn | 来源:发表于2020-04-26 14:27 被阅读0次

gojvm目录
1、搭建go环境
2、cmd命令行参数解析
3、搜索class文件
4、添加testOption 便于单元测试
5、解析classfile文件
6、运行时数据区
7、指令集
8、解释器
9、创建Class
10、类加载器
11、对象实例化new object
12、方法调用和返回
13 类初始化
14、jvm支持数组
15、jvm支持字符串-数组扩展
16、本地方法调用
17、ClassLoader原理
18、异常处理
19、 启动jvm

知识扩展

method_info[]
找到属性为code代码,二进制进行解析

魔法数是0x OPCODE

java虚拟机指令 以opcode开头
java虚拟机256条指令
定义205条指令 0~202 (0x00~0xCA)、0xFE、0xFF

定义助记符
例如 0x00 助记符 nop

指令集方法

普通计算压栈出栈
控制访问偏移量

指令集做两件事
1、读取操作码
2、执行操作数栈

type Instruction interface {
    FetchOperands(reader *BytecodeReader) //读取操作码
    Execute(frame *rtda.Frame) //执行操作数栈
}

// 1. 没有操作数的指令
type NoOperandsInstruction struct{}

func (self *NoOperandsInstruction) FetchOperands(reader *ByteCodeReader) {
    // nothing to do
}

// 2. 跳转指令 ->用于跳转下一个方法
type BranchInstruction struct {
    Offset int // 跳转偏移量
}

func (self *BranchInstruction) FetchOperands(reader *ByteCodeReader) {
    self.Offset = int(reader.ReadInt16()) // 从字节码中读取一个两字节的数,作为偏移量
}

branch.go

func Branch(frame *rtda.Frame, offset int) {
    pc := frame.Thread().PC()
    nextpc := pc + offset
    frame.SetNextPC(nextpc)
}
add指令

压栈出栈做计算

type IADD struct{ base.NoOperandsInstruction }

func (self *IADD) Execute(frame *rtda.Frame) {
    stack := frame.OperandStack()
    v2 := stack.PopInt()
    v1 := stack.PopInt()
    result := v1 + v2
    stack.PushInt(result)
}
goto指令

偏移量offset做控制

type GOTO struct {
    base.BranchInstruction
}

func (self *GOTO) Execute(frame *rtda.Frame) {
    base.Branch(frame, self.Offset)
}

实战项目地址

https://github.com/yinlingchaoliu/jvmgo.git

相关文章

  • iOS指令集

    ARM处理器指令集 32位ARM指令集:armv6、armv7、armv7s等64位ARM指令集:arm64、ar...

  • iOS 设备处理器指令集

    1、处理器指令集介绍 armv6|armv7|armv7s|arm64都是ARM处理器的指令集,这些指令集都是向下...

  • armv7 armv7s arm64 i386 x86_64

    1. ARM处理器指令集 armv6|armv7|armv7s|arm64都是ARM处理器的指令集,这些指令集都是...

  • Apple移动设备处理器指令集 armv6、armv7、armv

    arm指令集 Armv6、armv7、armv7s、arm64都是arm处理器的指令集,所有指令集原则上都是向下兼...

  • xCode的build setting

    指令集Architectures armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_...

  • iOS - Architecture

    32 位ARM指令集(armv6|armv7|armv7s) 64 位ARM指令集(arm64) i386|x86...

  • ios cpu架构

    iOS默认指令集 armv7 | armv7s | arm64 | arm64e都是ARM处理器的指令集 模拟器:...

  • iOS - 动态库支持多种架构指令集

    armv7.armv7s,arm64都是ARM处理器的指令集i386,x86_64是mac的指令集 TARGEST...

  • 关于ARM架构的一些知识

    [TOC] A、指令集 ARMv7 含16位和32位两个指令集;ARMv8 含32位和64位两个指令集,ARM没有...

  • SDK瘦身

    一、根据需求去掉不需要使用的指令集1、各指令集机型说明(指令集向下兼容)(1)armv7:iPhone4,iPho...

网友评论

      本文标题:7、指令集

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