Êîìàíäû äëÿ ðàáîòû ñ ïîäïðîãðàììàìè. Ñòåêè.  ïðàêòèêå ïðîãðàììèðîâàíèÿ øèðîêî èñïîëüçóåòñÿ òàêîé ïðèåì, êàê îðãàíèçàöèÿ ïîäïðîãðàìì. Ïîäïðîãðàììà îïèñûâàåòñÿ îäèí ðàç, à èñïîëüçîâàòüñÿ (âûçûâàòüñÿ) ìîæåò èç ðàçëè÷íûõ ìåñò ïðîãðàììû. Ïðè ýòîì, ïîñëå òîãî êàê ïîäïðîãðàììà çàêîí÷èëà ñâîþ ðàáîòó, óïðàâëåíèå äîëæíî áûòü ïåðåäàíî òóäà, îòêóäà ïîäïðîãðàììà áûëà âûçâàíà íà êîìàíäó, ñëåäóþùóþ â ïàìÿòè ñðàçó çà êîìàíäîé îáðàùåíèÿ ê ïîäïðîãðàììå. Àäðåñ êîìàíäû, íà êîòîðóþ óïðàâëåíèå ïåðåäàåòñÿ ïîñëå îêîí÷àíèÿ ðàáîòû ïîäïðîãðàìì, íàçûâàåòñÿ àäðåñîì âîçâðàòà. Î÷åâèäíî, äëÿ òîãî, ÷òîáû íà÷àòü âûïîëíÿòü ïîäïðîãðàììó, â ïðîãðàììíûé ñ÷åò÷èê íåîáõîäèìî çàãðóçèòü àäðåñ ïåðâîé êîìàíäû ïîäïðîãðàììû. Äëÿ îñóùåñòâëåíèÿ âîçâðàòà èç ïîäïðîãðàììû íåîáõîäèìî çàïîìíèòü â êàêîì-òî ìåñòå àäðåñ âîçâðàòà. Ìîæíî, íàïðèìåð, ñîõðàíèòü àäðåñ âîçâðàòà â îäíîì èç ðåãèñòðîâ ïðîöåññîðà. Òàêîé ñïîñîá ñîõðàíåíèÿ àäðåñà âîçâðàòà î÷åíü ïðîñò è ëåãêî ðåàëèçóåòñÿ. Îäíàêî îí îáëàäàåò îäíèì ñóùåñòâåííûì íåäîñòàòêîì. Äîñòàòî÷íî ÷àñòî âñòðå÷àþòñÿ ïîäïðîãðàììû, êîòîðûå âûçûâàþò äðóãèå ïîäïðîãðàììû. Ïóñòü îñíîâíàÿ ïðîãðàììà âûçâàëà ïîäïðîãðàììó À. Îíà â ñâîþ î÷åðåäü îáðàòèëàñü ê ïîäïðîãðàììå Â. Åñëè àäðåñ âîçâðàòà äëÿ ïîäïðîãðàììû À õðàíèòñÿ â ðåãèñòðå ïðîöåññîðà, òî êóäà äåâàòü àäðåñ âîçâðàòà ïðè âûçîâå ïîäïðîãðàììû Â?
Äëÿ îðãàíèçàöèè ïîäïðîãðàìì áîëüøèíñòâî ÝÂÌ èñïîëüçóþò àïïàðàòíî ïîääåðæèâàåìóþ ñòðóêòóðó äàííûõ, íàçûâàåìóþ ñòåêîì. Ñòåê — ýòî ñòðóêòóðà äàííûõ, îðãàíèçîâàííàÿ ïî ïðèíöèïó: ïîñëåäíèì âîøåë — ïåðâûì âûøåë, ò.å. ïîñëåäíèå çàïèñàííûå â ñòåê äàííûå èçâëåêàþòñÿ èç íåãî ïåðâûìè.  ïåðåâîäå ñ àíãë, stack — ñòîïêà. Àíàëîãîì ñòåêà ìîæåò ñëóæèòü ñòîïêà òàðåëîê. Ïîëîæèòü òàðåëêó â ñòîïêó ìîæíî òîëüêî ñâåðõó, èçâëå÷ü îïÿòü-òàêè òîëüêî âåðõíþþ òàðåëêó.  ÝÂÌ äëÿ îðãàíèçàöèè ñòåêà âûäåëÿåòñÿ îáëàñòü îïåðàòèâíîé ïàìÿòè, à äëÿ åå àäðåñàöèè è äîñòóïà ê ñòåêó èñïîëüçóåòñÿ óïîìèíàâøèéñÿ âûøå ðåãèñòð — óêàçàòåëü ñòåêà. Óêàçàòåëü ñòåêà õðàíèò àäðåñ ÿ÷åéêè ïàìÿòè, ñîäåðæàùåé ïîñëåäíåå ïîìåùåííîå â ñòåê çíà÷åíèå. Ïðè çàïèñè ÷èñëà â ñòåê óêàçàòåëü ñòåêà ìîäèôèöèðóåòñÿ òàê, ÷òîáû îí óêàçûâàë íà ñëåäóþùóþ ñâîáîäíóþ ÿ÷åéêó, è â íåå çàïèñûâàþòñÿ äàííûå. Ïðè èçâëå÷åíèè èç ñòåêà äàííûå ñ÷èòûâàþòñÿ èç ÿ÷åéêè, íà êîòîðóþ óêàçûâàåò óêàçàòåëü ñòåêà, çàòåì óêàçàòåëü ñòåêà ìîäèôèöèðóåòñÿ òàê, ÷òîáû óêàçûâàòü íà ïðåäïîñëåäíåå çàïîìíåííîå çíà÷åíèå. Îáû÷íî ñòåêè ðàñòóò â ñòîðîíó óìåíüøåíèÿ àäðåñîâ, ò.å. ïðè çàïèñè ÷èñëà óêàçàòåëü ñòåêà óìåíüøàåòñÿ, ïðè èçâëå÷åíèè — óâåëè÷èâàåòñÿ.
Ïðè îðãàíèçàöèè ðàáîòû ñ ïîäïðîãðàììàìè äëÿ ñîõðàíåíèÿ àäðåñà âîçâðàòà èñïîëüçóåòñÿ ñòåê. Êîìàíäû âûçîâà ïîäïðîãðàìì CALL <àäðåñ> ðàáîòàþò ñëåäóþùèì îáðàçîì. Êîãäà ïðîöåññîð ñ÷èòûâàåò èç ïàìÿòè êîìàíäó âûçîâà ïîäïðîãðàììû, ïðîãðàììíûé ñ÷åò÷èê óâåëè÷èâàåòñÿ è ïîêàçûâàåò íà êîìàíäó, ñëåäóþùóþ çà êîìàíäîé âûçîâà ïîäïðîãðàììû. Ñ ýòîé êîìàíäû âûïîëíåíèå ïðîãðàììû äîëæíî ïðîäîëæèòüñÿ ïîñëå îêîí÷àíèÿ ðàáîòû ïîäïðîãðàììû. Òàêèì îáðàçîì, ïðîãðàììíûé ñ÷åò÷èê ïîñëå âûáîðêè êîìàíäû âûçîâà ïîäïðîãðàììû ñîäåðæèò àäðåñ âîçâðàòà. Ïðè âûïîëíåíèè îáðàùåíèÿ ê ïîäïðîãðàììå ïðîöåññîð ñîõðàíÿåò ñîäåðæèìîå ïðîãðàììíîãî ñ÷åò÷èêà â ñòåêå. Àäðåñ, ñ êîòîðîãî íà÷èíàåòñÿ ïîäïðîãðàììà, âû÷èñëÿåòñÿ ïðîöåññîðîì ïî àäðåñíîìó ïîëþ êîìàíäû âûçîâà ïîäïðîãðàììû è ïîìåùàåòñÿ â ïðîãðàììíûé ñ÷åò÷èê. Ïðîöåññîð ïðèñòóïàåò ê âûïîëíåíèþ ïîäïðîãðàììû. Åñëè ïîäïðîãðàììà â ïðîöåññå ñâîåé ðàáîòû âûçîâåò äðóãóþ ïîäïðîãðàììó, íîâîå çíà÷åíèå àäðåñà âîçâðàòà áóäåò òàêæå âêëþ÷åíî â ñòåê ïîâåðõ ñòàðîãî àäðåñà âîçâðàòà.
Äëÿ âîçâðàòà èç ïîäïðîãðàììû â îñíîâíóþ ïðîãðàììó ñëóæàò êîìàíäû âîçâðàòà RETURN. Êîìàíäû âîçâðàòà èç ïîäïðîãðàììû èçâëåêàþò èç ñòåêà âåðõíèé ýëåìåíò è ïîìåùàþò åãî â ïðîãðàììíûé ñ÷åò÷èê. Åñëè èìåëè ìåñòî íåñêîëüêî âëîæåííûõ âûçîâîâ ïîäïðîãðàìì, òî âîçâðàò ïðîèçîéäåò ïî àäðåñó âîçâðàòà, ñîõðàíåííîìó ïîñëå ïîñëåäíåãî âûçîâà, òàê êàê äëÿ õðàíåíèÿ àäðåñîâ âîçâðàòà èñïîëüçóåòñÿ ñòåê è ïîñëåäíèé ñîõðàíåííûé àäðåñ âîçâðàòà áóäåò èñïîëüçîâàí ïåðâûì.
Ïðî÷èå êîìàíäû.  ÝÂÌ ìîãóò áûòü äîïîëíèòåëüíûå (ñïåöèàëüíûå) êîìàíäû. Ê èõ ÷èñëó ìîæíî îòíåñòè êîìàíäû îñòàíîâêè öåíòðàëüíîãî ïðîöåññîðà, ñáðîñà âíåøíèõ óñòðîéñòâ, óñòàíîâêè èëè ñáðîñà îòäåëüíûõ ïðèçíàêîâ è ò.ä.
|