編譯原理課件:8-第八章_存儲空間組織-4節(jié)_第1頁
編譯原理課件:8-第八章_存儲空間組織-4節(jié)_第2頁
編譯原理課件:8-第八章_存儲空間組織-4節(jié)_第3頁
編譯原理課件:8-第八章_存儲空間組織-4節(jié)_第4頁
編譯原理課件:8-第八章_存儲空間組織-4節(jié)_第5頁
已閱讀5頁,還剩9頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、8.4 簡單的棧式存儲分配簡單的棧式存儲分配 C語言語言過程的數(shù)據(jù)區(qū)過程的數(shù)據(jù)區(qū)數(shù)數(shù) 組組 區(qū)區(qū)活動記錄活動記錄 8.4.1 8.4.1 語言特性:語言特性: 過程允許遞歸調(diào)用過程允許遞歸調(diào)用;8.4.2 8.4.2 存儲區(qū)結(jié)構(gòu):存儲區(qū)結(jié)構(gòu): 例:例:全局?jǐn)?shù)據(jù)說明全局?jǐn)?shù)據(jù)說明Main()Main() main main中數(shù)據(jù)說明中數(shù)據(jù)說明 R R; Void R()Void R() R R中數(shù)據(jù)說明中數(shù)據(jù)說明 Q Q; Void Q()Void Q() Q Q中數(shù)據(jù)說明中數(shù)據(jù)說明 R R L L處處 過程調(diào)用順序:過程調(diào)用順序:mainRmainR1 1QRQR2 2存儲空間:存儲空間:TOP

2、 R2數(shù)組區(qū)數(shù)組區(qū)SP 活動記錄活動記錄Q數(shù)組區(qū)數(shù)組區(qū)活動記錄活動記錄R1數(shù)組區(qū)數(shù)組區(qū)活動記錄活動記錄main數(shù)組區(qū)數(shù)組區(qū)活動記錄活動記錄全局?jǐn)?shù)據(jù)區(qū)全局?jǐn)?shù)據(jù)區(qū)SPSP:現(xiàn)行過程活動記錄的起點(diǎn);:現(xiàn)行過程活動記錄的起點(diǎn);TOPTOP:已占用存儲空間的棧頂單元;:已占用存儲空間的棧頂單元;8.4.3 C 的活動記錄的活動記錄TOPTOP臨時單元臨時單元內(nèi)情向量內(nèi)情向量局部變量局部變量形式單元形式單元參數(shù)個數(shù)參數(shù)個數(shù)返回地址返回地址SPSP老老SPSP 動態(tài)鏈動態(tài)鏈連接數(shù)據(jù)連接數(shù)據(jù)參數(shù)參數(shù)TOPTOP臨時單元臨時單元內(nèi)情向量內(nèi)情向量局部變量局部變量形式單元形式單元參數(shù)個數(shù)參數(shù)個數(shù)返回地址返回地址SP

3、SP老老SPSPInt xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) ; 臨時變量臨時變量T1第第1維維長維維長d1M維數(shù):維數(shù):1M起始地址起始地址a局部變量:局部變量:b形參形參 :c參數(shù)個數(shù):參數(shù)個數(shù):1 1返回地址返回地址老老SPSP過程過程R R的的活動記錄活動記錄L=9L=98.4.4 8.4.4 主要處理工作主要處理工作1. C1. C語言過程調(diào)用語言過程調(diào)用 過程調(diào)用過程調(diào)用中間代碼:中間代碼:par T1 par TnCall P, n (n為參數(shù)個數(shù)為參數(shù)個數(shù))+

4、4+4形式單元形式單元+3+3參數(shù)個數(shù)參數(shù)個數(shù)+2+2返回地址返回地址+1+1老老SPSPTOPQSPR1main全局?jǐn)?shù)據(jù)區(qū)全局?jǐn)?shù)據(jù)區(qū)對:對:Par Par Ti ( i i=1=1n ),n ),目標(biāo)代碼:目標(biāo)代碼: 傳地址:傳地址:(i+3)TOP:=Addr(i+3)TOP:=AddrTi 或或傳值:傳值:(i+3)TOP:=(i+3)TOP:=Ti對:對:Call P, nCall P, n 目標(biāo)代碼:目標(biāo)代碼: * * 1 1TOP:=SP (TOP:=SP (保護(hù)工作環(huán)境保護(hù)工作環(huán)境) ) * * 參數(shù)個數(shù):參數(shù)個數(shù):3TOP:= n3TOP:= n * * 轉(zhuǎn)子:轉(zhuǎn)子: JSR

5、PJSR PInt xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) L處處 調(diào)用順序調(diào)用順序 MainMain R R1 1 Q Q R R2 2調(diào)用過程調(diào)用過程R R的中間代碼:的中間代碼: par 1par 1 call R , 1 call R , 1 Int xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) L處處 104形參形參 c1103參數(shù)個數(shù)參數(shù)個數(shù)1102101

6、老老SPSP50 100TOPQ99SP 50R1mainX 10X 10 全局?jǐn)?shù)據(jù)區(qū)全局?jǐn)?shù)據(jù)區(qū)調(diào)用順序調(diào)用順序過程調(diào)用過程調(diào)用中間代碼:中間代碼: par 1par 1 call R , 1 call R , 1 對:對:Par Par Ti ( i i=1=1n )n )(i+3)TOP:=Addr(i+3)TOP:=AddrTi(或或Ti)Ti)對:對:Call P, nCall P, n* * 1 1TOP:=SPTOP:=SP* * 3TOP:=n ( 3TOP:=n (參數(shù)個數(shù)參數(shù)個數(shù)) )* * JSR P ( JSR P (轉(zhuǎn)子轉(zhuǎn)子) )MainMain R R1 1Q Q R

7、 R2 22.2.過程進(jìn)入過程進(jìn)入 過程定義的中間代碼:過程定義的中間代碼: proc 過程名過程名 過程體過程體 return (m) endproc過程進(jìn)入過程進(jìn)入新新TOP形式單元形式單元參數(shù)個數(shù)參數(shù)個數(shù)+1+1返回地址返回地址新新SP老老SP(QSP(Q的的SP)SP)TOPQSPR1main全局?jǐn)?shù)據(jù)區(qū)全局?jǐn)?shù)據(jù)區(qū) 建立新的工作環(huán)境(建立新的工作環(huán)境(SPSP,TOPTOP) 保護(hù)返回地址保護(hù)返回地址目標(biāo)代碼:目標(biāo)代碼: SP:=TOP+1 (SP:=TOP+1 (新新SP)SP) 1SP= 1SP=返回地址返回地址 TOP:=TOP+L (TOP:=TOP+L (新新TOP)TOP)L

8、 L:過程活動記錄大小,靜態(tài)確定:過程活動記錄大小,靜態(tài)確定 Int xMain() x=10; R; Void R(int c) int b,M3; b=5; Mc=x+2; if Mc5 Q; Void Q( ) R(1) TOP108107106105104形參形參 c1103參數(shù)個數(shù)參數(shù)個數(shù)1102返回地址返回地址101SP 老老SPSP50 100TOPQ99SP 50R1mainX X 1010全局?jǐn)?shù)據(jù)區(qū)全局?jǐn)?shù)據(jù)區(qū)調(diào)用順序調(diào)用順序過程進(jìn)入過程進(jìn)入MainMain R R1 1Q Q R R2 2SP:=TOP+1SP:=TOP+11SP=1SP=返回地址返回地址 TOP:=TOP+

9、L TOP:=TOP+L 3.3.數(shù)組分配空間數(shù)組分配空間 將將TOP+1TOP+1填入數(shù)組內(nèi)情向量的填入數(shù)組內(nèi)情向量的a a處處( (起始地址起始地址) ); 數(shù)組大小數(shù)組大小=M=M, TOP:=TOP+MTOP:=TOP+MVoid R(int c) int b , M3; b=5; Mc=x+2; if Mc5 Q; TOP M2111 M1110 數(shù)組區(qū)數(shù)組區(qū)M0109 TOP 臨時變量臨時變量T1108第第1維維長維維長d13107M維數(shù)維數(shù)1106M起始地址起始地址a 109 105b5104形參形參 c1103參數(shù)個數(shù)參數(shù)個數(shù)1102返回地址返回地址101SP老老SPSP50

10、100R R2 2數(shù)數(shù)據(jù)據(jù)區(qū)區(qū)R R2 2活活動動記記錄錄內(nèi)情內(nèi)情向量向量4. 4. 引用各種數(shù)據(jù)的方式引用各種數(shù)據(jù)的方式 參數(shù)、局部量、臨時單元、內(nèi)情向量:參數(shù)、局部量、臨時單元、內(nèi)情向量: 設(shè)相對數(shù)設(shè)相對數(shù)= t ,以,以SPSP為變址器訪問:為變址器訪問:tSPtSP 數(shù)組元素?cái)?shù)組元素 * * 從內(nèi)情向量查出從內(nèi)情向量查出a a,維長等,計(jì)算出相對數(shù),維長等,計(jì)算出相對數(shù)t t ; * * 變址訪問變址訪問 tata 全局量:從全局?jǐn)?shù)據(jù)區(qū)取;全局量:從全局?jǐn)?shù)據(jù)區(qū)??;TOP M2111+10M112 110+9M0109+8臨時變量臨時變量T112 108+7第第1維維長維維長d13107

11、+6M維數(shù)維數(shù)1106+5M起始地址起始地址a109 105+4b5104+3+3形參形參 c1103+2+2參數(shù)個數(shù)參數(shù)個數(shù)1102+1+1返回地址返回地址101SP 老老SPSP50 100Q9950R1mainX 10X 10Void R(int c) int b, M3; b=5; Mc=x+2; if Mc5 Q; 對名字的訪問:對名字的訪問:. 局部名:局部名: b = 4SP. 參數(shù):參數(shù): c = 3SP. 臨時變量:臨時變量:T1 = 8SP. 內(nèi)情向量中,內(nèi)情向量中, 數(shù)組起始地址數(shù)組起始地址a = 5SP對名字的訪問:對名字的訪問:. 數(shù)組元素?cái)?shù)組元素M1: * 取出內(nèi)情

12、向量中,數(shù)組起始取出內(nèi)情向量中,數(shù)組起始 地址地址a; 即:即: 5SP=109; * 計(jì)算出計(jì)算出M1的相對數(shù)的相對數(shù)=1; * M1: = 1109 . 全局量全局量x: = 0全局全局SPTOP M2111+10M112 110+9M0109+8臨時變量臨時變量T112 108+7第第1維維長維維長d13107+6M維數(shù)維數(shù)1106+5M起始地址起始地址a 109 105+4b5104+3+3形參形參 c1103+2+2參數(shù)個數(shù)參數(shù)個數(shù)1102+1+1返回地址返回地址101SP 老老SPSP50 100Q9950R1mainX 10X 10Void R(int c) int b, M3; b=5; Mc=x+2; if Mc5 Q; 5.5.過程返回過程返回 TOP形式單元形式單元參數(shù)個數(shù)參數(shù)個數(shù)返回地址返回地址SP老老SP(QSP(Q的的SP)SP)TOPQSPR1main全局?jǐn)?shù)據(jù)區(qū)全局?jǐn)?shù)據(jù)區(qū)過程定義的中間代碼:過程定義的中間代碼: proc 過程名過程名 過程體過程體 return (m) e

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論