第10章 代码生成 ■基本问题 ■目标机器模型 ■一个简单的代码生成器 ■寄存器分配(略) ■DAG的目标代码(略) ■作业 2025/4/3 课程目绿☒)
2025/4/3 1 第10章 代码生成 ◼ 基本问题 ◼ 目标机器模型 ◼ 一个简单的代码生成器 ◼ 寄存器分配(略) ◼ DAG的目标代码(略) ◼ 作业 课程目录
代码生成概述 ■逻辑阶段 编译程序的最后一个阶段 ■输入和输出中间代码 等价的目标代码 ■目标代码的一般形式 ◆绝对机器代码所有地址均已定位 优点:可立即执行 ·缺点:不能独立编译各模块,灵活性差 ◆可再定位机器代码需经连接与装入才可执行 ▣优点:子程序可单独编译 口缺点:需经汇编器辅助代码生成 ◆汇编语言代码 口优点:目标程序好读、可移植 口缺点:需经汇编器辅助代码生成 2025/4/3 D2
2025/4/3 2 代码生成概述 ◼ 逻辑阶段 编译程序的最后一个阶段 ◼ 输入和输出 中间代码 等价的目标代码 ◼ 目标代码的一般形式 ◆绝对机器代码 所有地址均已定位 优点:可立即执行 缺点:不能独立编译各模块,灵活性差 ◆可再定位机器代码 需经连接与装入才可执行 优点:子程序可单独编译 缺点:需经汇编器辅助代码生成 ◆汇编语言代码 优点:目标程序好读、可移植 缺点:需经汇编器辅助代码生成
基本问题 ■代码生成器的设计环境 ◆要依赖于目标机器、指令系统和操作系统。 ■输入 ◆源程序的中间表示、符号表中的信息。 ■ 目标程序 ◆汇编语言。 ■指令选择 ◆指令集丰富、选择合适。 寄存器分配 ◆有效合理使用寄存器、提高代码质量。 ■计算顺序选择 ◆影响代码的有效性。 2025/4/3 ☒3
2025/4/3 3 基本问题 ◼ 代码生成器的设计环境 ◆要依赖于目标机器、指令系统和操作系统。 ◼ 输入 ◆源程序的中间表示、符号表中的信息。 ◼ 目标程序 ◆汇编语言。 ◼ 指令选择 ◆指令集丰富、选择合适。 ◼ 寄存器分配 ◆有效合理使用寄存器、提高代码质量。 ◼ 计算顺序选择 ◆影响代码的有效性
目标代码生成器的基本设计要求 ■使所生成的目标代码尽可能的短 ■能较充分地发挥目标计算机可用资 源的效率 例如: ◆尽可能地使用执行速度快的指令 ◆充分利用计算机的寄存器和变址器, 以节省访问内存的时间 2025/4/3 章节目录国回4
2025/4/3 4 目标代码生成器的基本设计要求 ◼ 使所生成的目标代码尽可能的短 ◼ 能较充分地发挥目标计算机可用资 源的效率 例如: ◆尽可能地使用执行速度快的指令 ◆充分利用计算机的寄存器和变址器, 以节省访问内存的时间 章节目录
目标机模型 ■问题提出 ◆代码生成程序总是针对某一具体的计算机实现的 ◆因此,试图脱离具体的计算机来一般性讨论生成高 效的目标代码的全部细节是不合适的,也是不可行 的 ◆然而又不可能只局限于某一特定的计算机 ■折中方案 ◆定义一种假想的计算机模型,具有实际计算机的 共同特征 ◆依此模型为依据,讨论代码生成中的某些主要问题 2025/4/3 国5
2025/4/3 5 目标机模型 ◼ 问题提出 ◆代码生成程序总是针对某一具体的计算机实现的 ◆因此,试图脱离具体的计算机来一般性讨论生成高 效的目标代码的全部细节是不合适的,也是不可行 的 ◆然而又不可能只局限于某一特定的计算机 ◼ 折中方案 ◆定义一种假想的计算机模型,具有实际计算机的 共同特征 ◆依此模型为依据,讨论代码生成中的某些主要问题