freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

第八章代碼生成-資料下載頁

2024-10-11 21:40本頁面

【導(dǎo)讀】一個(gè)簡(jiǎn)單的代碼生成算法。涉及存儲(chǔ)管理,指令選擇,寄存器分配。和計(jì)算次序選擇等基本問題。代碼生成器的設(shè)計(jì)中的問題??芍囟ㄎ荒繕?biāo)模塊。–允許程序模塊分別編譯。–免去編譯器重復(fù)匯編器的工作。–從教學(xué)角度,增加可讀性。難易程度,指令系統(tǒng)的統(tǒng)一性和完備性是重。指令的速度和機(jī)器特點(diǎn)是另一些重要的因素。若不考慮目標(biāo)程序的效率,指令的選擇是直。MOVy,R0/*把y裝入寄存器R0*/. MOVR0,x/*把R0存入x中*/. 逐個(gè)語句地產(chǎn)生代碼,常常得到低質(zhì)量的代碼。ADDe,R0--若a不再使用,第三條也。運(yùn)算對(duì)象處于寄存器中的指令通常比運(yùn)算對(duì)。象處于內(nèi)存的指令要短一些,執(zhí)行也快一些。選擇駐留在寄存器中的一組變量。某種計(jì)算次序可能會(huì)比其它次序需要較少的。寄存器來保存中間結(jié)果。四字節(jié)組成一個(gè)字,有n個(gè)通用寄存器R0,R1,二地址指令op源,目的。地址模式和它們的匯編語言形式及附加代價(jià)。指令代價(jià)取成1加上它的源和目的地址模式的。有很多等價(jià)變換可用于基本塊。刪除局部公共子表達(dá)式。當(dāng)且僅當(dāng)x和y都不是t

  

【正文】 y的值存入寄存器 R, ? 如果 R的值為負(fù),則跳到 z 一個(gè)簡(jiǎn)單的代碼生成器 用條件碼的例子 if x y goto z x := y + z 的實(shí)現(xiàn): if x 0 goto z CMP x, y 的實(shí)現(xiàn): CJ z MOV y, R0 ADD z, R0 MOV R0, x CJ z 本 章 要 點(diǎn) ? 代碼生成器設(shè)計(jì)中的主要問題:存儲(chǔ)管理 、計(jì)算次序的選擇 、 寄存器的分配 、 指令的選擇等 。 ? 目標(biāo)機(jī)器幾種常用的地址模式和一些常用的指令 。 ? 基本塊和程序流圖 。 ? 簡(jiǎn)單的代碼生成算法 。 例 題 1 在 SPARC/SUNOS上,經(jīng)某編譯器編譯,程序的結(jié)果 是 120。把第 4行的 abs(1)改成 1的話,則程序結(jié)果是 1 int fact(){ static int i=5。 if(i==0) { return(1)。 } else { i=i1。 return((i+abs(1))*fact())。} } main(){ printf(factor of 5 = %d\n, fact())。 } 例 題 2 下面的程序在 X86/Linux機(jī)器上編譯后的運(yùn)行結(jié) 果是 7,而在 SPARC/SUNOS機(jī)器上編譯后的運(yùn) 行結(jié)果是 6。試分析運(yùn)行結(jié)果不同的原因。 main() { long i。 i = 0。 printf(%ld\n, (++i)+(++i)+(++i) )。 } 例 題 2 按一般的代碼生成, i = i +1的計(jì)算結(jié)果保留在 寄存器中,因此這三個(gè) i = i +1的計(jì)算次序不會(huì) 影響最終的結(jié)果。結(jié)果應(yīng)該是 6。 + + := i + i 1 := i + i 1 := i + i 1 例 題 2 按一般的代碼生成, i = i +1的計(jì)算結(jié)果保留在 寄存器中,因此這三個(gè) i = i +1的計(jì)算次序不會(huì) 影響最終的結(jié)果。結(jié)果應(yīng)該是 6。 結(jié)果是 7的話,一定是 某個(gè) i = i +1的結(jié)果未保 留在寄存器中 。 上層 計(jì)算對(duì)它的引用落在 計(jì)算另一個(gè) i = i +1的 后面 + + := i + i 1 := i + i 1 := i + i 1 例 題 2 ? 如果機(jī)器有 INC指令的話,編譯器極可能產(chǎn)生一條 INC指令來完成 i = i +1 ? X86/Linux機(jī)器上果真是這么做的 + + := i + i 1 := i + i 1 := i + i 1 例 題 2 將表達(dá)式改成 (++i)+((++i)+(++i)), 結(jié)果會(huì)怎樣? + := i + i 1 + := i + i 1 := i + i 1 例 題 2 將表達(dá)式改成 (++i)+((++i)+(++i)), 結(jié)果會(huì)怎樣? 在 SPARC/SUNOS機(jī)器上的結(jié)果仍然是 6。 在 X86/Linux機(jī)器上的結(jié)果是 9。 + := i + i 1 + := i + i 1 := i + i 1 例 題 3 下面 C語言程序如下 , 運(yùn)行時(shí)輸出 105, 為什么 ? main() { long i。 i=10。 i=(i+5) + (i=i*5)。 printf(%d\n,i)。 } 例 題 3 下面 C語言程序如下 , 運(yùn)行時(shí)輸出 105, 為什么 ? main() { long i。 i=10。 i=(i+5) + (i=i*5)。 printf(%d\n,i)。 } 表達(dá)式 表達(dá)式 表達(dá)式 需 2個(gè) R 需 3個(gè) R 需 幾個(gè) R 習(xí) 題 ? 第一次: (只為 (e)生成代碼)
點(diǎn)擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1