第十一章 目标代码生成_第1页
第十一章 目标代码生成_第2页
第十一章 目标代码生成_第3页
第十一章 目标代码生成_第4页
第十一章 目标代码生成_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第十一章 目标代码生成词法分析器词法分析器语法分析器语法分析器中间代码生成器中间代码生成器优化段优化段源程序源程序单词符号单词符号语法单位语法单位四元式四元式表表格格管管理理出出错错处处理理目标代码生成器目标代码生成器四元式四元式目标代码目标代码内容线索n基本问题基本问题n目标机器模型目标机器模型 n一个简单的代码生成器一个简单的代码生成器代码生成n代码生成器代码生成器代码生成器的输入包括源程序的中间表示,以代码生成器的输入包括源程序的中间表示,以及符号表中的信息及符号表中的信息n利用符号表信息决定数据对象运行时地址利用符号表信息决定数据对象运行时地址n类型检查类型检查编译前端编译前端代码优化

2、代码优化代码生成器代码生成器符号表符号表目标代码生成n代码生成代码生成是把语义分析后或优化后的中间是把语义分析后或优化后的中间代码变换成目标代码。代码变换成目标代码。n代码生成着重考虑的问题代码生成着重考虑的问题如何使生成的目标代码较短;如何使生成的目标代码较短;如何充分利用计算机的寄存器,减少目标代码如何充分利用计算机的寄存器,减少目标代码中访问存贮单元的次数。中访问存贮单元的次数。如何充分利用计算机的指令系统的特点。如何充分利用计算机的指令系统的特点。基本问题n目标代码一般有以下三种形式:目标代码一般有以下三种形式:能够立即执行的机器语言代码能够立即执行的机器语言代码,所有地址已经,所有地

3、址已经定位;定位;待装配的机器语言模块待装配的机器语言模块。执行时,由连接装配。执行时,由连接装配程序把它们和某些运行程序连接起来,转换成程序把它们和某些运行程序连接起来,转换成能执行的机器语言代码;能执行的机器语言代码;汇编语言代码汇编语言代码。尚须经过汇编程序汇编,转换。尚须经过汇编程序汇编,转换成可执行的机器语言代码。成可执行的机器语言代码。基本问题 n指令选择指令选择一致性和完整性一致性和完整性指令速度和机器用语指令速度和机器用语a:=a+1nINC a /*实现最有效实现最有效*/nLD R0, a /*将将a放入寄存器放入寄存器R0*/ ADD R0, #1 /*1与与R0相加相加

4、*/ ST R0, a /*R0的值存入的值存入a*/基本问题 n寄存器分配寄存器分配 在寄存器分配期间,为程序的某一点选择驻留在寄存器分配期间,为程序的某一点选择驻留在寄存器中的一组变量。在寄存器中的一组变量。在随后的寄存器指派阶段,挑出变量将要驻留在随后的寄存器指派阶段,挑出变量将要驻留的具体寄存器。的具体寄存器。最优寄存器指派是最优寄存器指派是NP完全问题完全问题n计算顺序选择计算顺序选择 内容线索基本问题基本问题n目标机器模型目标机器模型 n一个简单的代码生成器一个简单的代码生成器目标机器模型 n考虑一个抽象的计算机模型考虑一个抽象的计算机模型具有多个通用寄存器,他们既可以作为累加器,

5、具有多个通用寄存器,他们既可以作为累加器,也可以作为变址器。也可以作为变址器。运算必须在某个寄存器中进行。运算必须在某个寄存器中进行。含有四种类型的指令形式含有四种类型的指令形式类类 型型指令形式指令形式意义意义(设设 op 是二目运是二目运算符算符)直接地址型直接地址型op Ri, M(Ri) op (M) Ri寄存器型寄存器型op Ri, Rj(Ri) op (Rj) Ri变址型变址型op Ri, c(Rj)(Ri) op (Ri)+c) Ri间接型间接型op Ri, *Mop Ri, *Rjop Ri, *c(Rj) (Ri) op (M) Ri(Ri) op (Rj) Ri(Ri) o

6、p (Rj)+c) Ri如果如果op是一目运行符,则是一目运行符,则“op Ri, M”的意的意义为:义为:op(M) Ri,其余类型可类推。,其余类型可类推。op 包括一般计算机上常见的一些运算符,如包括一般计算机上常见的一些运算符,如ADD加加SUB减减MUL乘乘DIV除除指指 令令意意 义义LD Ri, B把把 B 单元的内容取到寄存器单元的内容取到寄存器 R,即,即(B) RiST Ri, B把寄存器把寄存器 Ri的内容存到的内容存到 B 单元,即单元,即(Ri) BJ X无条件转向无条件转向 X 单元单元CMP A, B 把把 A 单元和单元和 B 单元的值进行比较,并根据比较单元的

7、值进行比较,并根据比较情况把机器内部特征寄存器情况把机器内部特征寄存器 CT 置成相应状置成相应状态。态。 CT 占两个二进位。 根据占两个二进位。 根据 AB分别置分别置 CT 为为 0 或或 1 或或 2。J X如如 CT=0 转转 X 单元单元J X如如 CT=0 或或 CT=1 转转 X 单元单元J X如如 CT=1 转转 X 单元单元J X如如 CT1 转转 X 单元单元J X如如 CT=2 转转 X 单元单元J X如如 CT=2 或或 CT=1 转转 X 单元单元内容线索基本问题基本问题目标机器模型目标机器模型 n一个简单的代码生成器一个简单的代码生成器n不考虑代码的执行效率,目标

8、代码生成不考虑代码的执行效率,目标代码生成是不难的,例如:是不难的,例如:A:=(B+C)*D+E翻译为四元式:翻译为四元式:T1:=B+CT2:=T1*DT3:=T2+EA:=T3 一个简单代码生成器假设只有一个寄存器可供使用假设只有一个寄存器可供使用目标代码:目标代码: LD R0,BADD R0 ,CST R0 ,T1假设假设T1,T2,T3在基本块之在基本块之后不再引用后不再引用:LD R0,BADD R0,CMUL R0,DADD R0,EST R0,A 四元式四元式T1:=B+CT3:=T2+ET2:=T1*DA:=T3 LD R0 ,T1MUL R0,DST R0 ,T2LD R

9、0 ,T2ADD R0 ,EST R0 ,T3LD R0,T3 ST R0 ,A一个简单代码生成器n四元式的中间代码变换成目标代码,并在一个四元式的中间代码变换成目标代码,并在一个基本块的范围内考虑如何充分利用寄存器:基本块的范围内考虑如何充分利用寄存器:尽可能留尽可能留:在生成计算某变量值的目标代码:在生成计算某变量值的目标代码时,尽可能让该变量保留在寄存器中。时,尽可能让该变量保留在寄存器中。尽可能用尽可能用:后续的目标代码尽可能引用变量:后续的目标代码尽可能引用变量在寄存器中的值,而不访问内存。在寄存器中的值,而不访问内存。及时腾空及时腾空:在离开基本块时,把存在寄存器:在离开基本块时,

10、把存在寄存器中的现行的值放到主存中。中的现行的值放到主存中。待用信息n如果在一个基本块内,四元式如果在一个基本块内,四元式i对对A定值,定值,四元式四元式j要引用要引用A值,而从值,而从i到到j之间没有之间没有A的其他定值,那么,我们称的其他定值,那么,我们称j是四元式是四元式i的的变量变量A的的待用信息待用信息。(即下一个引用点)。(即下一个引用点)i: A:=B op Cj: D:=A op En假设在变量的符号表登记项中含有记录假设在变量的符号表登记项中含有记录待用信息和活跃信息的栏。待用信息和活跃信息的栏。待用信息和活跃信息的表示待用信息和活跃信息的表示1 (x,x)表示变量的待用信息

11、和活跃信息。其表示变量的待用信息和活跃信息。其中中i表示待用信息,表示待用信息,y表示活跃,表示活跃,表示非待表示非待用和非活跃;用和非活跃;2 在符号表中,在符号表中,(x,x)(x,x)表示后面的符表示后面的符号对代替前面的符号对;号对代替前面的符号对;3 不特别说明,所有说明变量在基本块出口不特别说明,所有说明变量在基本块出口之后均为非活跃变量。之后均为非活跃变量。n计算待用信息和活跃信息的算法步骤:计算待用信息和活跃信息的算法步骤:1. 开始时,把基本块中各变量的符号表登开始时,把基本块中各变量的符号表登记项中的待用信息栏填为记项中的待用信息栏填为“非待用非待用”,并根据该变量在基本块

12、出口之后是不是并根据该变量在基本块出口之后是不是活跃的,把其中的活跃信息栏填为活跃的,把其中的活跃信息栏填为“活活跃跃”或或“非活跃非活跃”;2. 从基本块出口到基本块入口从基本块出口到基本块入口由后向前由后向前依次处依次处理各个四元式。对每一个四元式理各个四元式。对每一个四元式i: A:=B op C,依次执行下面的步骤:,依次执行下面的步骤: 1) 把符号表中变量把符号表中变量A的待用信息和活跃信息的待用信息和活跃信息附加到四元式附加到四元式i上;上; 2) 把符号表中把符号表中A的待用信息和活跃信息分别的待用信息和活跃信息分别置为置为“非待用非待用”和和“非活跃非活跃”; 3) 把符号表

13、中变量把符号表中变量B和和C的待用信息和活跃的待用信息和活跃信息附加到四元式信息附加到四元式i上;上; 4) 把符号表中把符号表中B和和C的待用信息均置为的待用信息均置为i,活,活跃信息均置为跃信息均置为“活跃活跃”。例:基本块例:基本块1. T:=A-B2. U:=A-C3. V:=T+U4. W:=V+U设设W是基本块出口之后的活跃变量。是基本块出口之后的活跃变量。建立待用信息链表与活跃变量信息链表如下:建立待用信息链表与活跃变量信息链表如下:n附加在四元式上的待用/活跃信息表:(4)W:=V+U(3)V:=T+U(2)U:=A-C(1)T:=A-B(,y)(,)(,)(4,y)(,)(4

14、,y)(3,y)(,)(,) (3,y)(2,y)(,) 序号序号 四元式四元式 左值左值 左操作数左操作数 右操作数右操作数变量名变量名初始状态初始状态信息链信息链(待用待用/活跃信息栏活跃信息栏) (3,y) (,) (2,y) (1,y) (1,y) (2,y) (4,y) (,) (3,y)T(,)A(,)B(,)C(,)U(,)V(,)W (,y) (,) (4,y) (,)寄存器描述和地址描述n寄存器描述数组寄存器描述数组RVALUE动态记录各寄存器的使用信息动态记录各寄存器的使用信息 例:例:RVALUER=A,Bn变量地址描述数组变量地址描述数组AVALUE动态记录各变量现行值

15、的存放位置动态记录各变量现行值的存放位置 例:例:AVALUEA=R1, R2, An补充说明:补充说明:因为寄存器的分配是局限于基本块范围之因为寄存器的分配是局限于基本块范围之内的,一旦处理完基本块中所有四元式,内的,一旦处理完基本块中所有四元式,对现行值在寄存器中的每个变量,如果它对现行值在寄存器中的每个变量,如果它在基本块之后是活跃的,则要把它存在寄在基本块之后是活跃的,则要把它存在寄存器中的值存放到它的主存单元中。存器中的值存放到它的主存单元中。要特别强调的是,对形如:要特别强调的是,对形如:A:=B的四元式,的四元式,如果如果B的现行值在某寄存器的现行值在某寄存器Ri中,则无须生中,

16、则无须生成目标代码,只须在成目标代码,只须在RVALUE(Ri)中增加一中增加一个个A,(即把即把Ri同时分配给同时分配给B和和A),并把,并把AVALUE(A)改为改为Ri 。代码生成算法对每个四元式对每个四元式: i: A:=B op C,依次执行:,依次执行: 1. 以四元式以四元式: i: A:=B op C 为参数,为参数,调用函数过程调用函数过程GETREG(i: A:=B op C),返回一个寄存器返回一个寄存器R,用,用作存放作存放A的寄存器。的寄存器。 2. 利用利用AVALUEB和和AVALUEC,确定,确定B和和C现行现行值的存放位置值的存放位置B和和C。如果其现行值在寄

17、存器。如果其现行值在寄存器中,则把寄存器取作中,则把寄存器取作B和和C3. 如果如果BR,则生成目标代码:,则生成目标代码: LD R, B op R, C 否则生成目标代码否则生成目标代码 op R, C 如果如果B或或C为为R,则删除,则删除AVALUEB或或AVALUEC中的中的R。4. 令令AVALUEA=R, RVALUER=A。5. 若若B或或C的现行值在基本块中不再被引用,也不的现行值在基本块中不再被引用,也不是基本块出口之后的活跃变量,且其现行值在某是基本块出口之后的活跃变量,且其现行值在某寄存器寄存器Rk中,则删除中,则删除RVALUERk中的中的B或或C以及以及AVALUE

18、B或或AVALUEC 中的中的Rk ,使得该寄存,使得该寄存器不再为器不再为B或或C占用。占用。n寄存器分配:寄存器分配:GETREG(i: A:=B op C) 返返回一个用来存放回一个用来存放A的值的寄存器的值的寄存器1 如 果如 果 B 的 现 行 值 在 某 个 寄 存 器的 现 行 值 在 某 个 寄 存 器 Ri中 ,中 ,RVALUERi中只包含中只包含B,此外,或者,此外,或者B与与A是是同一个标识符同一个标识符,或者,或者B的现行值在执行四元式的现行值在执行四元式A:=B op C之后不会再引用之后不会再引用,则选取,则选取Ri为所需为所需要的寄存器要的寄存器R,并转,并转4

19、;2 如果有尚未分配的寄存器,则从中选取一个如果有尚未分配的寄存器,则从中选取一个Ri为所需要的寄存器为所需要的寄存器R,并转,并转4;1 尽可能用尽可能用B独占的寄存器独占的寄存器2 尽可能用空闲寄存器尽可能用空闲寄存器3 抢占用非空闲寄存器抢占用非空闲寄存器3 从已分配的寄存器中选取一个从已分配的寄存器中选取一个Ri为所需要的寄为所需要的寄存器存器R。最好使得。最好使得Ri满足以下条件:满足以下条件: 占用占用Ri的变量的值也同时存放在该变量的贮存的变量的值也同时存放在该变量的贮存单元中,或者在基本块中要在最远的将来才会单元中,或者在基本块中要在最远的将来才会引用到或不会引用到。引用到或不会引用到。4. 要不要为要不要为Ri中的变量生成存数指令?中的变量生成存数指令?1 尽可能用尽可能用B所在的寄存器所在的寄存器2 尽可能用空闲寄存器尽可能用空闲寄存器3 抢占用非空闲寄存器抢占用非空闲寄存器4. 要不要为要不要为Ri中的变量中的变量V生成存数指令?生成存数指令? (1)如果)如果V的地址描述数组的地址描述数组AVALUEV说说V还保还保存在存在R之外的其他地方,则不需要生成存数指之外的其他地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论