В.А. Серебряков, М.П. Галочкин и др. - Теория и реализация языков программирования (2006) (1134633), страница 28
Текст из файла (страница 28)
Ãåíåðàöèÿ êîäà9.2. Äèíàìè÷åñêàÿïàìÿòèîðãàíèçàöèÿÄèíàìè÷åñêàÿ îðãàíèçàöèÿ ïàìÿòè - ýòî îðãàíèçàöèÿïàìÿòè ïåðèîäà èñïîëíåíèÿ ïðîãðàììû. Îïåðàòèâíàÿ ïàìÿòü ïðîãðàììû îáû÷íî ñîñòîèò èç íåñêîëüêèõ îñíîâíûõ ðàçäåëîâ: ñòåê (ìàãàçèí), êó÷à, îáëàñòü ñòàòè÷åñêèõäàííûõ (èíèöèàëèçèðîâàííûõ è íåèíèöèàëèçèðîâàííûõ).Íàèáîëåå ñëîæíîé ÿâëÿåòñÿ ðàáîòà ñî ñòåêîì. Âîîáùå ãîâîðÿ, ñòåê ïåðèîäà èñïîëíåíèÿ íåîáõîäèì äëÿ ïðîãðàììíå íà âñåõ ÿçûêàõ ïðîãðàììèðîâàíèÿ. Íàïðèìåð, â ðàííèõâåðñèÿõ Ôîðòðàíà íåò ðåêóðñèè, òàê ÷òî ïðîãðàììà ìîæåòèñïîëíÿòüñÿ áåç ñòåêà. Ñ äðóãîé ñòîðîíû, èñïîëíåíèå ïðîãðàììû ñ ðåêóðñèåé ìîæåò áûòü ðåàëèçîâàíî è áåç ñòåêà(òîãî æå ýôôåêòà ìîæíî äîñòè÷ü, íàïðèìåð, è ñ ïîìîùüþñïèñêîâûõ ñòðóêòóð).
Îäíàêî, äëÿ ýôôåêòèâíîé ðåàëèçàöèè ïîëüçóþòñÿ ñòåêîì, êîòîðûé, êàê ïðàâèëî, ïîääåðæèâàåòñÿ íà óðîâíå ìàøèííûõ êîìàíä.Ðàññìîòðèì ñõåìó îðãàíèçàöèè ìàãàçèíà ïåðèîäà âûïîëíåíèÿ äëÿ ïðîñòåéøåãî ñëó÷àÿ (êàê, íàïðèìåð, â ÿçûêåÏàñêàëü), êîãäà âñå ïåðåìåííûå â ìàãàçèíå (ôàêòè÷åñêèåïàðàìåòðû è ëîêàëüíûå ïåðåìåííûå) èìåþò èçâåñòíûå ïðèòðàíñëÿöèè ñìåùåíèÿ. Ìàãàçèí ñëóæèò äëÿ õðàíåíèÿ ëîêàëüíûõ ïåðåìåííûõ (è ïàðàìåòðîâ) è îáðàùåíèÿ ê íèì âÿçûêàõ, äîïóñêàþùèõ ðåêóðñèâíûå âûçîâû ïðîöåäóð.
Åù¼îäíîé çàäà÷åé, êîòîðóþ íåîáõîäèìî ðåøàòü ïðè òðàíñëÿöèè ÿçûêîâ ñ áëî÷íîé ñòðóêòóðîé îáåñïå÷åíèå ðåàëèçàöèè ìåõàíèçìîâ ñòàòè÷åñêîé âëîæåííîñòè. Ïóñòü èìååòñÿñëåäóþùèé ôðàãìåíò ïðîãðàììû íà Ïàñêàëå:procedure P1;var V1;procedure P2;var V2;begin...P2;V1:=...9.2. Äèíàìè÷åñêàÿ îðãàíèçàöèÿ ïàìÿòè203V2:=......end;begin...P2;...end; ïðîöåññå âûïîëíåíèÿ ýòîé ïðîãðàììû, íàõîäÿñü âïðîöåäóðå P2, ìû äîëæíû èìåòü äîñòóï ê ïîñëåäíåìó ýêçåìïëÿðó çíà÷åíèé ïåðåìåííûõ ïðîöåäóðû P2 è ê ýêçåìïëÿðó çíà÷åíèé ïåðåìåííûõ ïðîöåäóðû P1, èç êîòîðîé áûëà âûçâàíà P2. Êðîìå òîãî, íåîáõîäèìî îáåñïå÷èòü âîññòàíîâëåíèå ñîñòîÿíèÿ ïðîãðàììû ïðè çàâåðøåíèè âûïîëíåíèÿ ïðîöåäóðû.Ìû ðàññìîòðèì äâå âîçìîæíûå ñõåìû äèíàìè÷åñêîéîðãàíèçàöèè ïàìÿòè: ñõåìó ñî ñòàòè÷åñêîé öåïî÷êîé è ñäèñïëååì â ïàìÿòè.
 ïåðâîì ñëó÷àå âñå ñòàòè÷åñêèå êîíòåêñòû ñâÿçàíû â ñïèñîê, êîòîðûé íàçûâàåòñÿ ñòàòè÷åñêîé öåïî÷êîé; â êàæäîé çàïèñè äëÿ ïðîöåäóðû â ìàãàçèíå õðàíèòñÿ óêàçàòåëü íà çàïèñü ñòàòè÷åñêè îõâàòûâàþùåé ïðîöåäóðû (ïîìèìî, êîíå÷íî, óêàçàòåëÿ äèíàìè÷åñêîéöåïî÷êè óêàçàòåëÿ íà ¾áàçó¿ äèíàìè÷åñêè ïðåäûäóùåéïðîöåäóðû). Âî âòîðîì ñëó÷àå äëÿ õðàíåíèÿ ññûëîê íà ñòàòè÷åñêèå êîíòåêñòû èñïîëüçóåòñÿ ìàññèâ, íàçûâàåìûé äèñïëååì. Èñïîëüçîâàíèå òîé èëè èíîé ñõåìû îïðåäåëÿåòñÿ,ïîìèìî ïðî÷èõ óñëîâèé, ïðåæäå âñåãî ÷èñëîì àäðåñíûõ ðåãèñòðîâ.9.2.1.
Îðãàíèçàöèÿ ìàãàçèíà ñî ñòàòè÷åñêîé öåïî÷êîéÈòàê, â ñëó÷àå ñòàòè÷åñêîé öåïî÷êè ìàãàçèí îðãàíèçîâàí, êàê ýòî èçîáðàæåíî íà ðèñ. 9.1.Òàêèì îáðàçîì, íà çàïèñü òåêóùåé ïðîöåäóðû â ìàãàçèíå óêàçûâàåò ðåãèñòð BP (Base Pointer), ñ êîòîðîãî íà÷èíàåòñÿ äèíàìè÷åñêàÿ öåïî÷êà. Íà ñòàòè÷åñêóþ öåïî÷êó204Ãëàâà 9. Ãåíåðàöèÿ êîäàFbgbfZevgucZ^j_kL_dmsbcklZlbq_kdbcmjh\_gvKhojZg_ggu_j_]bklju\dexqZy/3EhdZevgu_iZjZf_ljuIj_^u^msbc%3%3LhqdZ\ha\jZlZH[eZklvihke_^g_c\ua\Zgghcijhp_^mjuNZdlbq_kdb_iZjZf_ljuKhojZg_ggu_j_]bkljuIj_^u^msbc/3Ij_^u^msbcklZlbq_kdbcmjh\_gvEhdZevgu_iZjZf_lju/3'HOWDIj_^u^msbc%3xxxxxFZdkbfZevgucZ^j_kÐèñ. 9.1.óêàçûâàåò ðåãèñòð LP (Link Pointer).
 êà÷åñòâå ðåãèñòðîâBP è LP â ðàçëè÷íûõ ñèñòåìàõ êîìàíä ìîãóò èñïîëüçîâàòüñÿóíèâåðñàëüíûå, àäðåñíûå èëè ñïåöèàëüíûå ðåãèñòðû. Ëîêàëüíûå ïåðåìåííûå îòñ÷èòûâàþòñÿ îò ðåãèñòðà BP ââåðõ,ôàêòè÷åñêèå ïàðàìåòðû âíèç ñ ó÷¼òîì ïàìÿòè, çàíÿòîéòî÷êîé âîçâðàòà è ñàìèì ñîõðàí¼ííûì ðåãèñòðîì BP.Âûçîâ ïîäïðîãðàìì ðàçëè÷íîãî ñòàòè÷åñêîãî óðîâíÿïðîèçâîäèòñÿ íåñêîëüêî ïî-ðàçíîìó.
Ïðè âûçîâå ïîäïðîãðàììû òîãî æå ñòàòè÷åñêîãî óðîâíÿ, ÷òî è âûçûâàþùàÿïîäïðîãðàììà (íàïðèìåð, ðåêóðñèâíûé âûçîâ òîé æå ñàìîé ïîäïðîãðàììû), âûïîëíÿþòñÿ ñëåäóþùèå êîìàíäû:Çàíåñåíèå ôàêòè÷åñêèõ ïàðàìåòðîâ â ìàãàçèíJSR A9.2. Äèíàìè÷åñêàÿ îðãàíèçàöèÿ ïàìÿòè205Êîìàíäà JSR A ïðîäâèãàåò óêàçàòåëü SP, çàíîñèò PC íàâåðõóøêó ìàãàçèíà è îñóùåñòâëÿåò ïåðåõîä ïî àäðåñó A.Ïîñëå âûïîëíåíèÿ ýòèõ êîìàíä ñîñòîÿíèå ìàãàçèíà ñòàíîâèòñÿ òàêèì, êàê ýòî èçîáðàæåíî íà ðèñ. 9.2. Çàíåñåíèå BP,îòâåäåíèå ëîêàëüíûõ, ñîõðàíåíèå ðåãèñòðîâ äåëàåò âûçûâàåìàÿ ïîäïðîãðàììà (ñì.
íèæå).L_dmsbcklZlbq_kdbcmjh\_gvLhqdZ\ha\jZlZ63NZdlbq_kdb_iZjZf_ljuKhojZg_ggu_j_]bklju\dexqZy/3EhdZevgu_iZjZf_ljuIj_^u^msbc%3%3LhqdZ\ha\jZlZNZdlbq_kdb_iZjZf_ljuKhojZg_ggu_j_]bkljuIj_^u^msbc/3Ij_^u^msbcklZlbq_kdbcmjh\_gv/3EhdZevgu_iZjZf_ljuIj_^u^msbc%3xxxxxÐèñ. 9.2.Ïðè âûçîâå ëîêàëüíîé ïîäïðîãðàììû íåîáõîäèìî óñòàíîâèòü óêàçàòåëü ñòàòè÷åñêîãî óðîâíÿ íà òåêóùóþ ïîäïðîãðàììó, à ïðè âûõîäå âîññòàíîâèòü åãî íà ñòàðîå çíà÷åíèå(îõâàòûâàþùåé òåêóùóþ). Äëÿ ýòîãî èñïîëíÿþòñÿ ñëåäóþùèå êîìàíäû:206Ãëàâà 9.
Ãåíåðàöèÿ êîäàÇàíåñåíèå ôàêòè÷åñêèõ ïàðàìåòðîâ â ìàãàçèíMOVE BP, LPSUB Delta, LPJSR AÇäåñü Delta ðàçìåð ëîêàëüíûõ âûçûâàþùåé ïîäïðîãðàììû ïëþñ äâîéíàÿ äëèíà ñëîâà. Ìàãàçèí ïîñëå ýòîãîïðèíèìàåò ñîñòîÿíèå, èçîáðàæ¼ííîå íà ðèñ. 9.3. Ïðåäïîëàãàåòñÿ, ÷òî ðåãèñòð LP óæå ñîõðàí¼í ñðåäè ñîõðàíÿåìûõðåãèñòðîâ, ïðè÷¼ì ñàìûì ïåðâûì (ñðàçó ïîñëå ëîêàëüíûõïåðåìåííûõ).Ïîñëå âûõîäà èç ïîäïðîãðàììû â âûçûâàþùåé ïîäïðîãðàììå âûïîëíÿåòñÿ êîìàíäàMOVE (LP), LPêîòîðàÿ âîññòàíàâëèâàåò ñòàðîå çíà÷åíèå ñòàòè÷åñêîé öåïî÷êè.
Åñëè âûõîä îñóùåñòâëÿëñÿ èç ïîäïðîãðàììû 1-ãîóðîâíÿ, ýòó êîìàíäó âûïîëíÿòü íå íàäî, ïîñêîëüêó äëÿ 1ãî óðîâíÿ íåò ñòàòè÷åñêîé öåïî÷êè.Ïðè âûçîâå ïîäïðîãðàììû ìåíüøåãî, ÷åì âûçûâàþùàÿ,óðîâíÿ âûïîëíÿþòñÿ ñëåäóþùèå êîìàíäû:Çàíåñåíèå ôàêòè÷åñêèõ ïàðàìåòðîâ â ìàãàçèíMOVE (LP), LP /* ñòîëüêî ðàç, êàêîâà ðàçíîñòüóðîâíåé âûçûâàþùåé è âûçûâàåìîé ÏÏ */JSR AÒåì ñàìûì óñòàíàâëèâàåòñÿ ñòàòè÷åñêèé óðîâåíü âûçûâàåìîé ïîäïðîãðàììû. Ïîñëå âûõîäà èç ïîäïðîãðàììû âûïîëíÿåòñÿ êîìàíäàMOVE-Delta(BP), LPâîññòàíàâëèâàþùàÿ ñòàòè÷åñêèé óðîâåíü âûçûâàþùåé ïîäïðîãðàììû.Òåëî ïîäïðîãðàììû íà÷èíàåòñÿ ñî ñëåäóþùèõ êîìàíä:LINK BP , -ðàçìåð_ëîêàëüíûõMOVEM -(SP)9.2. Äèíàìè÷åñêàÿ îðãàíèçàöèÿ ïàìÿòè207L_dmsbcklZlbq_kdbcmjh\_gvLhqdZ\ha\jZlZ63NZdlbq_kdb_iZjZf_ljuKhojZg_ggu_j_]bkljuIj_^u^msbc/3Ij_^u^msbcklZlbq_kdbcmjh\_gv/3EhdZevgu_iZjZf_lju'HOWDIj_^u^msbc%3%3xxxxxÐèñ.
9.3.Êîìàíäà LINK BP, ðàçìåð_ëîêàëüíûõòð¼ì êîìàíäàì:ýêâèâàëåíòíàMOVE BP, -(SP)MOVE SP, BPADD -ðàçìåð_ëîêàëüíûõ, SPÊîìàíäà MOVEM ñîõðàíÿåò â ìàãàçèíå ðåãèñòðû. ðåçóëüòàòå âûïîëíåíèÿ ýòèõ êîìàíä ìàãàçèí ïðèîáðåòàåò âèä, èçîáðàæ¼ííûé íà ðèñ. 9.1.Âûõîä èç ïîäïðîãðàììû îñóùåñòâëÿåòñÿ ñëåäóþùåé ïîñëåäîâàòåëüíîñòüþ êîìàíä:MOVEM (SP)+UNLK BPRTD ðàçìåð_ôàêòè÷åñêèõÊîìàíäà MOVEM âîññòàíàâëèâàåò ðåãèñòðû èç ìàãàçèíà.208Ãëàâà 9. Ãåíåðàöèÿ êîäàÊîìàíäà UNLK BP ýêâèâàëåíòíà òàêîé ïîñëåäîâàòåëüíîñòèêîìàíä:MOVE BP,SPMOVE (SP),BPADD #4, SP /* 4 - ðàçìåð ñëîâà */Êîìàíäà RTD ðàçìåð_ôàêòè÷åñêèõ, â ñâîþ î÷åðåäü, ýêâèâàëåíòíà ïîñëåäîâàòåëüíîñòèADD ðàçìåð_ôàêòè÷åñêèõ+4, SPJMP -ðàçìåð_ôàêòè÷åñêèõ-4(SP)Ïîñëå å¼ âûïîëíåíèÿ ìàãàçèí âîññòàíàâëèâàåòñÿ äî ñîñòîÿíèÿ, êîòîðîå áûëî äî âûçîâà. çàâèñèìîñòè îò íàëè÷èÿ ëîêàëüíûõ ïåðåìåííûõ, ôàêòè÷åñêèõ ïàðàìåòðîâ è íåîáõîäèìîñòè ñîõðàíåíèÿ ðåãèñòðîâ êàæäàÿ èç ýòèõ êîìàíä ìîæåò îòñóòñòâîâàòü.9.2.2.
Îðãàíèçàöèÿ ìàãàçèíà ñ äèñïëååìÐàññìîòðèì òåïåðü îðãàíèçàöèþ ìàãàçèíà ñ äèñïëååì.Äèñïëåé ýòî ìàññèâ (DISPLAY) , i-é ýëåìåíò êîòîðîãîïðåäñòàâëÿåò ñîáîé óêàçàòåëü íà îáëàñòü àêòèâàöèè ïîñëåäíåé âûçâàííîé ïîäïðîãðàììû i-ãî ñòàòè÷åñêîãî óðîâíÿ. Äîñòóï ê ïåðåìåííûì ñàìîé âíóòðåííåé ïîäïðîãðàììûîñóùåñòâëÿåòñÿ ÷åðåç ðåãèñòð BP. Äèñïëåé ìîæåò áûòü ðåàëèçîâàí ëèáî ÷åðåç ðåãèñòðû (åñëè èõ äîñòàòî÷íî), ëèáî÷åðåç ìàññèâ â ïàìÿòè.Ïðè âûçîâå ïðîöåäóðû ñëåäóþùåãî (ïî îòíîøåíèþê âûçûâàþùåé) óðîâíÿ â äèñïëåå îòâîäèòñÿ î÷åðåäíîéýëåìåíò. Åñëè âûçûâàþùàÿ ïðîöåäóðà èìååò ñòàòè÷åñêèéóðîâåíü i, òî ïðè âûçîâå ïðîöåäóðû óðîâíÿ j 6 i ýëåìåíòûäèñïëåÿ j, . . .
, i äîëæíû áûòü ñêîïèðîâàíû (îáû÷íî â ñòåêâûçûâàþùåé ïðîöåäóðû), òåêóùèì óðîâíåì ñòàíîâèòñÿ jè â DISPLAY[j] çàíîñèòñÿ óêàçàòåëü íà îáëàñòü àêòèâàöèèâûçûâàåìîé ïðîöåäóðû. Ïî îêîí÷àíèè ðàáîòû âûçûâàåìîé ïðîöåäóðû ñîäåðæèìîå äèñïëåÿ âîññòàíàâëèâàåòñÿ èçñòåêà.9.3. Íàçíà÷åíèå àäðåñîâ209Èíîãäà èñïîëüçóåòñÿ êîìáèíèðîâàííàÿ ñõåìà äèñïëåéâ ìàãàçèíå. Äèñïëåé õðàíèòñÿ â îáëàñòè àêòèâàöèè êàæäîéïðîöåäóðû. Ôîðìèðîâàíèå äèñïëåÿ äëÿ ïðîöåäóðû îñóùåñòâëÿåòñÿ â ñîîòâåòñòâèè ñ ïðàâèëàìè, îïèñàííûìè âûøå.Îòäåëüíîãî ðàññìîòðåíèÿ òðåáóåò âîïðîñ î òåõíèêå ïåðåäà÷è ôàêòè÷åñêèõ ïàðàìåòðîâ. Êîíå÷íî, â ñëó÷àå ïðîñòûõ ïàðàìåòðîâ (íàïðèìåð, ÷èñåë) ïðîáëåì íå âîçíèêàåò.Îäíàêî ïåðåäà÷à ìàññèâîâ ïî çíà÷åíèþ îïåðàöèÿ äîâîëüíî äîðîãàÿ, ïîýòîìó ñ òî÷êè çðåíèÿ ýêîíîìèè ïàìÿòè öåëåñîîáðàçíåå ñíà÷àëà â ïîäïðîãðàììó ïåðåäàòü àäðåñ ìàññèâà, à çàòåì óæå èç ïîäïðîãðàììû ïî àäðåñó ïåðåäàòü âìàãàçèí ñàì ìàññèâ.
 ñâÿçè ñ ïåðåäà÷åé ïàðàìåòðîâ ñëåäóåò óïîìÿíóòü åù¼ îäíî îáñòîÿòåëüñòâî.Ðàññìîòðåííàÿ ñõåìà îðãàíèçàöèè ìàãàçèíà äîïóñòèìà òîëüêî äëÿ ÿçûêîâ ñî ñòàòè÷åñêè èçâåñòíûìè ðàçìåðàìè ôàêòè÷åñêèõ ïàðàìåòðîâ. Îäíàêî, íàïðèìåð, â ÿçûêåÌîäóëà-2 ïî çíà÷åíèþ ìîæåò áûòü ïåðåäàí ãèáêèé ìàññèâ,è â ýòîì ñëó÷àå íåëüçÿ ñòàòè÷åñêè ðàñïðåäåëèòü ïàìÿòüäëÿ ïàðàìåòðîâ. Îáû÷íî â òàêèõ ñëó÷àÿõ çàâîäÿò òàê íàçûâàåìûé ¾ïàñïîðò¿ ìàññèâà, â êîòîðîì õðàíèòñÿ âñÿ íåîáõîäèìàÿ èíôîðìàöèÿ, à ñàì ìàññèâ ðàçìåùàåòñÿ â ìàãàçèíåâ ðàáî÷åé îáëàñòè âûøå ñîõðàí¼ííûõ ðåãèñòðîâ.9.3. Íàçíà÷åíèå àäðåñîâÍàçíà÷åíèå àäðåñîâ ïåðåìåííûì, ïàðàìåòðàì è ïîëÿìçàïèñåé ïðîèñõîäèò ïðè îáðàáîòêå ñîîòâåòñòâóþùèõ îáúÿâëåíèé.
 îäíîïðîõîäíîì òðàíñëÿòîðå ýòî ìîæåò ïðîèçâîäèòüñÿ âìåñòå ñ ïîñòðîåíèåì îñíîâíîé òàáëèöû ñèìâîëîâ è ñîîòâåòñòâóþùèå àäðåñà (èëè ñìåùåíèÿ) ìîãóò õðàíèòüñÿ â ýòîé æå òàáëèöå.  ïðîìåæóòî÷íîì ïðåäñòàâëåíèèËèäåð îáúÿâëåíèÿ ñîõðàíåíû, ÷òî äåëàåò ýòî ïðîìåæóòî÷íîå ïðåäñòàâëåíèå ìàøèííî-íåçàâèñèìûì. Íàïîìíèì, ÷òîâ Ëèäåð-ïðåäñòàâëåíèè êàæäîìó îïèñàíèþ ñîîòâåòñòâóåòíåêîòîðûé íîìåð.  ïðîöåññå ðàáîòû ãåíåðàòîðà êîäîâ ïîääåðæèâàåòñÿ òàáëèöà Table, â êîòîðîé ïî ýòîìó íîìåðó(âõîäó) ñîäåðæèòñÿ ñëåäóþùàÿ èíôîðìàöèÿ:210Ãëàâà 9.
Ãåíåðàöèÿ êîäà äëÿ òèïà: åãî ðàçìåð; äëÿ ïåðåìåííîé: ñìåùåíèå â îáëàñòè ïðîöåäóðû (èëèãëîáàëüíîé îáëàñòè); äëÿ ïîëÿ çàïèñè: ñìåùåíèå âíóòðè çàïèñè; äëÿ ïðîöåäóðû: ðàçìåð ëîêàëüíûõ ïàðàìåòðîâ; äëÿ ìàññèâà: ðàçìåð ìàññèâà, ðàçìåð ýëåìåíòà, çíà÷åíèå ëåâîé è ïðàâîé ãðàíèöû.Ôóíêöèÿ IncTab âûðàáàòûâàåò óêàçàòåëü (âõîä) íà íîâûé ýëåìåíò òàáëèöû, ïðîâåðÿÿ ïðè ýòîì íàëè÷èå ñâîáîäíîé ïàìÿòè.Äëÿ âû÷èñëåíèÿ àäðåñîâ îïðåäåëèì äëÿ êàæäîãî îáúÿâëåíèÿ äâà ñèíòåçèðóåìûõ àòðèáóòà: DISP áóäåò îáîçíà÷àòüñìåùåíèå âíóòðè îáëàñòè ïðîöåäóðû (èëè åäèíèöû êîìïèëÿöèè), à SIZE ðàçìåð.