【正文】
(返回地址,寄存器值??) 實參 (形式單元)和參數(shù)個數(shù) S P 控制鏈 (老 SP ) TOP R 的數(shù)組區(qū) S P R 的活動記錄 Q 的活動記錄 主程序全局 數(shù)據(jù)區(qū) 嵌套過程語言的棧式 分配方案 ? 主要特點 : ?(語言)一個過程可以引用包圍它的任一外層過程所定義的標識符(如變量,數(shù)組或過程等)。 ?? R end /* R*/ proc P (a)。 integer m,n。 end。 例如:如果有一個從第 5層分程序轉出到達第 1層分程序的標號 L,雖然在第 5層分程序工作時知道 L所屬的層數(shù),我們極易從DISPLAY中獲得第 1層分程序的活動記錄基址( SP),但是怎么知道第 1層分程序進入時的 TOP呢?唯一的辦法是從 5,4,3和2各層順序退出。而過程體分程序(假定是一個分程序)當作是它所管轄的第 1層分程序。 ( b) 進 入 分 程 序 B1。 a[j]:=x (5) end。 (10)begin (11) a:=1。 swap(a,b); 其結果: a,b調(diào)用前的值不改變。 其結果等價于執(zhí)行下列運算: x :=a; y :=b; temp :=x; x :=y; y :=temp 傳地址 的實現(xiàn) ( call by reference )(callbyaddress)(callbylocation) 把實在參數(shù)的地址傳遞給相應的形參,即 調(diào)用過程把一個指向?qū)崊⒌拇鎯Φ刂返闹羔槀鬟f給被調(diào)用過程相應的形參: 1實在參數(shù)是一個名字,或具有左值的表達式 傳遞左值 2實在參數(shù)是無左值的表達式 計算值,放入一存儲單元,傳此存儲單元地址 3目標代碼中,被調(diào)用過程對形參的引用變成對傳遞給被調(diào)用過程的指針的間接引用 procedure swap( x,y:integer)。 *y=temp。 begin m:=3。 ? (2)procedure b(function h(n:integer):integer)。 ? (9)begin ? (10) c ? (11)end 圖 1027 嵌套過程作為參數(shù)傳遞 p ar am c 存取鏈 m b f . 存取鏈圖 10 28 連同存取鏈一起 傳遞過程實參 各種數(shù)據(jù)對象的存儲分配 數(shù)據(jù)對象 name 名字,名稱 type 類型 location 內(nèi)存地址 value 值 ponent 成分 除實參是過程情況外,還有實參為數(shù)組,實參為標號等情況。 ? (4)procedure c。 procedure c。 (8) swap(a,b)。 begin temp:=x。 ? ,并將其放在對應形式單元開辟的空間中。 (12) swap(a,b)。 (2)var a,b:integer。 數(shù) 組 C 數(shù) 組 C 數(shù) 組 B 數(shù) 組 B C 的 向 量 內(nèi) 情 eB5的 T O PC 的 內(nèi) 情 向 量B4的 T O PB4 的 T O PB 的 內(nèi) 情 向 量B 的 內(nèi) 情 向 量 z Z B1的 T O PB1 的 T O P D I S P L A YD I S P L A Y 形式單元 m , n 2 形式單元 m , n 2連接數(shù)據(jù)連 接 數(shù) 據(jù) A 的 T O PA 的 T O P ∶ ∶ ∶ ∶ ( e ) ( f)( e ) 進入分程序 B4分配數(shù)組 C 之后; ( f ) 進入分程序 B5 。 ,共四項: ( 1)老 SP值; ( 2)返回地址; (3)全局 DISPAY地址; ( 4)調(diào)用時的棧頂單元地址,老 TOP。 為了解決上述問題,可采取兩種措施。 分程序結構的存儲配方案 處理分程序結構存儲分配方案的一種簡單辦法是,把分程序看成 “無參過 程”,它在哪里定義就在哪