- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章 编原理目标代码生成
第7章 目标代码生成 ;7.1 一个简单代码生成器; 例如,一C语言语句为A=(B+C)*D+E,把它翻译为四元式G:
T1=B+C
T2=T1*D
A=T2+E
如果不考虑代码的效率,可以简单地把每条中间代码(四元式)映射成若干条目标指令,如将x=y+z映射为:
MOV AX, y /*AX为寄存器*/
ADD AX, z
MOV x, AX;其中,x、y、z均为数据区的内存变量。
这样,上述四元式代码序列G就可翻译为:
(1) ?MOV AX, B
(2) ?ADD AX, C
(3) ?MOV T1, AX
(4) ?MOV AX, T1
(5) ?MUL AX, D
(6) ?MOV T2, AX
(7) ?MOV AX, T2
(8) ?ADD AX, E
(9) ?MOV A, AX ; 虽然从正确性来看,这种翻译不存在问题,但它却存在冗余。在上述指令序列中,(4)和(7)两条指令是多余的;而T1、T2均是中间代码生成时产生的临时变量,它们在出了基本块后将不再使用,故(3)、(6)两条指令也可删去。所以,在考虑了效率和充分使用寄存器之后,应生成如下代码:
;(1) ?MOV AX, B
(2) ?ADD AX, C
(3) ?MUL AX, D
(4) ?ADD AX, E
(5) ?MOV A, AX
; 7.1.1 待用信息与活跃信息
在一个基本块内的目标代码中,为了提高寄存器的使用效率,应将基本块内还要被引用的值尽可能地保留在寄存器中,而将基本块内不再被引用的变量所占用的寄存器尽早释放。每当翻译一条四元式如A=B op C时,需要知道在基本块中还有哪些四元式要对变量A、B、C进行引用,为此,需要收集一些待用信息。在一个基本块中,四元式i对变量A定值,如果i后面的四元式j要引用A且从i到j的四元式没有其它对A的定值点,则称j是四元式i中对变量A的待用信息,同时也称A是活跃的;如果A被多处引用,则构成了A的待用信息链与活跃信息链。; 为了取得每个变量在基本块内的待用信息和活跃信息,可从基本块的出口由后向前扫描,对每个变量建立相应的待用信息链与活跃信息链。如果没有进行数据流分析并且临时变量不允许跨基本块引用,则把基本块中的临时变量均看作基本块出口之后的非活跃变量,而把所有的非临时变量均看作基本块出口之后的活跃变量。如果某些临时变量能够跨基本块使用,则把这些临时变量也看成基本块出口之后的活跃变量。
假设变量的符号表内有待用信息和活跃信息栏,则计算变量待用信息的算法如下:
; (1) 首先将基本块中各变量的符号表的待用信息栏置为“非待用”,对活跃信息栏则根据该变量在基本块出口之后是否活跃而将该栏中的信息置为“活跃”或“非活跃”。
(2) 从基本块出口到基本块入口由后向前依次处理各四元式。对每个四元式i:A=B op C依次执行以下步骤:
; ① 把符号表中变量A的待用信息和活跃信息附加到四元式i上;
② 把符号表中变量A的待用信息和活跃信息分别置为“非待用”和“非活跃”;
③ 把符号表中变量B和C的待用信息和活跃信息附加到四元式i上;
? ④ 把符号表中B和C的待用信息置为i,活跃信息置为“活跃”。
; 例7.1 考察基本块:
(1) ?T=A?B
(2) ?U=A?C
(3) ?V=T+U
(4) ?D=V+U
其中,A、B、C、D为变量,T、U、V为中间变量,试求各变量的待用信息链和活跃信息链。
; [解答] 我们根据计算变量待用信息的算法得到各变量的待用信息链和活跃信息链如表7.1所示。表中的“F”表示“非待用”或“非活跃”,“L”表示“活跃”,(1)~(4)分别表示基本块中的四个四元式。待用信息链和活跃信息链的每列从左到右为每行从后向前扫描一个四元式时相应变量的信息变化情况(空白处表示没有变化)。
;表7.1 例7.1的待用信息链和活跃信息链;待用信息和活跃信息在四元式上的标记如下:
(1) ?T(3)L=A(2)L???BFL
您可能关注的文档
最近下载
- 人工智能人脸识别PPT课件.pptx VIP
- 课堂教学组织形式.ppt VIP
- DB50_T1408-2023_金针菇采收与贮运技术规范_重庆市.docx VIP
- 肩袖生物修复技术在巨大肩袖撕裂治疗中的短期疗效解析与展望.docx VIP
- 贵州医科大学2024-2025学年《食品化学》期末考试试卷(A卷)附参考答案.docx
- 黑布林版名著阅读《the fisherman and his soul》课件.pptx VIP
- 形态语意03——产品语意设计(1-2011).ppt VIP
- 工程项目合作共赢方案(3篇).docx VIP
- 无人机空气动力学与飞行原理:电动垂直起降飞行器气动布局PPT教学课件.pptx
- 高新技术企业财产一切保险.doc VIP
原创力文档


文档评论(0)