用虚拟机执行程序
最后更新于:2022-04-02 04:08:26
[TOC]
## 三地址后做什么
![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/be/72/be72de7b2aea88ea09f71b2b0759b994_800x587.png)
三地址后,需要实现代码生成器Gen
## 代码生成器
- 是一个转换器,将三地址代码转化为机器代码
为什么不直接用虚拟机执行三地址代码?
- 性能问题(三地址代码如x=a*b丸还需要分析)
- 优化问题
- 寄存器利用
- 机器码选择
- ...
- 封装&抽象
## 虚拟机
- 虛拟机是模拟计算机的软件(如:世嘉模拟器,王者荣耀PC版)
- 使用虚拟机的作用
- 跨平台
- 资源调度/共享
- 隔离(容器,沙箱)
### TInyScript 虚拟机的组成
1. 内存(32位整数数组)
2. 寄存器(32为整数数组)
-PC/SP/RA 等特殊寄存器
- S0/S1/S2普通寄存器
- ...
3. CPU循环(fetch/decode/exec)
## 操作码 (Operate Code)
- 也叫指令码 (instruction code),字节码 ( byte code) , 虚拟机上执行的虚拟机器代码 (类比计算机上执行的机器代码)
为什么要有 Operate Code?
- 标准(Standard)优势
- 性能考量
- Opcode 到机器代码开销可以用JIT技术优化
### 示例
比较两个寄存器S0,S1的值,如果不相等然后就跳转到第100行代码;如果相等就执行下一行代码
```
BNE S0,S1,L0
BNE 占用6位
S0 占5位
```
指令的BNE,或是S0占用多少位,可以有设计者决定,既虚拟机设计决定
';