一、代码生成阶段
源程序——>前端——中间代码——>代码优化器——中间代码——>代码生长器——>目标程序
代码生成涉及:存储管理,指令选择,寄存器分配,计算次序选择
二、目标程序
1、绝对机器语言程序
2、可重定位机器语言程序
允许程序模块分别编译
调用其他先前编译好的程序模块
3、汇编语言程序
免去编译器重复汇编器的工作
三、指令选择
1、影响因素
目标机器的指令系统的性质
指令系统的统一性和完备性
指令的速度和机器方言
2、寄存器
寄存器中的指令通常比内存中的短一些,同时执行也快一些
寄存器分配:选择驻留在寄存器中的一组变量 :要放哪些变量
寄存器指派:挑选变量要驻留的具体寄存器 :要用哪些寄存器
3、计算次序的选择
选择需要较少的寄存器来保存中间结果
但是寻找最优的计算次序是一个NP完全问题
四、目标机器
1、指令系统
附加代价表
2、附加代价
指令代价取成1加上他的源和目标地址模式的附加代价