目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織教材_第1頁
目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織教材_第2頁
目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織教材_第3頁
目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織教材_第4頁
目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織教材_第5頁
已閱讀5頁,還剩88頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第八章目標(biāo)程序運(yùn)行時(shí)的存儲(chǔ)組織30:第一節(jié)數(shù)據(jù)空間的三種不同使用方法和管理方法:第二節(jié):第三節(jié):第四節(jié)棧式存儲(chǔ)分配的實(shí)現(xiàn)參數(shù)傳遞過程調(diào)用、過程進(jìn)入和過程返回 8. 1數(shù)據(jù)空間的三種不同使用方法和管理方法:從邏輯上看,代碼生成前,編譯程序必須進(jìn)行目標(biāo)程序運(yùn)行環(huán)境的設(shè)計(jì)和數(shù)據(jù)空間的分配 :數(shù)據(jù)空間包括:用戶定義的各種類型的數(shù)據(jù)對(duì)象(變量和常量)所需的存儲(chǔ)空間,作為保留中間結(jié)果和傳遞參數(shù)的臨時(shí)工作單元,調(diào)用過程時(shí)所需的連接單元,組織輸入輸出所需的緩沖區(qū):運(yùn)行時(shí)的存儲(chǔ)區(qū)常常劃分成:目標(biāo)區(qū)、靜態(tài)數(shù)據(jù)區(qū).棧區(qū)、堆區(qū):圖81就是一種典型劃分:8:型劃分A代碼區(qū)用以存放目標(biāo)代碼,這是固定長度的,即編譯時(shí) 能確

2、定的A靜態(tài)數(shù)據(jù)區(qū)用以存放編譯時(shí)能確定所占用空間的數(shù)據(jù)A堆棧區(qū)用于可變數(shù)據(jù)以及管理過程活動(dòng)的控制信息:編譯程序分配目標(biāo)程序運(yùn)行時(shí)的數(shù)據(jù)空間的基本依據(jù)是 程序語言設(shè)計(jì)時(shí)對(duì)程序運(yùn)行中存儲(chǔ)空間的使用和管理辦 法的規(guī)定:在程序設(shè)計(jì)語言語義學(xué)中,使用environment表示將一個(gè) 名字映射到一個(gè)存儲(chǔ)位置的函數(shù),state表示存儲(chǔ)位置到 值的映射,如圖8.2所示:environmentnamestatestoragevalue8.2 名字到存儲(chǔ)、到值的映射:數(shù)據(jù)空間的使用和管理方法分成三種:A靜態(tài)存儲(chǔ)分配A棧式動(dòng)態(tài)存儲(chǔ)分配A堆式動(dòng)態(tài)存儲(chǔ)分配一 靜態(tài)存儲(chǔ)分配:靜態(tài)存儲(chǔ)分配:在編譯時(shí)能確定目標(biāo)程序運(yùn)行中所需的

3、 全部數(shù)據(jù)空間的大小,編譯時(shí)安排好目標(biāo)程序運(yùn)行時(shí)的 全部數(shù)據(jù)空間,確定每個(gè)數(shù)據(jù)對(duì)象的存儲(chǔ)位置:如像FORTRAN程序是段結(jié)構(gòu)的,如圖8.3所示: 圖& 3 FORTRAN程序構(gòu)成特點(diǎn)圖84給出一個(gè)FORTRAN77的程序例子:(I) PROGRAM CNSUMECHARACTER * 50 BUFINTEGER NEXTCHARACTER C, PRDUCE(5) DATA NEXT /l/, BUF lu/(6) C=PRDUCE()(7) BUF(NEXT: NEXT) = C(8) NEXT=NEXT+1IF (C EN)GOTO6(10) WRITE ( * /(A)f)BUF(II)

4、 END(12) CHARACTER FUNCTION PRDUCE()(13) CHARACTER * 80BUFFER(14) INTEGER NEXT(15) SAVE BUFFER, NEXT(16) DATA NEXT 781/(17) IF(NEXT GT. 80)THEN(18) READ ( */(A)z)BUFFER(19) NEXT=1圖&4(20) END IF)PRDUCE= BUFFER( NEXT: NEXT)(22) NEXT=NEXT+1(23) ENDCNSUME 的 CodeJIdePRDUCE 的 GockJLCHARACTER *50 BUF INTEG

5、ER NEXT CHARACTER CSTATIC DATACHARACTER 80 BUFFERINTEGER NEXT圖& 5 FORTRAN 77的靜態(tài)存儲(chǔ)分配二動(dòng)態(tài)存儲(chǔ)分配:如果一個(gè)程序設(shè)計(jì)語言允許遞歸過程、可變數(shù)組或允許 用戶自由申請(qǐng)和釋放空間,那么,就需要采用動(dòng)態(tài)存儲(chǔ) 管理技術(shù)三棧式動(dòng)態(tài)存儲(chǔ)分配:這種分配策略是將整個(gè)程序的數(shù)據(jù)空間設(shè)計(jì)為一個(gè)棧四堆式動(dòng)態(tài)存儲(chǔ)分配:假設(shè)程序運(yùn)行時(shí)有一個(gè)大的存儲(chǔ)空間,每當(dāng)需要時(shí)就從 這片空間中借用一塊,不用時(shí)再退還,由于借還的時(shí)間 先后不一,經(jīng)一段運(yùn)行之后,程序運(yùn)行空間將被劃分成 許多塊,有些占用,有些空閑。那么當(dāng)運(yùn)行程序要求一 塊體積為N的空間時(shí),需要

6、決定應(yīng)該從哪個(gè)空閑塊得到這個(gè)空間理論上講,應(yīng)該從比N稍大一些的空閑塊中取出N個(gè)單元,以便使大的空閑塊派更大的用場,但實(shí)現(xiàn)難度很大:實(shí)際中常常釆用的辦法:先遇到哪塊比N大就從其中取出N個(gè)單元:即使這樣,也會(huì)發(fā)生找不到一塊比N大的空閑塊,但所有 空閑塊總和比N大得多,這時(shí),有的分配管理系統(tǒng)采用廢品回收的辦法來應(yīng)付82棧式存儲(chǔ)分配的實(shí)現(xiàn):過程的活動(dòng)記錄AR(Activation Record):是一段連續(xù)的存儲(chǔ)區(qū),用以存放過程的一次執(zhí)行所需要的信息,這些信息如圖6所示:圖8.6 過程的活動(dòng)記長A臨時(shí)工作單元:如計(jì)算表達(dá)式過程存放的中間結(jié)果A局部變量:一個(gè)過程的局部變量A機(jī)器狀態(tài)信息:如程序計(jì)數(shù)器、寄

7、存器的值A(chǔ)存取鏈:用以存取非局部變量A控制鏈:指向調(diào)用該過程的那個(gè)過程的活動(dòng)記錄A實(shí)參:由調(diào)用過程向該被調(diào)過程提供實(shí)參的值(或地址)A返回地址:保存該被調(diào)過程返回后的地址簡單的棧式存儲(chǔ)分配的實(shí)現(xiàn):最簡單的程序設(shè)計(jì)語言結(jié)構(gòu)如圖107所示:program main;全局變量或數(shù)組的說明; proc R;end (R); proc Q; F end (Q); 主程序執(zhí)行語句 end(main)8. 7 過程定義不嵌套的程序結(jié)構(gòu):例如,圖8.7的程序結(jié)構(gòu)中,若主程序調(diào)用了過程Q, Q 又調(diào)用了 R,在R進(jìn)入運(yùn)行后的存儲(chǔ)結(jié)構(gòu)如圖10.8(a)所示::若主程序調(diào)用了過程Q, Q遞歸調(diào)用自己,在Q過程第2次

8、 進(jìn)入運(yùn)行后的存儲(chǔ)結(jié)構(gòu)如圖10.8(b)所示::若主程序先調(diào)用過程Q,然后主程序接著調(diào)用R,且Q過 程沒有調(diào)用Q和R,這時(shí)Q和R進(jìn)入運(yùn)行后的存儲(chǔ)結(jié)構(gòu)分別如圖8.8(c)和8.8(d)所示:TOP R的活動(dòng)SP _一記錄0的活動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)0的活動(dòng) 記錄0的活動(dòng) 記錄主程序全局?jǐn)?shù)據(jù)區(qū)0的活動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)/?的活動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)(c)棧式存儲(chǔ)分配(d)TOPSP常常使用兩個(gè)指針指示棧最頂端的數(shù)據(jù)區(qū):ASP:總是指向現(xiàn)行過程活動(dòng)記錄的起點(diǎn) TOP:始終指向已占用的棧頂單元:這種語言若含有可變數(shù)組,則其過程活動(dòng)記錄的內(nèi)容如圖&9所示:臨時(shí)工作單元 局部數(shù)組的內(nèi)情向量 局部簡單變量

9、 賣參(形式單元)參數(shù)個(gè)數(shù)返回地址控制鏈(老圖89無嵌套定義的過程活動(dòng)記錄內(nèi)容:圖810表明分配數(shù)組區(qū)之后的運(yùn)行棧情況,可以與圖TOPSP的數(shù)組區(qū)0的活動(dòng)記錄主程序全局?jǐn)?shù)據(jù)區(qū)里810分配了數(shù)組區(qū)之后的運(yùn)行棧二嵌套過程語言的棧式實(shí)現(xiàn)Pascal言程序結(jié)構(gòu)的特點(diǎn)是允許過程嵌套定義,如圖11所示:(1) program git (input, output) 4(2) var a: array 0 10 of integer;(3) x: integer;(4) procedure read ar ray;var i: integer;(6) begin-*目endTcadarray;(7) pro

10、cedure exchanged; integer);(8) begin(9) x : = a訂;aij 5 = aj ; aj 5 = x(10) end exchange;(11) procedure quicksort(m,n: integer);(12) var kv; integer; quicksort的ARJa scm的 AR圖8. 13 嵌套定義過程的活動(dòng)記錄和存儲(chǔ)棧:因?yàn)镻L/O的過程是無參過程,PL/O也無動(dòng)態(tài)數(shù)組,所以它的過程活動(dòng)記錄的內(nèi)容如圖&14所示:TOP臨時(shí)工作單元,局部變量返回地址控制鏈(動(dòng)態(tài)鏈)存取鏈(靜態(tài)鏈)SP圖8. 14 PU0編譯程序的堪程活動(dòng)記錄:再

11、回到圖811例子,如果該程序的某次執(zhí)行順序?yàn)?sort quicksort quicksort partition exchange* :圖8. 15給出了進(jìn)入過程exchange之后運(yùn)行棧的不意,僅標(biāo)明存取鏈和控制鏈的值TOP存取鏈控制鏈、局部變量GJ存取鏈、控制鏈局部變存取璉控制鏈局部變址ke存取鏈、控制璉、變量d ,工SP exchange的活動(dòng)記錄運(yùn)行棧26:另一種跟蹤方法是:每進(jìn)入一個(gè)過程后,在建立它的活動(dòng)記錄的同時(shí)建立一張嵌套層次顯示表display:嵌套層次:指過程定義的層數(shù),始終假定主程序的層數(shù) 為0,因此主程序稱為0層過程:計(jì)數(shù)過程的層數(shù)用一個(gè)計(jì)數(shù)器Level,初值為0,每遇

12、到過 程說明則增1,過程說明結(jié)束則減1:-display是一個(gè)指針數(shù)組d,也可看做是一個(gè)小棧,自頂向下每個(gè)單元依次存放著現(xiàn)行層,直接外層,直至最外層(0層,主程序?qū)樱┑让恳粚舆^程的最新活動(dòng)記錄的地址:圖8.11的程序,假定有如下四種調(diào)用情況: (a) sort quicksort (b) sort quicksort Miuicksort* (c) sort quicksort quicksort *partition# (d) sort quicksort quicksort partitionexchange* 圖& 16 (a) -(d)分別說明上述四種情形的運(yùn)行棧和display29d

13、Cld0diSplfly TOPquicksort 的 活動(dòng)記錄=n I13sort 的 活動(dòng)記錄(a)TOPdisplay 廣sp quicksort(現(xiàn)行)活動(dòng)記錄quicksort 的1第一次進(jìn)入) 活動(dòng)記錄sort 的 活動(dòng)記錄29(b)TOP 一partition 的2dld0display活動(dòng)記錄quicksoFt 的活動(dòng)記錄quicksort 的活動(dòng)記錄sort 的 活動(dòng)記錄(C)圖 8. 16TOP exchange活動(dòng)記錄dlprints11 %d Mdn% a, b);圖8. 19C程序中的分程序:分程序結(jié)構(gòu)可以用棧式存儲(chǔ)分配實(shí)現(xiàn)A種辦法是把分程序看成一個(gè)“無參過程”,只不

14、過是 在該分程序入口處調(diào)用,分程序出口處返回。分程序在哪里定義就在哪里被調(diào)用A另一種辦法是每次為一個(gè)完整的過程體分配存儲(chǔ),即把 一個(gè)過程體中的所有分程序所需的存儲(chǔ)一次分配好,如圖8.19的C程序,可以為這里所有聲明的名字分配一塊存儲(chǔ),如圖8.20所示:0 8.20 為圖8- 19中程序的名字分配存儲(chǔ)ALGOL的結(jié)構(gòu)特點(diǎn)是除了允許過程嵌套定義還含有分程 序的結(jié)構(gòu),如圖821的一個(gè)ALGOL過程:procedure A(m 山); integer m.n;Bl - begin real z; arrayB2S begin real d,e;L3:end;B4: begin array (:1: m

15、;B5: begin real e;L6:end;end;L8: end;圖8. 21 一個(gè)ALGOL分程序結(jié)構(gòu):如采用將分程序看成“無參過程”,則效率很低,因?yàn)锳第一,分程序不存在被調(diào)用的問題,不必要在進(jìn)入一個(gè) 分程序時(shí),將連接數(shù)據(jù)和display都放進(jìn)活動(dòng)記錄中A第二,當(dāng)從內(nèi)層分程序向外轉(zhuǎn)移時(shí)可能同時(shí)要結(jié)束若干 個(gè)分程序,那么怎樣恢復(fù)所要到達(dá)的那個(gè)分程序的數(shù)據(jù) 區(qū)呢?:克服上述缺點(diǎn)的辦法是:A首先,代替原來的那個(gè)統(tǒng)一的棧頂指示器,讓每個(gè)過程 和分程序都有自己的棧頂指示器TOP,它的值保存在各自的活動(dòng)記錄中A其次,不把分程序看作“無參過程”,而讓每個(gè)分程序用包圍它的那個(gè)最小過程的displa

16、y :每個(gè)過程的活動(dòng)記錄所含的內(nèi)容有:1.過程的TOP單元,指向活動(dòng)記錄的棧頂位置2 連接數(shù)據(jù): 老SP值返回地址全局d isplay地址調(diào)用時(shí)的棧頂單元地址,稱作老TOP3.參數(shù)個(gè)數(shù)和形式單元444.display 表5 .過程所管轄的各分程序的局部數(shù)據(jù)單元對(duì)每個(gè)分程序來說,它們包括:(1) 一個(gè)名為TOP的單元,當(dāng)進(jìn)入時(shí)它含現(xiàn)行棧頂?shù)刂罚院?用來存放棧的新高度(2) 分程序的局部變量、數(shù)組內(nèi)情向量和臨時(shí)工作單元:圖&22給出了過程A (見圖10.21)的活動(dòng)記錄的結(jié)構(gòu):變血變量a和陽的TOP數(shù)組C的內(nèi)情向址叭的TOP心的TOP數(shù)組E的內(nèi)悄向!ft變量三B 的TOPdisplay形式單元価

17、UJ參數(shù)個(gè)數(shù):2調(diào)用時(shí)的棧頂?shù)刂罚ɡ蟃OP)全局D1SPLAY地址返回地址老SP過程的TOP,指向活動(dòng)記錄之頂一圖8.22 過程A的活動(dòng)記錄:下面用一個(gè)例子說明進(jìn)出分程序時(shí)數(shù)據(jù)區(qū)的變化過程:A圖8.23 (a)表示已調(diào)用了圖10.21的過程A,控制已轉(zhuǎn)入A中,但尚未開始執(zhí)行過程體時(shí)棧的內(nèi)容A圖8.23 (b)反映了已進(jìn)入過程體分程序(B1),但尚未 分配數(shù)組空間時(shí)棧的內(nèi)容。分程序B1的TOP值直接抄自外層分程序的TOP單元A圖8.23 (c)反映了分配數(shù)組B后的情形,此時(shí)B1的TOP 值上升到指示新棧頂,但過程人的丁0卩值不動(dòng)A圖8.23 (d)反映了進(jìn)入分程序B2之后的情形1!A進(jìn)入分程序B

18、4時(shí)又抄寫B(tài)l的TOP,并對(duì)數(shù)組C進(jìn)行分配, 于是得到圖8.23 (e)A當(dāng)進(jìn)入分程序B5時(shí),再次抄寫直接外層的TOP值,得到圖823 (f)數(shù)組BB的內(nèi)悄向盡E的內(nèi)悄向鼠2Z切的TOP-的 TOPdisplaydisplaydisplay形武單元形氏單元形式單元2mnm川22連接數(shù)據(jù)連接數(shù)據(jù)連接數(shù)據(jù)ATOP -A的TOP 月的TOP -(a)(b)(c)數(shù)組Q數(shù)組C數(shù)組8數(shù)組左數(shù)組Ef-*1e屍的TOP-*1edC的內(nèi)怕向量C的內(nèi)悄向址血的TOP血的TOP-旳的TOP8的內(nèi) tffJnjR8附內(nèi)悄向最3的內(nèi)怕向最zZZ& 的 TOP-Q的TOP-也的TOP*displaydisplaydis

19、play形式單元形式單元形式單元m, nm nm .n222連接數(shù)據(jù)連接數(shù)據(jù)連接數(shù)據(jù)月的TOF -兄的TOP 一月的TOP -1(d)(e)圖8. 23 分程序結(jié)構(gòu)數(shù)據(jù)區(qū)變化圖到達(dá)標(biāo)號(hào)B處;(b) s*程序Bi; (O數(shù)組B分配之后;(小進(jìn)入分程序民;3)進(jìn)入分程序5分配數(shù)組C之后)(f)進(jìn)入分程用民:把實(shí)在參數(shù)傳遞給相應(yīng)的形式參數(shù)方法:A傳值、傳地址、傳名、傳結(jié)果等一傳值(值調(diào)用):將實(shí)參計(jì)算出它的值,然后把它傳給被調(diào)過程:1 形式參數(shù)當(dāng)作過程的局部變量處理2調(diào)用過程計(jì)算實(shí)參的值,并將它們的值放在為形式單元開辟的空間中3被調(diào)用過程執(zhí)行時(shí),就像使用局部變量一樣使用這些形式單元 :傳值的重要特點(diǎn)

20、是對(duì)形式參數(shù)的任何運(yùn)算不影響調(diào)用過程的活動(dòng)記錄中 實(shí)參的值:通過值調(diào)用的過程可以由非局部量或由指針而對(duì)調(diào)用過程發(fā)生影響二傳地址 :當(dāng)參數(shù)通過引用傳遞時(shí),也稱作傳地址,或引用調(diào)用 :調(diào)用過程傳給被調(diào)過程的是指針,指向?qū)崊⒋鎯?chǔ)位置的指針1如實(shí)參是一個(gè)名字,則名字的地址傳遞過去 2如實(shí)參是一個(gè)表達(dá)式,比如a+b或2,而沒有左值,則表達(dá)式先求值,并存入某一位置,然后該位置的地址傳遞 過去3被調(diào)過程中對(duì)形式參數(shù)的任何引用和賦值都通過傳遞到被 調(diào)過程的指針被處理成間接訪問二傳名 :當(dāng)參數(shù)通過名字傳遞時(shí),也稱作傳名調(diào)用:調(diào)用過程傳給被調(diào)過程的是名字,實(shí)參名字代替形參名字1如實(shí)參是一個(gè)名字,則名字直接替代相應(yīng)

21、的形式參數(shù)2如實(shí)參是一個(gè)表達(dá)式,比如a+b, a+b替代相應(yīng)的形式參數(shù) 3被調(diào)過程中對(duì)形式參數(shù)的任何引用和賦值都通過傳遞名字到被調(diào)過程的指針被處理成間接訪問二傳結(jié)果:調(diào)用過程傳給被調(diào)過程的是指針和值,每個(gè)形式參數(shù)對(duì)應(yīng)兩個(gè)單元,一個(gè)存實(shí)參的地址,一個(gè)存實(shí)參的值。1如實(shí)參是一個(gè)名字,則名字的地址和值傳遞過去2如實(shí)參是一個(gè)表達(dá)式,比如a+b或2,則表達(dá)式先求值, 并存入某一位置,然后該位置的地址和值傳遞過去3調(diào)用結(jié)束前,再將執(zhí)行的結(jié)果寫到對(duì)應(yīng)的實(shí)參單元例:對(duì)于下面程序:Procedure p;begin y:=y+i;z:=z+x;end;pbegina:=2;b:=3;p (a+b,a,a)pri

22、nt aend.若參數(shù)傳遞的方法分別為(1)傳值(2)傳地址(3)傳名(4)傳結(jié)果。執(zhí)行時(shí)所輸出的a分別是什 么?54(1)傳值.則將實(shí)參的值傳遞給被調(diào)用者P 程序運(yùn)行時(shí)有(假設(shè)a的地址 為add_a, b的地址為add_b);被調(diào)用者數(shù)據(jù)區(qū)xyZ :調(diào)用者數(shù)據(jù)區(qū)add_a 2add_b 3臨時(shí)單元T: 5程序運(yùn)行執(zhí)行了語句“y:=y+l”后有:調(diào)用者數(shù)據(jù)區(qū)add_a 2add_b 3臨時(shí)單元T: 5被調(diào)用者數(shù)據(jù)區(qū)532程序運(yùn)行執(zhí)行了語句“z:=z+亡后有:調(diào)用者數(shù)據(jù)區(qū)add_a 2add_b 3 臨時(shí)單元T: 5 所以程序輸出2o被調(diào)用者數(shù)據(jù)區(qū)53(2)傳地址,則將實(shí)在參數(shù)的地址傳遞給被調(diào)用

23、者,p運(yùn)行時(shí)有(假設(shè)a的地址為add,b的地址為add_b ); 調(diào)用者數(shù)據(jù)區(qū)被調(diào)用者數(shù)據(jù)區(qū)add_b:3臨時(shí)7CT:5(a + b)的值T add_a add_a調(diào)用者數(shù)據(jù)區(qū)被調(diào)用者數(shù)據(jù)區(qū)add_a 3add_b 3臨時(shí)單元T: 5執(zhí)行了語句“z:=z+x”后有:調(diào)用者數(shù)據(jù)區(qū)y: add_az:add_a被調(diào)用者數(shù)據(jù)區(qū)add_a 8 add_b 3 臨時(shí)單元T: 5 所以程序輸出8。Tadd_aadd_a程序運(yùn)行執(zhí)行了語句“y:=y+l”后,有:解:(3)傳名當(dāng)執(zhí)行調(diào)用P ( a+b, a ,a)時(shí),相當(dāng)于被調(diào)用者被替換成 procedure p (a+b,a,a)begina:=a+l a

24、:=a+a+b end; p調(diào)用者的數(shù)據(jù)區(qū)為:a:2b:3執(zhí)行語句“a:=a+l”后,調(diào)用者數(shù)據(jù)區(qū)為:a:3b:3執(zhí)行語句:a:=a+a+b后,調(diào)用者的數(shù)據(jù)區(qū)為:a:9b:3因此程序輸出為9。(2)傳結(jié)果,則將實(shí)在參數(shù)的地址和值傳遞給被調(diào)用者,P運(yùn)行時(shí)有(假設(shè)a的 地址為add_a, b的地址為add_b,臨時(shí)單元T的地址為add_T);被調(diào)用者數(shù)據(jù)區(qū)調(diào)用者數(shù)密區(qū)add a:add b:x: T5y : add_a2z:add_a2臨時(shí)單元T:(a + b)的值工士調(diào)用者數(shù)據(jù)區(qū)add a:程序運(yùn)行執(zhí)行了語句“尹賞近虛反 被調(diào)用者數(shù)據(jù)區(qū)add b:臨時(shí)單元T:x: T 5 y: add_a 3

25、z: add_a 2執(zhí)行了語句“z:=z+x”后有:調(diào)用者數(shù)據(jù)區(qū) add_a:2add_b:3臨時(shí)單元T:5被調(diào)用者數(shù)據(jù)區(qū)x: T5y: add_a3z: add_a7調(diào)用結(jié)束前,被調(diào)用者數(shù)據(jù)存放到對(duì)應(yīng)的調(diào)用者數(shù)據(jù)單元即:調(diào)用者數(shù)據(jù)區(qū)1調(diào)用者數(shù)據(jù)區(qū)add_a:7add_b:3臨時(shí)單元T:5y: add_a3z: add_a7所以程序輸出7O60過程調(diào)用、過程進(jìn)入和過程返回:對(duì)于過程調(diào)用的四元式序列:/par T/par T2call P, n:在運(yùn)行時(shí)是如何執(zhí)行的? /par和call產(chǎn)生什么相應(yīng)的目標(biāo)代碼A對(duì)于par(i=l,2,n)的處理是:根據(jù)parTj (i=l,2v.,n)中的種別而

26、生成傳送指令,或?qū)?shù)的值或?qū)?shù)的地址傳送至新的過程的活動(dòng)記錄的形式單元中:對(duì)于call p,n則應(yīng)生成傳送參數(shù)個(gè)數(shù)ii的指令;保護(hù)現(xiàn)行SP 至新過程的活動(dòng)記錄(老SP);轉(zhuǎn)子,轉(zhuǎn)向P的第一條指 令;定義新SP;保護(hù)返回地址;定義新值;填寫display或 存取鏈內(nèi)容等指令:如果過程含動(dòng)態(tài)數(shù)組(局部),則應(yīng)生成對(duì)數(shù)組進(jìn)行存儲(chǔ)分配的指令,即生成運(yùn)行時(shí)動(dòng)態(tài)地建立內(nèi)情向量和分配數(shù) 組空間的目標(biāo)指令:在過程執(zhí)行語句的工作過程中,凡引用形參、局部變量或 數(shù)組元素都可根據(jù)過程活動(dòng)記錄起點(diǎn)的相對(duì)位置訪問當(dāng)過程P工作完畢要返回到調(diào)用段時(shí),若語言有形如return(E)的返回語句,或P是個(gè)函數(shù)過程時(shí),則可把已

27、算好的值傳送至某個(gè)特定的寄存器中,調(diào)用段將從這個(gè)特定的寄存器中獲得被調(diào)過程的結(jié)果值。然后所生成的目標(biāo)指令則 應(yīng)完成的工作是:恢復(fù)SP;恢復(fù)TOP,按保存的返回地址 實(shí)行無條件轉(zhuǎn)移【本章小結(jié)】A目標(biāo)代碼運(yùn)行時(shí),存儲(chǔ)區(qū)域的整體布局,以及各區(qū)域的作用A各種不同數(shù)據(jù)變量區(qū)的不同分配組織方式A允許過程嵌套定義的語言,棧式動(dòng)態(tài)分配的組織管理A過程活動(dòng)紀(jì)錄的各項(xiàng)內(nèi)容和它們的作用,以及活動(dòng)紀(jì)錄的組織方式參數(shù)傳遞的不同方式及其實(shí)現(xiàn)A過程調(diào)用和返回時(shí),相應(yīng)目標(biāo)代碼以及棧式動(dòng)態(tài)分配區(qū)的管理作業(yè)1、下面的程序執(zhí)行時(shí)輸出的a分別是什么?若(1) 參數(shù)的傳遞辦法為”傳值”;(2) 參數(shù)的傳遞辦法為“傳地址”。(3) 參數(shù)

28、的傳遞辦法為“傳名”。(4) 參數(shù)的傳遞辦法為傳結(jié)果化 program main (inputoutput);procedure p(xz);beginy : =y+i;Z : =z+x;end; beginp(a+b 角 a); print a end.2、下面是一個(gè)Pascal程序program PP(input9output) var K:integer;function F (N:integer) :integer begin if N并已知在運(yùn)行時(shí)刻,以過程為單位對(duì)程序中的變量進(jìn)行動(dòng)態(tài)存儲(chǔ) 分配。試分別給出程序執(zhí)行到(1)和(2)點(diǎn)時(shí)運(yùn)行棧的內(nèi)容和 DISPLAY的內(nèi)容。67懸掛訓(xùn)絡(luò)

29、:用,搭允許an肉在全個(gè)平面上糊動(dòng),同右保證史感謝您的下載,特贈(zèng)送精品文章體能 訓(xùn)練技巧-TRX懸掛訓(xùn)練系統(tǒng)工作之余鍛煉身體,若不需要請(qǐng)刪除后使用,謝謝您的理解,祝您生意興隆,事業(yè)高攣紡帶是漬于美圭海軍E忻給的雛形是以W度毛巾釗成的硼貝.后來.有F 叫蘭迪史美圭磁決擊血?jiǎng)褐V官.在退役創(chuàng)新設(shè)計(jì)了該坯希絡(luò)計(jì)劃.變成民用的健界程TRX Si,練系沆,酢歩備3主要那分是竟1.5英寸.廳張力為1250融尼龍縄子,悵度范囲從6英尺謠笙至12英尺.總咬花手更適應(yīng)戲手抓綢竝是軸卷掛等培毎紡動(dòng)作.JC頓蟲苦用于卡賓槍的咖4舸成.目3于謠盤.其目用不51)2S. 1分帶號(hào)才掛妥當(dāng).決在裊子里便于捋帶5!)1三何培

30、方.可至定在單乞t竝卡在門繩里.或系在樹枝上.適合絕大冬加紡環(huán)境.女 吐砂竝昭球F8去雨肌肉印關(guān)節(jié)參與,稱打ifi更加結(jié)實(shí)的肌肉,穩(wěn)定靈翻關(guān)節(jié),魁的核心力量越正睛的席態(tài),竜助在任何運(yùn)動(dòng)項(xiàng)目上獲得更佳的運(yùn)功表現(xiàn),trx還是運(yùn)動(dòng)麼惑a侵手段之TRX動(dòng)作慈:DiKQHt) :大.足力色大2抬起-址服,諭于砒更冬平拓力3.高支點(diǎn)國遠(yuǎn).應(yīng)吃力 7?誕定性旻疚應(yīng)高罔田隹度:一塑向前軽有助于身依砌1. chest pre$s/fly combo(Wiy5fflS):人昔向純子.手篙渥住繩子.雙手坤玄.肘 保待一點(diǎn)彎簽.斑一點(diǎn)點(diǎn)穹簽,苯妙后一樣竟.MS心如向前.用飆發(fā)力AW! 打幵雙手并讓宜音醫(yī)刮90度停下.

31、再還原.唸后衣手打開傲飛屯.同時(shí)一卻往BT踮2. chest press(M8S):人背向繩子手警握住繩子.雙手停直肘保持一點(diǎn)音在.島E一點(diǎn)點(diǎn)彎簽.茸趣后一樣竟.身體雖心血向前.用磁it力AWI打幵雙手并讓它彎惑SJ90度停下.再還原(淮度增E :歡提合井舞曄擔(dān)旺期衣斜度眩0)3lunge fly弓步飛烏):1.手警渥住縄子,戲手玄,肘保待一點(diǎn)宵日,挺應(yīng)收88身烷雖心恆向詡違.雙手打幵狀g.丟時(shí)一算往前定垸 用卿發(fā)力.再還丘4. chest press single leg extended0t88-Sa2fflS):人背向繩子.手警握住繩子雙手停直”肘保持一點(diǎn)彎簽.擇蓋一點(diǎn)點(diǎn)彎簽.-sates.-算向前抬起.MS心咖向前.用飆發(fā)力慢慢打幵雙手并讓它彎曲到90度停下.再歎1 還朕QD5. Suspended incline press-leg upQj孚上斜推抬腳):雙知住地面.一同勺住繩子,誕定6Atomic push up(gHWSlS):或卻住龍

溫馨提示

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

評(píng)論

0/150

提交評(píng)論