- 12
- 0
- 约7.82千字
- 约 28页
- 2017-04-01 发布于四川
- 举报
编译原理[清华]第12章节代码生成
第十二章代码生成 第12章 代码生成 学习目标 掌握:基本块代码生成算法,寄存器分配算法 理解:待用信息,活跃信息 12.1 代码生成概述 12.2 一个计算机模型 12.3 一个简单的代码生成器 12.1 代码生成概述 代码生成的任务 把中间代码(经过优化或未经过优化)作为输入,将其转换成特定机器的机器语言或汇编语言作为输出,这样的转换程序称为代码生成器(Code Generator)。 目标代码生成需要考虑的基本问题: 如何使生成的目标代码较短 如何充分利用计算机的寄存器,减少目标代码访问存储单元的次数 目标代码生成的一些共同的问题,而不讨论某个特定机器的代码生成问题 寄存器分配算法 目标代码的执行效率很大程度依赖于寄存器的使用; 基本块的代码生成算法 寄存器分配算法仅限定在一个基本块的范围内,以四元式的中间代码作为输入,以一个称作M的模型机的汇编语言作为输出。 12.2 一个计算机模型 M模型机具有n个通用寄存器R1,R2,R3,…,Rn,它们既可以作为累加器,又可以作为变址器。 约定:op表示运算,C表示常量;M表示内存单元(用变量名表示该变量所在的单元), Ri表示寄存器;*表示间接寻址 特殊指令 除了上述的寻址方式和一般的运算指令之外,计算机模型的指令系统中还包括如下特殊指令 主要有两大类: 内存与寄存器交换类:包括LD与ST; 比较与转移类:如CMP与J X 例:条件语句 if AB goto X 中间代码:( J, A, B, X ) 目标代码: CMP A, B J X 12.3 一个简单的代码生成器 一个基于基本块的代码生成器 它的输入是四元式中间代码,输出是M机器的汇编代码 着重讨论在基本块内如何充分利用寄存器 12.3.1 寄存器分配原则 在指令的执行代价中,寄存器的代价是最小的,因此总是希望将尽可能多的运算对象放在寄存器中; 由于任何一个计算机模型中的寄存器个数都是有限的,因而需要根据一些原则,对寄存器进行分配 基于基本块的寄存器分配的一般原则: 当生成某变量的目标代码时,尽量让变量的值或中间结果保留在寄存器中,直到寄存器不够分配为止,这样引用变量值时可减少对内存的存取次数,提高运行速度 进入基本块时所有寄存器是空闲的,当到基本块出口时,将变量的有用值存回内存,释放所有寄存器 在基本块内,后边不再被引用的变量占用的寄存器应尽早释放,以提高寄存器的利用效率 12.3.2 待用信息链表法 引入原因: 为了把在基本块内还要被引用的变量值尽可能保存在寄存器中,不再被引用的变量所占的寄存器尽早释放,在翻译四元式 i: A:=B op C时,必须知道变量A,B,C在基本块内其后的引用情况,即所谓变量的待用信息。 基本定义: 定值、引用、活跃 在形如 i: A:=B+C 的代码中,出现在“:=”左边和右边的变量,分别被称为对变量的定值和引用,i被称为变量的定值点或引用点。若变量的值在i之后的代码序列中被引用,则称变量在i点是活跃的。 待用信息 在基本块中,变量A在四元式i中被定值,在i后面的四元式j中引用A值,且从i到j之间没有其他对A的定值点,称j是i中对变量A的待用信息(下次引用信息)。所有这样的待用信息jk(k=1,2,…)构成待用信息链。 只在基本块内考虑待用信息,一个变量在基本块的后继中是否被引用,可从活跃变量信息得知(出基本块后,变量是否活跃需要进行全局的数据流分析才能确定) 基本块内求待用信息的算法 假设符号表中含有变量的待用信息和活跃信息栏;四元式表上也有关于结果变量、左右操作数变量的待用和活跃信息栏。 把基本块中各变量在符号表的登记项中的待用信息栏置为“非待用”,活跃信息栏按变量在基本块出口是否活跃而置为“活跃”或“非活跃”(假定用户变量都是活跃的,临时变量都是非活跃的)。 从基本块出口的四元式开始由后向前依次处理各个四元式 i: A:=B op C ,直到处理完为止: 把符号表中结果变量A的待用信息和活跃信息附加到四元式i上。 把符号表中变量A的待用信息栏和活跃信息栏分别置为“非待用”和“非活跃”。(由于在i中对A的定值只能在i以后引用,而对i以前的四元式来说A是非活跃和非待用的。) 把符号表中变量B和C的待用信息和活跃信息附加到四元式i上。 把符号表中变量B和C的待用信息栏置为“i”,活跃信息栏置为“活跃”。 注意:i,ii,iii,iv的次序不能颠倒,因为B和C也可能是A 求待用信息的实例 有如下基本块 (1) T:=A-B (2) U:=A-C (3) V:=T+U (4) D:=V+U 12.3.3 代码生成算法 寄存器描述数组RVALUE 为了掌握各寄存器的使用情况,用数组RVALUE记录每个寄存器
您可能关注的文档
- 简论Wìn7与Wìn8的分别.ppt
- 简易方程复习课演示课件.ppt
- 算法合集之“论反汇编在时间常数优化中的应用”.ppt
- 算法的流程图[新课标人教版2.ppt
- 等式的性质[第3课时].ppt
- 简易方程教学演示课件[第2课时].ppt
- 算法剖析与的设计基本知识点点复习.ppt
- 算法的设计与剖析,冶金工业发行社.ppt
- 简单分类方法和其应用.ppt
- 算法的设计与剖析-习题课.ppt
- 2025-2026学年天津市和平区高三(上)期末数学试卷(含解析).pdf
- 2025-2026学年云南省楚雄州高三(上)期末数学试卷(含答案).pdf
- 2025-2026学年甘肃省天水市张家川实验中学高三(上)期末数学试卷(含答案).docx
- 2025-2026学年福建省厦门市松柏中学高二(上)期末数学试卷(含答案).docx
- 2025-2026学年广西钦州市高一(上)期末物理试卷(含答案).docx
- 2025-2026学年河北省邯郸市临漳县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省石家庄二十三中七年级(上)期末历史试卷(含答案).docx
- 2025-2026学年海南省五指山市九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省唐山市玉田县九年级(上)期末化学试卷(含答案).docx
- 2025-2026学年河北省邢台市市区九年级(上)期末化学试卷(含答案).docx
最近下载
- 幽默卡通动漫笑点设计方法.docx VIP
- 行星式球磨机立式-FOCUCY弗卡斯.PDF VIP
- 贵州省六校联考2025届高三下学期3月高考实用性联考(四)英语试卷(含答案).docx VIP
- 颈椎病的中医护理课件.pptx VIP
- 原调正谱G小小蝴蝶la farfalletta钢琴伴奏高清打印版.pdf VIP
- 上海大学2024-2025学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 广发证券-交通银行-601328-零售转型提速,定增落地夯实资本根基.pdf
- 上海大学2024-2025学年第1学期《高等数学(上)》期末考试试卷(A卷)附参考答案.pdf
- 循环系统护理小讲课.pptx
- 建筑屋面西瓦专项施工方案(范本).doc VIP
原创力文档

文档评论(0)