第11章 代码生成
重点:代码生成器设计中的问题, 目标语言,一个简单的代码生成器, 寄存器的分配和指派
难点:寄存器的分配和指派
11.1 代码生成器设计中的问题
虽然代码生成器的具体实现依赖于目标机器的体系结构、指令系统和操作系统,但存储管理、指令选择、寄存器分配和计算顺序等问题却是设计各种代码生成器都要考虑的问题
11.2目标语言
代码生成器的输入包括中间代码和符号表信息,符号表信息主要用来确定中间代码中的变量所代表的数据对象的运行时地址。
目标代码的主要形式:
1. 绝对机器语言代码
2. 可重定位的机器语言代码
3. 汇编语言代码
11.3 一个简单的代码生成器
指令选择
寄存器分配
计算顺序选择
11.4 窥孔优化
冗余指令消除、不可达代码消除、强度削弱、特殊机器指令的使用、其他处理
11.5 寄存器分配与指派
11.6 本章小结
1. 目标代码的生成需要尽力开发利用机器提供的资源,特别是根据开销选用恰当的指令和寄存器,以提高其执行效率;
2. 稀缺资源寄存器的有效利用涉及到后续引用问题,寄存器描述符用来记录每个寄存器当前的内容;地址描述符记录运行时存放变量当前值的一个或多个位置,用来确定对变量的存取方式;
3. 使用引用计数能够良好地实现寄存器的分配和指派;
4. 不同形式的三地址码对应不同的目标代码,且具有不同的执行代价;
5. 不可达和冗余指令删除、控制流优化、强度削弱、代数化简、特殊指令使用等都是有效的窥孔优化方法;