代码生成课件.pptxVIP

代码生成课件.pptx

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

代碼生成

;代碼生成是把語法分析後或優化後的中間代碼變換成目標代碼。

目標代碼一般有以下三種形式:

絕對指令代碼:能夠立即執行的機器語言代碼,所有地址已經定位;

可重新定位指令代碼:也是機器指令,但這些機器指令中的地址分配是以模組為單位進行的,是相對於本模組的相對地址;這種代碼必須經過鏈接程式,把若干個模組的這種可重定位的指令代碼連接成一個絕對指令代碼,要把相對地址通過這個鏈接程式變成絕對地址;

組合語言代碼:尚須經過組合語言程式彙編,轉換成可執行的機器語言代碼。;代碼生成著重考慮的問題:

如何使生成的目標代碼較短;

如何充分利用電腦的寄存器,減少目標代碼中訪問存貯單元的次數。

如何充分利用電腦的指令系統的特點。;11.1基本問題;11.1基本問題;11.1基本問題;第十一章代碼生成

;11.2目標機器模型;如果op是一目運行符,則“opRi,M”的意義為:op(M)?Ri,其餘類型可類推。;不考慮代碼的執行效率,目標代碼生成是不難的,例如:

A:=(B+C)*D+E

翻譯為四元式:

T1:=B+C

T2:=T1*D

T3:=T2+E

A:=T3

;;11.3一個簡單代碼生成器;11.3.1待用資訊;待用資訊和活躍資訊的表示:

1(x,x)表示變數的待用資訊和活躍資訊。其中i表示待用資訊,y表示活躍,^表示非待用和非活躍;

2在符號表中,(x,x)→(x,x)表示後面的符號對代替前面的符號對;

3不特別說明,所有說明變數在基本塊出口之後均為非活躍變數。;例:基本塊

1. T:=A-B

2. U:=A-C

3. V:=T+U

4. W:=V+U

設W是基本塊出口之後的活躍變數。;計算待用資訊和活躍資訊的演算法步驟:

1.開始時,把基本塊中各變數的符號表登記項中的待用資訊欄填為“非待用”,並根據該變數在基本塊出口之後是不是活躍的,把其中的活躍資訊欄填為“活躍”或“非活躍”;;2.從基本塊出口到基本塊入口由後向前依次處理各個四元式。對每一個四元式i:A:=BopC,依次執行下麵的步驟:

1)把符號表中變數A的待用資訊和活躍資訊附加到四元式i上;

2)把符號表中A的待用資訊和活躍資訊分別置為“非待用”和“非活躍”;

3)把符號表中變數B和C的待用資訊和活躍資訊附加到四元式i上;

4)把符號表中B和C的待用資訊均置為i,活躍資訊均置為“活躍”。;例:基本塊

1. T:=A-B

2. U:=A-C

3. V:=T+U

4. W:=V+U

設W是基本塊出口之後的活躍變數。

建立待用資訊鏈表與活躍變數資訊鏈表;附加在四元式上的待用/活躍資訊表:;寄存器描述數組RVALUE

動態記錄各寄存器的使用資訊

RVALUE[R]={A,B}

變數地址描述數組AVALUE

動態記錄各變數現行值的存放位置

AVALUE[A]={R1,R2,A};補充說明:

因為寄存器的分配是局限於基本塊範圍之內的,一旦處理完基本塊中所有四元式,對現行值在寄存器中的每個變數,如果它在基本塊之後是活躍的,則要把它存在寄存器中的值存放到它的主存單元中。

要特別強調的是,對形如:A:=B的四元式,如果B的現行值在某寄存器Ri中,則無須生成目標代碼,只須在RVALUE(Ri)中增加一個A,(即把Ri同時分配給B和A),並把AVALUE(A)改為Ri。;代碼生成演算法:

對每個四元式:i:A:=BopC,依次執行:

1.以四元式:i:A:=BopC為參數,調用函數過程GETREG(i:A:=BopC),返回一個寄存器R,用作存放A的寄存器。

2.利用AVALUE[B]和AVALUE[C],確定B和C現行值的存放位置B’和C’。如果其現行值在寄存器中,則把寄存器取作B’和C’

;3.如果B’≠R,則生成目標代碼:

LDR,B’

opR,C’

否則生成目標代碼opR,C’

如果B’或C’為R,則刪除AVALUE[B]或AVALUE[C]中的R。

4.令AVALUE[A]={R},RVALUE[R]={A}。;5.若B或C的現行值在基本塊中不再被引用,也不是基本塊出口之後的活躍變數,且其現行值在某寄存器Rk中,則刪除RVALUE[Rk]中的B或C以及AVALUE[B]或AVALUE[C]中的Rk,使得該寄存器不再為B或C佔用。;寄存器分配:GETREG(i:A:=BopC)返回一個用來存放A的值的寄存器

1如果B的現行值在某個寄存器Ri中,RVALUE[Ri]中只包含B,此外,或者B與A

文档评论(0)

子不语 + 关注
官方认证
服务提供商

平安喜乐网络服务,专业制作各类课件,总结,范文等文档,在能力范围内尽量做到有求必应,感谢

认证主体菏泽喜乐网络科技有限公司
IP属地山东
统一社会信用代码/组织机构代码
91371726MA7HJ4DL48

1亿VIP精品文档

相关文档