【课前思考】
  在第2章PL/0语言编译程序的实现中,产生的目标代码是一种与机器无关的假想栈式计算机器汇编语言类PCODE,它的执行需要用具体机器配置的语言编写一个解释程序。本章将介绍的代码生成是把某种高级程序设计语言经过语法语义分析或优化后的中间代码作为输入,将其转换成特定机器的机器语言或汇编语言作为输出,这样的转换程序称为代码生成器,因此,代码生成器的构造与输入的中间代码形式和输出的目标代码的机器结构密切相关。本章将主要介绍生成具体机器汇编语言为目标代码时需要考虑的一些共同问题和中间语言的选择考虑。
  建议学员考虑如何把PL/0语言编译程序的目标代码类PCODE翻译成你所熟悉的具体机器的汇编语言,作为学习代码生成的预习思考。
【学习目标】
  本章将介绍以具体计算机指令作为目标代码的代码生成器的设计,以一个计算机模型为例介绍一个简单的代码生成器需要考虑的问题,在代码生成时要考虑充分利用寄存器,以减少对内存的存取次数以提高目标程序运行速度,为此,本章将给出寄存器分配的原则,并使用待用信息链表法的代码生成算法,最后给出中间语言的选择需要考虑的问题。
【学习指南】
  由于代码生成的目标代码与具体计算机的结构有关, 如指令格式、字长及寄存器的个数和种类,并与指令的语义和所用操作系统等都密切相关,因此实现非常困难。通过本章学习,仅为学员初步了解一个高级程序设计语言编译程序目标代码生成需要考虑的问题和解决这些问题的基本原则和方法,为今后应用打下初步基础。
  要想真正掌握代码生成技术的细节,最好的方法是实现一个代码生成器,建议学员学习本章后,用第2章PL/0语言的中间代码类PCODE为输入,选择一个自己熟悉的汇编语言为输出,编写一个代码生成器。
【难 重 点】
  重点:衡量目标代码的质量主要从占用空间和执行效率两方面考虑,而寄存器的合理分配对解决这两方面的问题起着重要的作用,因此要求学员了解寄存器的分配原则很重要,一个要求执行效率高的编译器对寄存器的分配可能要进行优化。另外对中间语言的选择也很重要,希望有较强可移植性,就要求选择的中间语言能适用较多种类的高级语言和多种不同的具体计算机指令。
  难点:原则好讲实践困难,对具体要求和现实环境需要具体分析综合考虑。
【知 识 点】