第九章代码生成学****内容?目标机器?存储管理?基本块、流图?简单代码生成算法?寄存器分配?窥孔优化?基本块 dag 表示、从 dag 生成代码 设计中的问题 ?前端生成的中间表示形式?线性化表示:后缀表示形式?四元式表示:三地址码?虚拟机表示:抽象栈机器代码?图形化表示:语法树、 DAG ?符号表信息?类型检查、类型转换已完成?输入是无错误的设计中的问题(续) ?绝对机器语言?固定内存地址,可直接执行?可重定位机器语言?多模块连接?灵活、分别编译?汇编语言?简单——符号指令、宏的使用设计中的问题(续) ?名字?数据地址,与前端协作?符号表?标号?指令地址? backpatching 技术设计中的问题(续) ?指令集特性?一致性、完整性?指令速度、机器特性?代码质量:速度、大小?丰富的指令集?多种代码生成方式?选择最高效方式设计问题(续) ? allocation 、 assignment ?最优化 assignment —— NP- 完全问题? register-pair ?调整计算顺序?提高效率? NP- 完全问题设计问题(续) ?正确性是第一位的?设计目标:易于实现、测试、维护? 节:生成算法, 节:窥孔优化? 节:寄存器使用算法——控制流? 、 节:代码选择? 节:代码生成——树重构 目标机器?寄存器: R0 , R1 ,…, Rn -1 ?指令: op source, destination ?寻址方式 MOV R0, M MOV 4(R0), M MOV * 4(R0), M 1 contents(c+contents(R)) * c(R) 间接索引 0 contents(R) *R 间接寄存器 1 c+contents(R) c(R) 索引 0R R寄存器 1M M 绝对额外开销地址形式寻址方式指令开销?长度 1. MOV R0, R1 :开销 1 2. MOV R5, M :开销 2 3. ADD #1, R3 :开销 2 4. SUB 4(R0), * 12(R1) :开销 3
编译原理 代码生成 来自淘豆网www.taodocs.com转载请标明出处.