编译原理与技术讲义-第10章.ppt
《编译原理与技术讲义-第10章.ppt》由会员分享,可在线阅读,更多相关《编译原理与技术讲义-第10章.ppt(43页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、编译原理与技术编译原理与技术第第10章章 目标代码生成目标代码生成 青岛大学信息工程学院青岛大学信息工程学院青岛大学信息工程学院青岛大学信息工程学院主要内容主要内容u代码生成器设计的基本问题代码生成器设计的基本问题 u虚拟计算机模型虚拟计算机模型 u语法制导的目标代码生成语法制导的目标代码生成 u基本块和待用信息基本块和待用信息 u一个简单代码生成器一个简单代码生成器u代码生成技术小结代码生成技术小结 编译原理与技术编译原理与技术2青岛大学信息工程学院青岛大学信息工程学院10.1 代码生成器设计的基本问题代码生成器设计的基本问题 u代码生成在整个编译过程的位置代码生成在整个编译过程的位置符号表
2、代码生成中间代码生成与优化语法树目标程序中间代码中间代码语义分析中间代码编译原理与技术编译原理与技术3青岛大学信息工程学院青岛大学信息工程学院10.1 代码生成器设计的基本问题代码生成器设计的基本问题u目标程序目标程序 绝对机器代码,程序所有的内存地址,特别是程序的起始地址,在编译时都已绝对机器代码,程序所有的内存地址,特别是程序的起始地址,在编译时都已经固定。这种代码的优点是装入机器后就可以立即执行,对于小程序可以快速经固定。这种代码的优点是装入机器后就可以立即执行,对于小程序可以快速编译和运行。编译和运行。可重定位机器代码(可重定位目标模块),代码装入内存的起始地址可以任意可重定位机器代码
3、(可重定位目标模块),代码装入内存的起始地址可以任意改变。一组可重定位的若干目标模块,经过连接和装配后才可以运行。尽管这改变。一组可重定位的若干目标模块,经过连接和装配后才可以运行。尽管这些工作增加了程序运行的代价,但是,可重定位机器代码的优点是灵活性。这些工作增加了程序运行的代价,但是,可重定位机器代码的优点是灵活性。这种技术允许程序分模块编写,独立地编译成目标模块,并且从目标模块库中调种技术允许程序分模块编写,独立地编译成目标模块,并且从目标模块库中调用其它已经编译好的模块,便于程序开发。通常,可重定位机器代码中包含可用其它已经编译好的模块,便于程序开发。通常,可重定位机器代码中包含可重定
4、位信息和连接信息。重定位信息和连接信息。如果目标代码是汇编语言程序,还需要汇编后才能运行。只要地址可以由偏移如果目标代码是汇编语言程序,还需要汇编后才能运行。只要地址可以由偏移址及符号表中的其它信息计算得到,代码生成器就可以产生程序中名字的绝对址及符号表中的其它信息计算得到,代码生成器就可以产生程序中名字的绝对地址或可重定位地址。这样生成代码的好处是不用生成二进制的机器代码,而地址或可重定位地址。这样生成代码的好处是不用生成二进制的机器代码,而是产生符号指令并用宏机制来帮助产生机器代码,使得代码生成过程变得容易。是产生符号指令并用宏机制来帮助产生机器代码,使得代码生成过程变得容易。为了可读性,
5、本章采用汇编语言作为目标语言。为了可读性,本章采用汇编语言作为目标语言。编译原理与技术编译原理与技术4青岛大学信息工程学院青岛大学信息工程学院10.1 代码生成器设计的基本问题代码生成器设计的基本问题u指令选择指令选择一个编译程序可以看成是一个转换系统,它把源程序转换成等一个编译程序可以看成是一个转换系统,它把源程序转换成等价的目标代码,也就是说,对源语言种各种语言结构,依据语价的目标代码,也就是说,对源语言种各种语言结构,依据语义确定相应的目标代码结构,即确定源语言于目标语言之间的义确定相应的目标代码结构,即确定源语言于目标语言之间的对应关系,确保正确实现语义。显然,能否建立这样的关系直对应
6、关系,确保正确实现语义。显然,能否建立这样的关系直接影响到编译程序的质量。接影响到编译程序的质量。目标机器指令系统的性质决定了指令选择的难以程度,指令系目标机器指令系统的性质决定了指令选择的难以程度,指令系统的一致性和完备性直接影响到这种对应关系的建立。如果目统的一致性和完备性直接影响到这种对应关系的建立。如果目标机器能一致地支持各种数据类型和寻址方式,不需特别处理标机器能一致地支持各种数据类型和寻址方式,不需特别处理例外,这种对应关系的建立就容易得多。例外,这种对应关系的建立就容易得多。指令执行速度和机器特点对产生目标代码的质量也十分重要。指令执行速度和机器特点对产生目标代码的质量也十分重要
7、。显然,如果指令集合丰富的目标机器对于某种操作可提供集中显然,如果指令集合丰富的目标机器对于某种操作可提供集中处理的时候,应该选择效率高、执行速度快的一种。处理的时候,应该选择效率高、执行速度快的一种。编译原理与技术编译原理与技术5青岛大学信息工程学院青岛大学信息工程学院10.1 代码生成器设计的基本问题代码生成器设计的基本问题u寄存器选择寄存器选择 计算机存储单元之间通常都是通过寄存器联系。寄存器可以保计算机存储单元之间通常都是通过寄存器联系。寄存器可以保存计算的中间结果,而且运算对象在寄存器的指令一般都比运存计算的中间结果,而且运算对象在寄存器的指令一般都比运算对象在内存的指令要短且运算的
8、快。因此,充分合理地利用算对象在内存的指令要短且运算的快。因此,充分合理地利用寄存器对生成高质量的代码十分重要。对于寄存器的使用,应寄存器对生成高质量的代码十分重要。对于寄存器的使用,应该考虑程序中的哪些变量驻留在寄存器中、驻留多长时间。进该考虑程序中的哪些变量驻留在寄存器中、驻留多长时间。进一步,哪个变量驻留在哪个寄存器。这些问题可以划分成两个一步,哪个变量驻留在哪个寄存器。这些问题可以划分成两个子问题:子问题:l在寄存器分配期间,为程序的某一点选择驻留在寄存器中的一组变在寄存器分配期间,为程序的某一点选择驻留在寄存器中的一组变量;量;l在随后的寄存器指派阶段,选择变量要驻留的具体寄存器。在
9、随后的寄存器指派阶段,选择变量要驻留的具体寄存器。选择最优的寄存器指派方案极其困难,从数学以上讲,这是一选择最优的寄存器指派方案极其困难,从数学以上讲,这是一个个NP完全问题。如果考虑到目标机器的硬件、操作系统对寄存完全问题。如果考虑到目标机器的硬件、操作系统对寄存器使用的一些要求时,这个问题就变得更加复杂。器使用的一些要求时,这个问题就变得更加复杂。编译原理与技术编译原理与技术6青岛大学信息工程学院青岛大学信息工程学院10.1 代码生成器设计的基本问题代码生成器设计的基本问题u计算顺序的选择计算顺序的选择计算执行的顺序会影响目标代码的质量。改计算执行的顺序会影响目标代码的质量。改变运算的执行
10、顺序可以减少需要用来保存中变运算的执行顺序可以减少需要用来保存中间结果的寄存器的个数,从而提高代码的效间结果的寄存器的个数,从而提高代码的效率。计算顺序最优选择也是一个非常困难的率。计算顺序最优选择也是一个非常困难的问题,一个问题,一个NP完全问题。完全问题。本书不讨论求值顺序问题,简单地就按照源本书不讨论求值顺序问题,简单地就按照源程序或中间代码生成的顺序生成目标代码。程序或中间代码生成的顺序生成目标代码。编译原理与技术编译原理与技术7青岛大学信息工程学院青岛大学信息工程学院10.2 虚拟计算机模型虚拟计算机模型 u作为目标代码生成阶段地址分配的依据作为目标代码生成阶段地址分配的依据 这个目
11、标计算机模型具有这个目标计算机模型具有n个通用寄存器个通用寄存器R0,R1,Rn-1,它们既可以作为累加器,也,它们既可以作为累加器,也可以作为变址器。可以作为变址器。假设目标机器按字节编址,假设目标机器按字节编址,4个字接组成一个个字接组成一个字。我们用字。我们用op表示运算符,用字母表示运算符,用字母M表示内表示内存单元,用字母存单元,用字母C表示常量,用星号表示常量,用星号*表示间表示间址方式存取。这台机器指令的一般形式为址方式存取。这台机器指令的一般形式为操作码操作码 op 源数据域,目的数据域源数据域,目的数据域的二地址指令,表示源数据域和目的据域经的二地址指令,表示源数据域和目的据
12、域经过过op运算以后的结果存到目的数据域。运算以后的结果存到目的数据域。编译原理与技术编译原理与技术8青岛大学信息工程学院青岛大学信息工程学院10.2 虚拟计算机模型虚拟计算机模型指令按照地址模式分为四类,见表指令按照地址模式分为四类,见表10.1类型指令形式含义(假设op是二元运算符)直接地址型op M,Ri(M)op(Ri)Ri寄存器型op Ri,Rj(Ri)op(Rj)Rj变址型op C(Ri),Rj(Ri)+C)op(Ri)Rj间接型op M,Ri(M)op(Ri)Riop Ri,Rj,(Ri)op(Rj)Rjop C(Ri),Rj,(Ri)+C)op(Rj)Rj立即数C常数C如果op
13、是一元运算符,则指令“op M,Ri”的含义为:op(M)Ri,其余类型可以类推。上述指令中的运算符(操作码op)包括一般计算机上常见的一些运算符,如加法ADD、减法SUB、负号NEG、乘法MUL、除法DIV、加1 INC、减1 DEC以及逻辑运算AND、NOT、OR等等。编译原理与技术编译原理与技术9青岛大学信息工程学院青岛大学信息工程学院10.2 虚拟计算机模型虚拟计算机模型当用作源或目的时,内存单元当用作源或目的时,内存单元M和寄存器和寄存器R都代表自身,例如,指令都代表自身,例如,指令MOV R1,M采用直接地址寻址方式,将寄存器采用直接地址寻址方式,将寄存器R1的内容存入内存单元的内
14、容存入内存单元M。MOV 4(R1),M采用变址寻址方式,把寄存器采用变址寻址方式,把寄存器R1的偏移的偏移4的单元的内容存入内存单元的单元的内容存入内存单元M,即表中,即表中(4+R1)M。表中的间接变址寻址方式用前缀表中的间接变址寻址方式用前缀 表示。例如,指令表示。例如,指令MOV 4(R1),R2把地址把地址(4+(R1)中内容所指单元的内容装入寄存器中内容所指单元的内容装入寄存器R2中。中。常数用前缀常数用前缀#表示,下面的指令采用立即数寻址方式,把常数表示,下面的指令采用立即数寻址方式,把常数10装入寄存器装入寄存器R1:MOV#10,R1指令意义指令意义MOV M,Ri把M单元的
15、内容存到寄存器Ri,即(M)RiCJ X 如CT=0或CT=1 转到X单元J X无条件转移到内存单元XCJ X如CT=2 转到X单元CMP M,N比较内存单元M和N的值,根据结果在机器内部特征寄存器CT中设置相应的状态值:MN时CT2CJ X如CT=2或CT=1 转到X单元CJ=X如CT=1 转到X单元CJ X 如CT1 转到X单元CJX如CT=0 转到X单元编译原理与技术编译原理与技术10青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导的目标代码生成语法制导的目标代码生成 u利用属性文法和语法制导技术,直接产生目标代码。基本原理和技术利用属性文法和语法制导技术,直接产生目标代码。基
16、本原理和技术同第同第9章介绍的语法制导的中间代码翻译类似,只是产生的目标语言章介绍的语法制导的中间代码翻译类似,只是产生的目标语言是机器指令。是机器指令。u本节只讨论如何用翻译模式把源程序语言的简单赋值语句和表达式翻本节只讨论如何用翻译模式把源程序语言的简单赋值语句和表达式翻译成目标代码,文法如下:译成目标代码,文法如下:S id:=EE E1+E2|E1 E2|E1|(E1)|idB B1 and B2|B1 or B2|not B1|(B1)|id1 relop id2|true|falseu为了简单起见,这个算术表达式为了简单起见,这个算术表达式E只有加法、乘法与取负运算,不包只有加法、
17、乘法与取负运算,不包含数组、记录等复杂的结构的访问,布尔表达式含数组、记录等复杂的结构的访问,布尔表达式B只包括了三个逻辑只包括了三个逻辑运算符和关系运算符。运算符和关系运算符。u文法表达式文法是二义性的,解决文法二义性的原则采用通常意义的文法表达式文法是二义性的,解决文法二义性的原则采用通常意义的优先级和结合性。下面的翻译模式把目标代码写在了文法的属性优先级和结合性。下面的翻译模式把目标代码写在了文法的属性code中,所使用的函数、变量和属性等与第中,所使用的函数、变量和属性等与第9章的相同。章的相同。编译原理与技术编译原理与技术11青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导
18、的目标代码生成语法制导的目标代码生成(1)S id:=Ep:=lookup(id.name);if p=nil then error else S.code:=E.code|gencode(MOV,E.place,p)(2)E E1+E2E.place:=newtemp;E.code:=E1.code|E2.code|gencode(MOV,E1.place,E.place)|gencode(ADD,E2.place,E.place);(3)E E1*E2E.place:=newtemp;E.code:=E1.code|E2.code|gencode(MOV,E1.place,E.place)
19、|gencode(MUL,E2.place,E.place);编译原理与技术编译原理与技术12青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导的目标代码生成语法制导的目标代码生成(4)E E1E.place:=newtemp;E.code:=E1.code|gencode(MOV,E1.place,E.place);gencode(NEG,E.place);(5)E (E1)E.place:=E1.place;E.code:=E1.code;(6)E idp:=lookup(id.name);if p=nil then error else E.place:=p;E.code:=;编
20、译原理与技术编译原理与技术13青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导的目标代码生成语法制导的目标代码生成在下面布尔表达式的翻译中,我们对布尔表达式的求值翻译采用了短路法。其中J|relop.op表示各种条件的转移指令(表10.2)。(7)B B1 and B2B1.true:=newlabel;B1.false:=B.false;B2.true:=B.true;B2.false:=B.false;B.code:=B1.code|gencode(B1.true,:)|B2.code(8)B B1 or B2B1.true:=B.true;B1.false:=newlabel;
21、B2.true:=B.true;B2.false:=B.false;B.code:=B1.code|gencode(B1.false,:)|B2.code(9)B B1B1.true:=B.false;B2.false:=B.true;B.code:=B1.code 编译原理与技术编译原理与技术14青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导的目标代码生成语法制导的目标代码生成(10)B (B1)B1.true:=B.true;B2.false:=B.false;B.code:=B1.code;(11)B id1 relop id2 t:=newtemp;B.code:=genc
22、ode(MOV,id1.place,t)|gencode(CMP,t,id2.place)|gencode(CJ|relop.op,B.true)|gencode(J,B.false)(12)B truegencode(J,B.true)(13)B falsegencode(J,B.false)编译原理与技术编译原理与技术15青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导的目标代码生成语法制导的目标代码生成u例例10.1 把布尔表达式把布尔表达式ad翻译成目标代码。翻译成目标代码。按照上述翻译模式得到的机器指令如下:按照上述翻译模式得到的机器指令如下:MOV a,t1CMPt2,b
23、CJB.trueJB.falseu其中其中B.true和和B.false需要应用这个布尔条件的语句确需要应用这个布尔条件的语句确定。定。编译原理与技术编译原理与技术16青岛大学信息工程学院青岛大学信息工程学院10.3 语法制导的目标代码生成语法制导的目标代码生成本本节节介介绍绍的的翻翻译译技技术术可可以以应应用用在在简简单单语语言言的的编编译译器器中中,不不适适合合许许多多大大型型实实际际的的程程序序设设计计语语言言。主主要要原原因包括:因包括:(1)从从语语义义分分析析直直接接生生成成目目标标代代码码有有许许多多局局限限性性,例例如如,由由于于目目标标代代码码于于机机器器特特性性紧紧密密相相
24、关关,不不利利于于代代码码的的移移植植和和优优化化,更更好好的的策策略略是是先先产产生生某某种种直直接接代码,然后再翻译成目标指令序列;代码,然后再翻译成目标指令序列;(2)在在上上面面的的翻翻译译模模式式中中,多多处处用用到到了了产产生生临临时时变变量量的的函函数数newtemp,没没有有充充分分考考虑虑目目标标机机器器体体系系结结构构中中的的寄寄存存器器以以及及变变量量值值的的使使用用关关系系,而而且且过过多多的的临临时时变变量量名名还还会会造造成成存存储储分分配配与与寄寄存存器器分分配配的的问问题。题。编译原理与技术编译原理与技术17青岛大学信息工程学院青岛大学信息工程学院10.4 基本
25、块和待用信息基本块和待用信息u基本块及其构造基本块及其构造 对于给定的程序,我们通常把它划分为一系列的基本对于给定的程序,我们通常把它划分为一系列的基本块,根据程序的控制流把这些基本块连接起来,形成块,根据程序的控制流把这些基本块连接起来,形成程序流图。在逐步完成各个基本块的代码生成之后,程序流图。在逐步完成各个基本块的代码生成之后,就生成了整个程序的目标代码。就生成了整个程序的目标代码。基本块是指程序中一顺序执行的语句序列,其中只有基本块是指程序中一顺序执行的语句序列,其中只有一个入口语句和一个出口语句。基本块运行时只能从一个入口语句和一个出口语句。基本块运行时只能从其入口语句进入,从出口语
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 编译 原理 技术 讲义 10
限制150内