汇编器与虚拟机
- 作者:新网
- 来源:新网
- 浏览:100
- 2018-05-10 13:22:51
上篇文章主要观点是程序实现就是一个翻译过程,最终会翻译成(JIT)CPU指令。我们倒着推,那么GIT的上层就是虚拟机,而虚拟机是针对中间字节码的。中间字节码就是油汇编器对汇编语言文件的一个翻译。
上篇文章主要观点是程序实现就是一个翻译过程,最终会翻译成(JIT)CPU指令。我们倒着推,那么GIT的上层就是虚拟机,而虚拟机是针对中间字节码的。中间字节码就是油汇编器对汇编语言文件的一个翻译。

<
div> 那么我们先来谈谈汇编器(虚拟汇编):
对于汇编器实现中的词法分析肯定是很简单的,语法分析也嗯容易,因为其语法大致有三种:
1:函数定义
2:标签定义
3:定义变量
3:汇编指令语句
所以语法分析的结果就是要得到所有的函数定义表,然后每个函数中又有标签表和变量表)
我们的目的是生成中间字节码,以至于提高速度,那么尽量让每个指令干自己指令内部的事情而不需要关心其他(否则速度就降下来了)。
这样虚拟机的实现也就更简单。
因为虚拟机的实现大概只需要一个函数表以及一个运行时堆栈就OK。那么我们的中间字节码中的虚拟指令就应该只针对栈进行操作(而且都是固定了偏移的)
(想象一下,如果不存在汇编器,而进行纯粹的语言解释器,那么会通过一个map结构去查询某个变量,而先通过汇编器-(可以看成预处理,事实上预处理也就是一个翻译过程)
去生成中间指令,给每个变量安排一个相对索引,那么查询某变量,只需要一个常量时间-更短的时间即可)
(正因为预处理-翻译过程,所以才使得下一步过程的执行速度才更快)
接下来就是代码生成,写入OPcode,然后它具有参数,而参数无非就是一个特定偏移。
虚拟机去执行这个中间字节码,提供一个堆栈作为运行时。