LIWensheng,SCST,BUPT第9章目标代码生成知识点:基本块、程序流图下次引用信息代码生成算法WenshengLiBUPT@20082/43§9目标代码生成9.1代码生成概述9.2基本块与流图9.3一个简单的代码生成程序WenshengLiBUPT@20083/439.1代码生成概述目标代码生成程序的任务–将前端产生的中间代码转换为等价的目标代码对目标代码生成程序的要求:–正确–高质量本节内容:–代码生成程序的位置–代码生成程序设计有关的问题1.有效地利用目标机器的资源2.所生成的目标代码应高效地运行WenshengLiBUPT@20084/43一、代码生成程序的位置符号表前端代码优化代码生成中间代码目标代码源程序中间代码代码生成程序在编译模型中的位置代码生成程序的输入–中间代码:经过语法分析/语义检查之后得到的、正确的–符号表•记录了与名字有关的信息•决定中间表示中的名字所代表的数据对象的运行地址假定:前期工作结果正确、可信–中间代码足够详细、必要的类型转换符已正确插入、明显的语义错误已经发现、且正确恢复WenshengLiBUPT@20085/43代码生成程序的输出:目标代码目标代码形式–绝对机器代码•可把代码放在内存中固定的地方、立即执行–可重定位机器代码•.obj(DOS)、.o(UNIX)•开发灵活,允许各子模块单独编译•由连接装配程序将它们连接在一起,生成可执行文件–汇编代码WenshengLiBUPT@20086/43二、代码生成程序设计有关的问题代码生成程序的具体细节依赖于目标机器和操作系统所有的代码生成程序固有的问题–存储管理–指令选择–寄存器分配–计算顺序的选择WenshengLiBUPT@20087/43存储管理从名字到存储单元的转换由前端和代码生成程序共同完成三地址代码中的名字–指向该名字在符号表中位置的指针符号表中的信息–在处理声明语句时填入–“类型”决定了它的域宽–“地址”确定该名字在过程的数据区域中的相对位置–上述信息用于确定中间代码中的名字对应的数据对象在运行时的地址WenshengLiBUPT@20088/43例如:中间代码与目标代码的对应对于四元式j:gotoi–ij目标代码...0n四元式100的机器码四元式地址长度...100(,,,)101(,,,)102(,,,)103(,,,)...n1212n+12n+12四元式101的机器码88n+20n+20四元式102的机器码1616n+36n+36四元式103的机器码44n+40...将四元式j的地址记入与i相关的链表中,等待回填四元式i的地址已有,可以直接生成机器指令WenshengLiBUPT@20089/43指令选择机器指令系统的性质决定了指令选择...