编译原理学习笔记25——目标代码的生成
- 25.1 目标代码生成
- 25.2 目标机器模型
- 25.3 一个简单代码生成器
- 25.4 待用信息和活跃信息
- 25.5 变量地址和寄存器描述
- 25.6 代码生成算法
25.1 目标代码生成
- 输出
- 绝对指令代码:能够立即执行的机器语言代码,所 有地址已经定位
- 可重新定位指令代码:待装配的机器语言模块,执 视频区域行时,由连接装配程序把它们和某些运行程序连接 起来,转换成能执行的机器语言代码
- 汇编指令代码:需要经过汇编程序转换成可执行的机器语言代码
目标代码生成需要考虑的问题
- 如何充分利用计算机的寄存器,减少目标代码 中访问存贮单元的次数
- 在寄存器分配期间,为程序的某一点选择驻留在寄 存器中的一组变量
- 在随后的寄存器指派阶段,挑出变量将要驻留的具 体寄存器
代码生成
- 目标机器模型
- 一个简单代码生成器
25.2 目标机器模型
一个抽象的计算机模型
- 具有多个通用寄存器,可用作累加器和变址器
- 运算必须在某个寄存器中进行
- 含有四种类型的指令形式
25.3 一个简单代码生成器
最简单的代码生成
最简单的代码生成
带寄存器分配优化的代码生成
- 以基本块为单位生成目标代码
- 依次把四元式的中间代码变换成目标代码
- 在基本块的范围内考虑如何充分利用寄存器
- 进入基本块时,所有寄存器空闲
- 离开基本块时,把存在寄存器中的现行的值存回主 存中,释放所有寄存器
- 不特别说明,所有说明变量在基本块出口之后均为 非活跃变量
带寄存器分配优化的代码生成
25.4 待用信息和活跃信息
待用信息
待用信息和活跃信息的表示
待用信息和活跃信息的计算
计算待
用信息和活跃信息的算法
25.5 变量地址和寄存器描述
变量地址描述和寄存器描述
变量地址描述和寄存器描述
25.6 代码生成算法
代码生成算法
生成存数指令
为基本块生成代码示例