收藏 分享(赏)

编译第六章.ppt

上传人:czsj190 文档编号:8465589 上传时间:2019-06-29 格式:PPT 页数:9 大小:277.50KB
下载 相关 举报
编译第六章.ppt_第1页
第1页 / 共9页
编译第六章.ppt_第2页
第2页 / 共9页
编译第六章.ppt_第3页
第3页 / 共9页
编译第六章.ppt_第4页
第4页 / 共9页
编译第六章.ppt_第5页
第5页 / 共9页
点击查看更多>>
资源描述

1、第六章 目标代码生成,一 概述1 目标代码的形式(1)能立即执行的目标代码;(2)待装配的浮动目标代码;(3)汇编语言目标代码.2 目标代码生成原则(1) 生成的目标代码短而高效;(2) 充分利用寄存器,减少访问内存的次数.,2,3,三 代码生成器及辅助信息基本思想: 当生成计算某变量值的目标代码时,尽量让该变量 的值保存在某个寄存器中,直到该寄存器要用来存放其它变量的值 或者基本块结束之前不再引用该变量的值,才把该变量的值存放 到存储器中.为了能知道某变量的值是否在寄存器中,在那个寄存器中,是 否该送回内存中等,需要一些辅助信息. 1 待用信息当翻译到四元式 A:=B op C 时,我们需要

2、知道基本块内后面 的四元式是否还引用 A B C ,是哪些四元式引用?定义: 设四元式(i) 对A定值且到达四元式( j) ,四元式 ( j) 中引用A ,则称 j 是四元式 i 的变量A 的待用信息; 满足上述定义的所有 j, 构成了 A 的待用信息集.,4,采用如下方式表示待用信息集,为每个四元式建立一个如下的表项:定值名 指针 引用名1 指针 引用名2 指针A * B * C *A * B NilC Nil,通过链表把 A 的所有待用信息连接起来.当执行到 A:=B op C 时,就可以检查待用信息链,确定 A B C 在该四元式之后是否还引 用(若为 Nil ,表示不再引用, 此时,应

3、将非活跃变量的寄存器释放, 存入内存中).,5,2 寄存器描述假设系统可以使用的寄存器为:R1,R2,Rn每个寄存器都需要描述是否被占用,被哪些变量占用? 假设 RVALUE Ri 为集合类型,用于描述寄存器 Ri 的使用情况, 也即哪些变量同时占用了 Ri. 3 变量描述在翻译过程中,应了解基本块中的每个变量的存储状况,确定 变量的值是在寄存器中还是在内存中?假设 AVALUE A 为集合类型,用于描述变量 的存储情况:,AVALUE A=, Ri A的有效值在寄存器中; M A的有效值在内存中; Ri,M 均有效.,6,4 代码生成算法下面,仅讨论一般情形 A:=B op C 的代码翻译,

4、GetReg( A:= B op C) 函数返回一个寄存器 R ,存放变量 A的值. 代码生成算法: (对四元式 A:= B op C) (1) 令 R = GetReg( A:= B op C) ;(2) 由 AVALUE A , AVALUE B 确定 变量 B C 值的有效存储位置 B,C(3) 若 B=R 生成 机器指令 op B,C否则 生成机器指令 mov R,Bop R,C若 B=R ,则删除 AVALUE B 中的 R ;若 C=R ,则删除 AVALUE C 中的 R;令 AVALUE A = R ; RVALUE R = A ;,7,(4) 若 B 的值在基本块内不再引用,

5、且 AVALUE B= Ri则产生目标指令 : mov Ri,B;删除 AVALUE B 中的 Ri; 删除 RVALUE Ri 中的 B;/释放寄存器 Ri.(5) 若 C 的值在基本块内不再引用,且 AVALUE C= Ri则产生目标指令 : mov Ri,C;删除 AVALUE C 中的 Ri; 删除 RVALUE Ri 中的 C;/释放寄存器 Ri.(6) 返回,8,5 GetReg( A:= B op C) 算法(1) 若 B 的值在 R 中, 且 RVALUER 只含 B,且 ( A=B 或 B 的值在基本块内不再引用并且 B 的值已存入内存中) 则 return (R);(2) 否则,若有尚未分配的 R 则 return(R);(3) 否则,从已分配的寄存器中选择一 R ,for (RVALUE R 中的每一变量 V) do 若 V 的值不在内存中,则Mov V, R; AVALUE V= M; RVALUE R= ;return (R),9,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报