- 1、本文档共25页,可阅读全部内容。
- 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代碼生成器的設計中的問題語句序列 a:=b+c d:=a+e的代碼如下MOV b, R0ADD c, R0MOV R0, aMOV a, R0 --多餘的指令ADD e, R0 --若a不再使用,第三條也MOV R0, d 多餘11.1代碼生成器的設計中的問題11.1.3寄存器分配 運算對象處於寄存器中的指令通常比運算對象處於記憶體的指令要短一些,執行也快一些寄存器分配 選擇駐留在寄存器中的一組變數寄存器指派 挑選變數要駐留的具體寄存器11.1代碼生成器的設計中的問題11.1.4計算次序的選擇 某種計算次序可能會比其他次序需要較少的寄存器來保存中間結果11.2目標機器模型11.2.1目標機器的指令系統採用模型機作為目標機器二地址指令op 目的,源 LD {源傳到目的} ADD {源加到目的} SUB {目的減去源}11.2目標機器模型指令實例 LD R0, M ST R0,MSTR0,4(R1) contents(4+contents(R1)) LDR0, *4(R0) contents(contents(4+contents(R0))) LD R0, #111.3一個簡單的代碼生成器依次考慮基本塊的每個語句,為其產生代碼假定三地址語句的每種算符都有對應的目標機器算符假定計算結果留在寄存器中盡可能長的時間, 除非:該寄存器要用於其他計算,或者到基本塊結束11.3一個簡單的代碼生成器以基本塊為單位來生成代碼A:=(B+C)*D+EAssign.exe生成中間代碼P313復習局部優化285頁關於優化的說明11.3一個簡單的代碼生成器以基本塊為單位來生成代碼A:=(B+C)*D+ET1:=B+CT2:=T1*DA:=T2+E該目標代碼的缺點?應該如何改進?(1)LDR0,B(2)ADDR0,C(3)STR0T1(4)LDR0,T1(5)MULR0,D(6)STR0,T2(7)LDR0,T2(8)ADDR0,E(9)STR0,A11.3一個簡單的代碼生成器1待用資訊、寄存器描述和地址描述目的:把基本塊內還要被引用的變數儘量保存在寄存器內做法:需要收集待用資訊演示DaiYongXinXi.exe代碼生成時需要動態的寄存器描述和地址描述11.3一個簡單的代碼生成器在代碼生成過程中,需要跟蹤寄存器的內容和名字的地址寄存器描述記住每個寄存器當前存的是什麼在任何一點,每個寄存器保存若干個(包括零個)名字的值名字的地址描述記住運行時每個名字的當前值可以在哪個場所找到這個場所可以是寄存器、棧單元、記憶體地址、甚至是它們的某個集合這些資訊可以存於符號表中這兩個描述在代碼生成過程中是變化的。11.3一個簡單的代碼生成器2簡單的代碼生成演算法對每個三地址語句x:=yopz調用函數getreg決定放yopz計算結果的場所L查看y的地址描述,確定y值當前的一個場所y?.如果y的值還不在L中,產生指令MOVy?,L產生指令opz?,L,其中z?是z的當前場所之一如果y和/或z的當前值不再引用,在塊的出口也不活躍,並且還在寄存器中,那麼修改寄存器描述11.3一個簡單的代碼生成器寄存器選擇函數函數getreg返回保存x:=yopz的x值的場所L如果名字y在R中,這個R不含其他名字的值,並且在執行x:=yopz後y不再有下次引用,那麼返回這個R作為L。否則,返回一個空閒寄存器,如果有的話否則,如果x在塊中有下次引用,或者op是必須用寄存器的算符,那麼找一個已被佔用的寄存器R(可能產生MOVR,M指令,並修改M的描述)否則,如果x在基本塊中不再引用,或者找不到適當的被佔用寄存器,選擇x的記憶體單元作為L。*************************目標代碼一般有以下三種形式:(1)能夠立即執行的機器語言代碼,所有地址均已定位。(2)待裝配的機器語言模組。當需要執行時,由連接裝入程式把它們和某些運行程式連接起來,轉換成能執行的機器語言代碼。(3)組合語言代碼,尚需經過組合語言程式彙編,轉換成可執行的機器語言代碼。1
文档评论(0)