А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 5
Текст из файла (страница 5)
Íàçîâ¼ì ýòîò íîìåð ôèçè÷åñêèì àäðåñîì ÿ÷åéêè ïàìÿòè.Èçíà÷àëüíî íèêàêèõ äðóãèõ àäðåñîâ, êðîìå ôèçè÷åñêèõ, ó ÿ÷ååê ïàìÿòè íå áûëî.  ìàøèííîì êîäå ïðîãðàìì èñïîëüçîâàëèñü èìåííî ôèçè÷åñêèå àäðåñà, êîòîðûå íàçûâàëè ïðîñòî ¾àäðåñàìè¿, áåç óòî÷íÿþùåãîñëîâà ¾ôèçè÷åñêèé¿. Îäíàêî ñ ðàçâèòèåì ìóëüòèçàäà÷íîãî ðåæèìà ðàáîòû âû÷èñëèòåëüíûõ ñèñòåì îêàçàëîñü, ÷òî â ñèëó öåëîãî ðÿäà ïðè÷èíèñïîëüçîâàíèå ôèçè÷åñêèõ àäðåñîâ íåóäîáíî. Íàïðèìåð, ïðîãðàììà â ìàøèííîì êîäå, â êîòîðîé èñïîëüçóþòñÿ ôèçè÷åñêèå àäðåñà ÿ÷ååê ïàìÿòè,íå ñìîæåò ðàáîòàòü â äðóãîé îáëàñòè ïàìÿòè à âåäü â ìóëüòèçàäà÷íîéñèòóàöèè ìîæåò îêàçàòüñÿ, ÷òî íóæíàÿ íàì îáëàñòü óæå çàíÿòà äðóãîéçàäà÷åé. Åñòü è äðóãèå ïðè÷èíû, êîòîðûå îáû÷íî ïîäðîáíî ðàññìàòðèâàþòñÿ â ó÷åáíûõ êóðñàõ, ïîñâÿùåííûõ îïåðàöèîííûì ñèñòåìàì. ñîâðåìåííûõ ïðîöåññîðàõ èñïîëüçóåòñÿ äâà âèäà àäðåñîâ.
Ñàì ïðîöåññîð ðàáîòàåò ñ ïàìÿòüþ, èñïîëüçóÿ óæå çíàêîìûå íàì ôèçè÷åñêèåàäðåñà. À âîò â ïðîãðàììàõ, êîòîðûå íà ïðîöåññîðå âûïîëíÿþòñÿ, èñïîëüçóþòñÿ ñîâñåì äðóãèå àäðåñà âèðòóàëüíûå. Âèðòóàëüíûé àäðåñ ýòî ÷èñëî èç íåêîòîðîãî àáñòðàêòíîãî âèðòóàëüíîãî àäðåñíîãîïðîñòðàíñòâà .
Íà òåõ ïðîöåññîðàõ, ñ êîòîðûìè ìû áóäåì ðàáîòàòü,âèðòóàëüíûå àäðåñà ïðåäñòàâëÿþò ñîáîé 32-áèòíûå öåëûå ÷èñëà, òî åñòüâèðòóàëüíîå àäðåñíîå ïðîñòðàíñòâî åñòü ìíîæåñòâî öåëûõ ÷èñåë îò 0äî 232 − 1; àäðåñà îáû÷íî çàïèñûâàþòñÿ â øåñòíàäöàòåðè÷íîé ñèñòåìå,òàê ÷òî àäðåñ ìîæåò áûòü ÷èñëîì îò 00000000 äî ffffffff. Âàæíî ïîíèìàòü, ÷òî âèðòóàëüíûé àäðåñ ñîâåðøåííî íå îáÿçàí ñîîòâåòñòâîâàòüêàêîé-ëèáî ÿ÷åéêå ïàìÿòè.
Òî÷íåå ãîâîðÿ, íåêîòîðûå âèðòóàëüíûå àäðåñà ñîîòâåòñòâóþò ôèçè÷åñêèì ÿ÷åéêàì ïàìÿòè, äðóãèå íå ñîîòâåòñòâóþò, à íåêîòîðûå àäðåñà è âîâñå ìîãóò òî ñîîòâåòñòâîâàòü ôèçè÷åñêîé ïàìÿòè, òî íå ñîîòâåòñòâîâàòü. Òàêèå ñîîòâåòñòâèÿ çàäàþòñÿ ïóò¼ìñîîòâåòñòâóþùåé íàñòðîéêè öåíòðàëüíîãî ïðîöåññîðà; çà ýòó íàñòðîéêó îòâå÷àåò îïåðàöèîííàÿ ñèñòåìà. Áóäó÷è ñîîòâåòñòâóþùèì îáðàçîì16íàñòðîåííûì, öåíòðàëüíûé ïðîöåññîð, ïîëó÷èâ èç î÷åðåäíîé ìàøèííîéèíñòðóêöèè âèðòóàëüíûé àäðåñ, ïðåîáðàçóåò åãî â àäðåñ ôèçè÷åñêèé,è òîãäà óæå îáðàùàåòñÿ ê îïåðàòèâíîé ïàìÿòè.
Òàêèì îáðàçîì, ìû âïðîãðàììàõ èñïîëüçóåì â êà÷åñòâå àäðåñîâ íå ôèçè÷åñêèå íîìåðà ÿ÷ååêïàìÿòè, à íåêèå àáñòðàêòíûå àäðåñà, êîòîðûå ïîòîì óæå ñàì ïðîöåññîðïðåîáðàçóåò â íàñòîÿùèå íîìåðà ÿ÷ååê. Ýòî ïîçâîëÿåò, íàïðèìåð, êàæäîéïðîãðàììå èìåòü ñâî¼ ñîáñòâåííîå àäðåñíîå ïðîñòðàíñòâî: äåéñòâèòåëüíî, íèêòî íå ìåøàåò îïåðàöèîííîé ñèñòåìå íàñòðîèòü ïðåîáðàçîâàíèÿàäðåñîâ òàê, ÷òîáû îäèí è òîò æå âèðòóàëüíûé àäðåñ â îäíîé ïîëüçîâàòåëüñêîé çàäà÷å îòîáðàæàëñÿ íà îäíó ôèçè÷åñêóþ ÿ÷åéêó, à â äðóãîéçàäà÷å íà ñîâñåì äðóãóþ.Âîïðîñû, ñâÿçàííûå ñ ñîçäàíèåì íîâûõ îïåðàöèîííûõ ñèñòåì, ìû âíàøåì ïîñîáèè ðàññìàòðèâàòü íå áóäåì.
Âìåñòî ýòîãî ìû îãðàíè÷èìñÿðàññìîòðåíèåì âîçìîæíîñòåé ïðîöåññîðà i386, äîñòóïíûõ ïîëüçîâàòåëüñêîé çàäà÷å, ðàáîòàþùåé â îãðàíè÷åííîì ðåæèìå. Áîëåå òîãî, äàæå ýòèâîçìîæíîñòè ìû ðàññìîòðèì íå âñå; äåëî â òîì, ÷òî îïåðàöèîííûå ñèñòåìû ñåìåéñòâà Unix âûïîëíÿþò ïîëüçîâàòåëüñêèå çàäà÷è â òàê íàçûâàåìîé ïëîñêîé ìîäåëè àäðåñàöèè ïàìÿòè, â êîòîðîé íå èñïîëüçóåòñÿ÷àñòü ðåãèñòðîâ è íåêîòîðûå âèäû ìàøèííûõ êîìàíä.
Íà èçó÷åíèå ýòèõðåãèñòðîâ è êîìàíä ìû íå áóäåì òðàòèòü âðåìÿ, ïîñêîëüêó âñ¼ ðàâíî íåñìîæåì èõ ïðèìåíèòü. Ïîçæå â íàøåì êóðñå ìû ïîäðîáíî ðàññìîòðèììåõàíèçìû âçàèìîäåéñòâèÿ ñ îïåðàöèîííîé ñèñòåìîé, âêëþ÷àÿ è ñïîñîáûîðãàíèçàöèè ñèñòåìíîãî âûçîâà äëÿ ñèñòåì Linux è FreeBSD; îäíàêî ïîêà íàì ýòè ìåõàíèçìû íå èçâåñòíû, ìû áóäåì îñóùåñòâëÿòü ââîä/âûâîäè çàâåðøåíèå ïðîãðàììû ñ ïîìîùüþ ãîòîâûõ ìàêðîñîâ ñïåöèàëüíûõèäåíòèôèêàòîðîâ, êîòîðûå íàø àññåìáëåð ðàçâåðí¼ò â öåëûå ïîñëåäîâàòåëüíîñòè ìàøèííûõ êîìàíä è óæå â òàêîì âèäå îòòðàíñëèðóåò. Îòìåòèì, ÷òî ê êîíöó íàøåãî êóðñà ìû ñàìè íàó÷èìñÿ ïðè íåîáõîäèìîñòèñîçäàâàòü òàêèå ìàêðîñû. 1.3. Ìàøèííîå ïðåäñòàâëåíèå öåëûõ ÷èñåëÏîäàâëÿþùåå áîëüøèíñòâî êîìïüþòåðîâ, ñîçäàííûõ çà âñþ èñòîðèþâû÷èñëèòåëüíîé òåõíèêè, îáðàáàòûâàëî è îáðàáàòûâàåò ëþáóþ èíôîðìàöèþ, ïðåäñòàâëÿÿ å¼ â äâîè÷íîé ñèñòåìå, òî åñòü â âèäå ïîñëåäîâàòåëüíîñòè ðàçðÿäîâ, êàæäûé èç êîòîðûõ ìîæåò ñîäåðæàòü îäíî èç äâóõ âîçìîæíûõ çíà÷åíèé (âêëþ÷åíî/âûêëþ÷åíî), îáîçíà÷àåìûõ îáû÷íî öèôðàìè 0 è 1.
Ðàçóìååòñÿ, ýòî êàñàåòñÿ è öåëûõ ÷èñåë; ÷èòàòåëü, íåñîìíåííî10 ,óæå çíàêîì ñ äâîè÷íîé ñèñòåìîé ñ÷èñëåíèÿ, â êîòîðîé äëÿ çàïèñè ÷èñåëèñïîëüçóþòñÿ òîëüêî äâå öèôðû (âñ¼ òå æå íîëü è åäèíèöà). Âïðî÷åì,10 Îòìåòèì íà âñÿêèé ñëó÷àé, ÷òî èçó÷åíèå äâîè÷íîé ñèñòåìû è äðóãèõ ïîçèöèîííûõ ñèñòåì ñ÷èñëåíèÿ âõîäèò â îáÿçàòåëüíóþ ïðîãðàììó äëÿ ñðåäíèõ øêîë.17Ðèñ. 1.1. Ìåõàíè÷åñêèé ñ÷¼ò÷èêêîìïüþòåðû, áóäó÷è ðåàëüíî ñóùåñòâóþùèìè òåõíè÷åñêèìè óñòðîéñòâàìè, íàêëàäûâàþò íåêîòîðûå îãðàíè÷åíèÿ íà ïðåäñòàâëåíèå öåëûõ ÷èñåë.Èç ìàòåìàòèêè ìû çíàåì, ÷òî ðÿä ÷èñåë áåñêîíå÷åí, òî åñòü êàêîâî áû íèáûëî ÷èñëî N , âñåãäà ñóùåñòâóåò ñëåäóþùåå ÷èñëî N +1. Äëÿ ýòîãî è êîëè÷åñòâî çíàêîâ â çàïèñè ÷èñëà, êàêóþ áû ñèñòåìó ìû íè èñïîëüçîâàëè,íå äîëæíî íèêàê îãðàíè÷èâàòüñÿ íî âîò êàê ðàç ýòî òðåáîâàíèå èñïîëíèòü òåõíè÷åñêè íåâîçìîæíî (äàæå ÷èñòî òåîðåòè÷åñêè: âåäü êîëè÷åñòâîàòîìîâ âî âñåëåííîé ñ÷èòàåòñÿ êîíå÷íûì). 1.3.1.
Áåççíàêîâûå ÷èñëàÍà ïðàêòèêå äëÿ êîìïüþòåðíîãî ïðåäñòàâëåíèÿ öåëîãî ÷èñëà âûäåëÿåòñÿ íåêîòîðîå ôèêñèðîâàííîå11 êîëè÷åñòâî ðàçðÿäîâ (áèò); îáû÷íî ýòî8 áèò (îäíà ÿ÷åéêà), 16 áèò (äâå ÿ÷åéêè), 32 áèòà (÷åòûðå ÿ÷åéêè) èëè64 áèòà (âîñåìü ÿ÷ååê). Îãðàíè÷åíèå ðàçðÿäíîñòè ïðèâîäèò ê ïîÿâëåíèþ¾íàèáîëüøåãî ÷èñëà¿, ïðè÷¼ì ýòî êàñàåòñÿ íå òîëüêî äâîè÷íîé ñèñòåìû.Ïðåäñòàâüòå ñåáå, íàïðèìåð, ïðîñòîå ñ÷¼òíîå óñòðîéñòâî, èñïîëüçóåìîåâ ýëåêòðè÷åñêèõ ñ÷¼ò÷èêàõ è ìåõàíè÷åñêèõ ñïèäîìåòðàõ ñòàðûõ àâòîìîáèëåé: öåïî÷êó ðîëèêîâ, íà êîòîðûõ íàíåñåíû öèôðû è êîòîðûå ìîãóòïðîêðó÷èâàòüñÿ, à ïðîõîäÿ ÷åðåç ¾òî÷êó ïåðåíîñà¿ (ñ äåâÿòêè íà íîëü),ïðîêðó÷èâàþò íà åäèíèöó ñëåäóþùèé ðîëèê.
Äîïóñòèì, òàêîå óñòðîéñòâî ñîñòîèò èç ïÿòè ðîëèêîâ (ñì. ðèñ. 1.1). Ñíà÷àëà ìû âèäèì íà í¼ì÷èñëî íîëü: 00000. Ïî ìåðå ïðîêðó÷èâàíèÿ ïðàâîãî ðîëèêà ÷èñëî áóäåòìåíÿòüñÿ, ìû óâèäèì 00001, ïîòîì 00002, è òàê äàëåå âïëîòü äî 00009.Åñëè òåïåðü ïðîâåðíóòü ñàìûé ïðàâûé ðîëèê åù¼ íà åäèíè÷êó, ìû ñíîâàóâèäèì â ïðàâîé ïîçèöèè íîëü, íî ïðè ýòîì ñàìûé ïðàâûé ðîëèê çàöåïèò ñâîåãî ñîñåäà ñëåâà è çàñòàâèò åãî ïðîâåðíóòüñÿ íà åäèíè÷êó, òàê ÷òîìû óâèäèì 00010, òî åñòü ÷èñëî äåñÿòü; ìû íàáëþäàëè ïðè ýòîì õîðîøî11 Íåêîòîðûå ÿçûêè ïðîãðàììèðîâàíèÿ âûñîêîãî óðîâíÿ ïîçâîëÿþò îïåðèðîâàòüñêîëü óãîäíî áîëüøèìè öåëûìè ÷èñëàìè, ëèøü áû õâàòèëî ïàìÿòè; íî òàêèå âîçìîæíîñòè âñåãäà ðåàëèçóþòñÿ ïðîãðàììíî (è äîâîëüíî ñëîæíî), à ìû ñåé÷àñ ðàññìàòðèâàåì ïðîãðàììèðîâàíèå íà íèçêîì óðîâíå, êîòîðîå îòòàëêèâàåòñÿ îò âîçìîæíîñòåéïðîöåññîðà.18èçâåñòíûé ñ ìëàäøèõ êëàññîâ ïåðåíîñ : ¾äåâÿòü ïëþñ îäèí, íîëü ïèøåì,îäèí â óìå¿.
Òî æå ñàìîå ïðîèçîéä¼ò ïðè ïåðåõîäå îò ÷èñëà 00019 ê÷èñëó 00020, è òàê äàëåå, à êîãäà ìû óâèäèì ÷èñëî 00099 è ïðîêðóòèìïðàâûé ðîëèê åù¼ íà åäèíè÷êó, â çàöåïëåíèå ïîïàäóò ñðàçó äâà åãî ñîñåäà, òàê ÷òî íà åäèíèöó âïåð¼ä ïðîêðóòÿòñÿ ñðàçó òðè ðîëèêà, è ìûïîëó÷èì ÷èñëî ñòî: 00100.Òåïåðü óæå íåñëîæíî áóäåò ïîíÿòü, îòêóäà áåð¼òñÿ òàêîé ìîíñòð, êàê¾íàèáîëüøåå âîçìîæíîå ÷èñëî¿: ðàíî èëè ïîçäíî íàø ñ÷¼ò÷èê äîñ÷èòàåò äî 99999, è òåïåðü óâåëè÷èâàòü ÷èñëî îêàæåòñÿ íåêóäà; êîãäà ìû âî÷åðåäíîé ðàç ïðîêðóòèì ïðàâûé ðîëèê íà åäèíèöó âïåð¼ä, îí çàöåïèòçà ñîáîé âñå îñòàëüíûå ðîëèêè, òàê ÷òî îíè âñå ïåðåéäóò íà ñëåäóþùóþöèôðó, è ìû ñíîâà óâèäèì îäíè íóëè. Åñëè áû ó íàñ ñëåâà áûë åù¼ îäèíðîëèê, îí áû çàöåïèëñÿ è ïîêàçàë åäèíè÷êó, òàê ÷òî ðåçóëüòàò áû áûë100000 (÷òî ñîâåðøåííî ïðàâèëüíî), íî ó íàñ âñåãî ïÿòü ðîëèêîâ, øåñòîãîíåò.
Òàêàÿ ñèòóàöèÿ íàçûâàåòñÿ ïåðåíîñ â íåñóùåñòâóþùèé ðàçðÿä .ßñíî, ÷òî òàêàÿ ñèòóàöèÿ íå ìîæåò âîçíèêíóòü, êîãäà ìû ïèøåì ÷èñëàíà áóìàãå: âñåãäà ìîæíî äîïèñàòü åù¼ îäíó öèôðó ñëåâà; êîãäà æå ÷èñëîïðåäñòàâëåíî ñîñòîÿíèåì íåêîé ãðóïïû òåõíè÷åñêèõ óñòðîéñòâ, áóäü òîöåïî÷êà ðîëèêîâ èëè íàáîð òðèããåðîâ â îïåðàòèâíîé ïàìÿòè êîìïüþòåðà,âîçìîæíîñòè ïðèäåëàòü ê ÷èñëó åù¼ îäíó öèôðó ó íàñ íåò.Ïðè èñïîëüçîâàíèè äâî÷èíîé ñèñòåìû ñ÷èñëåíèÿ ïðîèñõîäèò ïðèìåðíî òî æå ñàìîå ñ òîé ðàçíèöåé, ÷òî èñïîëüçóåòñÿ âñåãî äâå öèôðû. Äîïóñòèì, ìû èñïîëüçóåì äëÿ ïîäñ÷¼òà êàêèõ-íèáóäü ïðåäìåòîâ èëè ñîáûòèé ÿ÷åéêó ïàìÿòè, êîòîðàÿ ñîäåðæèò âîñåìü ðàçðÿäîâ.
Ñíà÷àëà âÿ÷åéêå íîëü: 00000000. Äîáàâèâ åäèíèöó, ïîëó÷àåì äâîè÷íîå ïðåäñòàâëåíèå åäèíèöû: 00000001. Äîáàâëÿåì åù¼ îäíó åäèíèöó, ìëàäøèé (ñàìûé ïðàâûé) ðàçðÿä óâåëè÷èâàòü íåêóäà, ïîñêîëüêó ó íàñ òîëüêî äâåöèôðû, ïîýòîìó îí ñíîâà ñòàíîâèòñÿ íóëåâûì, íî ïðè ýòîì ïðîèñõîäèòïåðåíîñ, â ðåçóëüòàòå êîòîðîãî åäèíèöà ïîÿâëÿåòñÿ âî âòîðîì ðàçðÿäå:00000010; ýòî äâîè÷íîå ïðåäñòàâëåíèå ÷èñëà 2.