- 1、本文档共29页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- 动脉粥样硬化.ppt
- 动脉粥样硬化.ppt
- 短期财务决策课件.ppt
- 短期筹资课件.ppt
- 短期资金筹划课件.ppt
- 对内投资管理课件.ppt
- 对外投资管理课件.ppt
- 对外投资管理课件.ppt
- 对外长期投资决策课件.ppt
- 对外长期投资课件.ppt
- 5.4 化石燃料(教案) 2024-2025学年科粤版九年级化学上册.docx
- 赣美版七年级下册美术 3.图形创意设计 教案.docx
- 5.2 一元一次方程教学设计-2024-2025学年冀教版(2024)七年级数学 上册.docx
- 华中师大版七下信息技术 1.4有更多内容可以下载--下载图片和文字 教学设计.docx
- 2024-2025学年应对校园霸凌心理辅导的中职生教学设计.docx
- Unit2 My week Part B Let's talk & Let's learn大单元教学设计(含教学反思).docx
- 地理仁爱科普版八下7.2 长江沿江地带 教案(2课时).docx
- 盐类水解教案化学.docx
- 6.2《五石之瓠》教学设计-2024-2025学年统编版高中语文选择性必修上册.docx
- 我和水果交朋友(教学设计)全国通用二年级下册综合实践活动.docx
文档评论(0)