🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
[TOC] ## 三地址后做什么 ![](https://img.kancloud.cn/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占用多少位,可以有设计者决定,既虚拟机设计决定