А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 2
Текст из файла (страница 2)
ä.4áîäíî ðàñïðîñòðàíÿåìûå (òàêèå, êàê Linux è FreeBSD) çàâåäîìî áîëåå ïîäõîäÿùèìè äëÿ îçíàêîìëåíèÿ ñòóäåíòîâ ñî ñïåöèôèêîé ïðîãðàììèðîâàíèÿ íà ÿçûêåàññåìáëåðà.Îòäåëüíî íåîáõîäèìî ïîÿñíèòü âûáîð êîíêðåòíîãî àññåìáëåðà. Êàê èçâåñòíî, äëÿ ðàáîòû ñ ïðîöåññîðàìè ñåìåéñòâà x86 èñïîëüçóþòñÿ äâà îñíîâíûõ ïîäõîäà ê ñèíòàêñèñó ÿçûêà àññåìáëåðà ýòî ñèíòàêñèñ AT&T è ñèíòàêñèñ Intel.Îäíà è òà æå êîìàíäà ïðîöåññîðà ïðåäñòàâëÿåòñÿ â ýòèõ ñèíòàêñè÷åñêèõ ñèñòåìàõ ñîâåðøåííî ïî-ðàçíîìó: íàïðèìåð, êîìàíäà, â ñèíòàêñèñå Intel âûãëÿäÿùàÿ êàêmov eax, [a+edx]â ñèíòàêñèñå AT&T áóäåò çàïèñûâàòüñÿ ñëåäóþùèì îáðàçîì:movl a(%edx), %eax ñðåäå ÎÑ Unix òðàäèöèîííî áîëåå ïîïóëÿðåí èìåííî ñèíòàêñèñ AT&T, íîâ ïðèìåíåíèè ê ïîñòàâëåííîé ó÷åáíîé çàäà÷å ýòî ñîçäà¼ò íåêîòîðûå ïðîáëåìû.Ó÷åáíûå ïîñîáèÿ, îðèåíòèðîâàííûå íà ïðîãðàììèðîâàíèå íà ÿçûêå àññåìáëåðàâ ñèíòàêñèñå Intel, âñ¼-òàêè ñóùåñòâóþò, òîãäà êàê ñèíòàêñèñ AT&T îïèñûâàåòñÿ èñêëþ÷èòåëüíî â ñïåöèàëüíîé (ñïðàâî÷íîé) òåõíè÷åñêîé ëèòåðàòóðå, íåèìåþùåé öåëüþ îáó÷åíèå.
Êðîìå òîãî, íåîáõîäèìî ó÷èòûâàòü è ìíîãîëåòíååãîñïîäñòâî ñðåäû MS DOS â êà÷åñòâå ïëàòôîðìû äëÿ àíàëîãè÷íûõ ó÷åáíûõêóðñîâ; âñ¼ ýòî ïîçâîëÿåò íàçâàòü ñèíòàêñèñ Intel ñóùåñòâåííî áîëåå ïðèâû÷íûì äëÿ ïðåïîäàâàòåëåé (äà è äëÿ íåêîòðûõ ñòóäåíòîâ, êàê íè ñòðàííî, òîæå) èëó÷øå ïîääåðæèâàåìûì.  ñðåäå ÎÑ Unix äîñòóïíî äâà îñíîâíûõ àññåìáëåðà,ïîääåðæèâàþùèõ ñèíòàêñèñ Intel: ýòî NASM (¾Netwide Assembler¿), ðàçðàáîòàííûé Ñàéìîíîì Òåòõåìîì è Äæóëèàíîì Õîëëîì, è FASM (¾Flat Assembler¿),ñîçäàííûé Òîìàøåì Ãðèøòàðîì. Ñäåëàòü îäíîçíà÷íûé âûáîð ìåæäó ýòèìèäâóìÿ àññåìáëåðàìè îêàçûâàåòñÿ äîñòàòî÷íî ñëîæíî.  íàñòîÿùåì ïîñîáèèðàññìàòðèâàåòñÿ ÿçûê àññåìáëåðà NASM, â òîì ÷èñëå è ñïåöèôè÷åñêèå äëÿíåãî ìàêðîñðåäñòâà; òàêîé âûáîð íå îáóñëîâëåí íèêàêèìè ñåðü¼çíûìè ïðè÷èíàìè è ïîïðîñòó ñëó÷àåí.Ïðåäèñëîâèå äëÿ ñòóäåíòîâÏðåæäå ÷åì ïðèñòóïàòü ê èçó÷åíèþ î÷åðåäíîé äèñöèïëèíû, æåëàòåëüíîïîíÿòü, çà÷åì (ñ êàêîé öåëüþ) ýòà äèñöèïëèíà âîîáùå èçó÷àåòñÿ.
 îñîáåííîñòè ýòî êàñàåòñÿ òåõíè÷åñêèõ ïðåäìåòîâ, ê êîòîðûì, áåçóñëîâíî, îòíîñèòñÿ èêóðñ ¾Àðõèòåêòóðà ÝÂÌ¿, â ðàìêàõ êîòîðîãî îáû÷íî èçó÷àåòñÿ ïðîãðàììèðîâàíèå íà ÿçûêå àññåìáëåðà. Ó÷åáíîå ïîñîáèå, êîòîðîå âû äåðæèòå â ðóêàõ,îðèåíòèðîâàíî íà ïðîãðàììèðîâàíèå íà ÿçûêå àññåìáëåðà NASM â ñðåäå ÎÑUnix. Ìåæäó òåì, ïîäàâëÿþùåå áîëüøèíñòâî ïðîôåññèîíàëüíûõ ïðîãðàììèñòîâ, óñëûøàâ î òàêîì, ëèøü óñìåõí¼òñÿ è çàäàñò ðèòîðè÷åñêèé âîïðîñ: ¾äà êòîæå ïèøåò ïîä Unix íà àññåìáëåðå? Íà äâîðå âåäü XXI âåê!¿ Ñàìîå èíòåðåñíîå,÷òî ïðè ýòîì îíè áóäóò ñîâåðøåííî ïðàâû. Îñîáåííî î÷åâèäíîé ñòàíîâèòñÿ èõïðàâîòà, åñëè âñïîìíèòü, ÷òî èìåííî ÎÑ Unix ïåðâàÿ â ìèðå îïåðàöèîííàÿ5ñèñòåìà, êîòîðàÿ áûëà íàïèñàíà íà ÿçûêå ïðîãðàììèðîâàíèÿ âûñîêîãî óðîâíÿ, ñïåöèàëüíî äëÿ ýòîãî ïðèäóìàííîì (íà ÿçûêå Ñè). Äî ïîÿâëåíèÿ ÎÑ Unixñ÷èòàëîñü, ÷òî îïåðàöèîííûå ñèñòåìû ìîæíî ïèñàòü òîëüêî íà ÿçûêå àññåìáëåðà.
Áîëåå òîãî, â ñîâðåìåííîì ìèðå ïðîãðàììèðîâàíèå íà ÿçûêå àññåìáëåðàîêàçàëîñü âûòåñíåíî äàæå èç òàêîé òðàäèöèîííî ¾àññåìáëåðíîé¿ îáëàñòè, êàêïðîãðàììèðîâàíèå ìèêðîêîíòðîëëåðîâ ìàëåíüêèõ îäíîêðèñòàëëüíûõ ÝÂÌ,ïðåäíàçíà÷åííûõ äëÿ âñòðàèâàíèÿ âî âñåâîçìîæíóþ òåõíèêó, îò ñòèðàëüíûõìàøèí è ñîòîâûõ òåëåôîíîâ äî ñàìîë¼òîâ è òóðáèí íà ýëåêòðîñòàíöèÿõ. Âáîëüøèíñòâå ñëó÷àåâ ïðîøèâêè ìèêðîêîíòðîëëåðîâ ñåé÷àñ ïèøóò òîæå íà Ñè,è ëèøü íåáîëüøèå âñòàâêè âûïîëíÿþò íà ÿçûêå àññåìáëåðà.Êîíå÷íî, ñîâñåì îáîéòèñü áåç ôðàãìåíòîâ íà ÿçûêå àññåìáëåðà ïîêà íå ïîëó÷àåòñÿ.
Îòäåëüíûå àññåìáëåðíûå ìîäóëè, à ðàâíî è àññåìáëåðíûå âñòàâêèâ òåêñò íà äðóãèõ ÿçûêàõ ïðèñóòñòâóþò è â ÿäðàõ îïåðàöèîííûõ ñèñòåì, è âñèñòåìíûõ áèáëèîòåêàõ òîãî æå ÿçûêà Ñè (è äðóãèõ ÿçûêîâ âûñîêîãî óðîâíÿ);â îñîáûõ ñëó÷àÿõ ïðîãðàììèñòû ìèêðîêîíòðîëëåðîâ òîæå âûíóæäåíû îòêàçûâàòüñÿ îò Ñè2 è ïèñàòü ¾íà àññåáëåðå¿, ÷òîáû, íàïðèìåð, ñýêîíîìèòü äåôèöèòíóþ ïàìÿòü . Îäíàêî òàêèå ñëó÷àè ðåäêè, è ìàëî êîìó èç âàñ, èçó÷àþùèõíûíå ïðîãðàììèðîâàíèå íà ÿçûêå àññåìáëåðà, ïðèä¼òñÿ õîòÿ áû îäèí ðàç çàâñþ æèçíü ïðèáåãíóòü ê ÿçûêó àññåìáëåðà íà ïðàêòèêå.Òàê çà÷åì æå òðàòèòü âðåìÿ íà èçó÷åíèå àññåìáëåðà? Âåäü âñ¼ ðàâíî ýòîíèêîãäà íå ïðèãîäèòñÿ? Òàê ýòî âûãëÿäèò ëèøü íà ïåðâûé âçãëÿä; ïðè áîëååâíèìàòåëüíîì ðàññìîòðåíèè âîïðîñà óìåíèå ìûñëèòü â òåðìèíàõ ìàøèííûõêîìàíä íå ïðîñòî ¾ïðèãîäèòñÿ¿, îíî îêàçûâàåòñÿ æèçíåííî íåîáõîäèìûì ëþáîìó ïðîôåññèîíàëüíîìó ïðîãðàììèñòó, äàæå åñëè ýòîò ïðîãðàììèñò íèêîãäàíå ïèøåò íà ÿçûêå àññåìáëåðà.
Íà êàêîì áû ÿçûêå âû íè ïèñàëè ñâîè ïðîãðàììû, íåîáõîäèìî õîòÿ áû ïðèìåðíî ïðåäñòàâëÿòü, ÷òî êîíêðåòíî áóäåò äåëàòüïðîöåññîð, ÷òîáû èñïîëíèòü âàøó âûñî÷àéøóþ âîëþ. Åñëè òàêîãî ïðåäñòàâëåíèÿ íåò, ïðîãðàììèñò íà÷èíàåò áåçäóìíî ïðèìåíÿòü âñå äîñòóïíûå îïåðàöèè,íå âåäàÿ, ÷òî íà ñàìîì äåëå òâîðèò. Ìåæäó òåì, îäíî ïðèñâàèâàíèå, çàïèñàííîå, ñêàæåì, íà ÿçûêå Ñè++, ìîæåò âûïîëíèòüñÿâ îäíó ìàøèííóþ êîìàíäó,à ìîæåò ïîâëå÷ü ìèëëèîíû òàêèõ êîìàíä3 . Äâà òàêèõ ïðèñâàèâàíèÿ çàïèñûâàþòñÿ â ïðîãðàììå ñîâåðøåííî îäèíàêîâî (çíàêîì ðàâåíñòâà), íî ýòîò ôàêòíèêàê íàì íå ïîìîæåò.Âîîáùå, ïðîôåññèîíàëüíûé ïîëüçîâàòåëü êîìïüþòåðîâ, áóäü òî ïðîãðàììèñò èëè ñèñòåìíûé àäìèíèñòðàòîð, ìîæåò ñåáå ïîçâîëèòü ÷òî-òî íå çíàòü,íî íè â êîåì ñëó÷àå íå ìîæåò ïîçâîëèòü ñåáå íå ïîíèìàòü, êàê óñòðîåíà âû÷èñëèòåëüíàÿ ñèñòåìà íà âñåõ å¼ óðîâíÿõ, îò ýëåêòðîííûõ ëîãè÷åñêèõ ñõåì äîãðîìîçäêèõ ïðèêëàäíûõ ïðîãðàìì.
Íå ïîíèìàÿ ÷åãî-òî, ìû îñòàâëÿåì â ñâî¼ìòûëó ìåñòî äëÿ ¾îùóùåíèÿ ìàãèè¿: íà êàêîì-òî ãëóáîêîì, ïî÷òè ïîäñîçíàòåëüíîì óðîâíå íàì ïðîäîëæàåò êàçàòüñÿ, ÷òî ÷òî-òî òàì íå ÷èñòî è áåç ïàðî÷êè÷àðîäååâ ñ âîëøåáíûìè ïàëî÷êàìè íå îáîøëîñü. Òàêîå îùóùåíèå äëÿ ïðîôåññèîíàëà íåäîïóñòèìî êàòåãîðè÷åñêè: íàïðîòèâ, ïðîôåññèîíàë îáÿçàí áûòüóâåðåí, âïëîòü äî ãëóáîêèõ ñëî¼â ïîäñîçíàíèÿ, ÷òî òî óñòðîéñòâî, ñ êîòîðûì îí2 Íàïðèìåð, íåêîòîðûå ìèêðîêîíòðîëëåðû èìåþò âñåãî 256 áàéò îïåðàòèâíîé ïàìÿòè è 8 Êá ïñåâäîïîñòîÿííîé ïàìÿòè äëÿ õðàíåíèÿ êîäà ïðîãðàììû.3 Äëÿ çíàþùèõ Ñè++ ïîÿñíèì: ÷òî áóäåò, åñëè ïðèìåíèòü îïåðàöèþ ïðèñâàèâàíèÿê îáúåêòó òèïà list<string>, ñîäåðæàùåìó ïàðó òûñÿ÷ ýëåìåíòîâ?6èìååò äåëî, ñîçäàíî òàêèìè æå ëþäüìè, êàê è îí ñàì, è íè÷åãî ¾âîëøåáíîãî¿èëè ¾íåïîçíàâàåìîãî¿ ñîáîé íå ïðåäñòàâëÿåò. ýòîì ïëàíå ñîâåðøåííî íå âàæíî, êàêóþ êîíêðåòíóþ àðõèòåêòóðó è ÿçûêêàêîãî êîíêðåòíîãî àññåìáëåðà èçó÷àòü.
Çíàÿ îäèí ÿçûê àññåìáëåðà, âû ñìîæåòå íà÷àòü ïèñàòü íà ëþáîì äðóãîì, ïîòðàòèâ äâà-òðè ÷àñà (à òî è ìåíüøå)íà èçó÷åíèå ñïðàâî÷íîé èíôîðìàöèè; íî ãëàâíîå òóò â òîì, ÷òî, óìåÿ ìûñëèòüâ òåðìèíàõ ìàøèííûõ êîìàíä, âû âñåãäà áóäåòå çíàòü, ÷òî äåëàåòå, è âñåãäàñìîæåòå ïîíÿòü, ÷òî ïðîèñõîäèò. çàêëþ÷åíèå ñêàæåì ïàðó ñëîâ î ïðè÷èíàõ âûáîðà êîíêðåòíîé ïëàòôîðìû. Ìàøèíû íà îñíîâå ïðîöåññîðîâ ñåìåéñòâà i386 ìû èçáðàëè èñêëþ÷èòåëüíîèç-çà èõ øèðîêîãî ðàñïðîñòðàíåíèÿ. ×òî êàñàåòñÿ ñðåäû ÎÑ Unix, òî ñðåäèâñåõ âîçìîæíûõ îïåðàöèîííûõ ñðåä, èìåþùèõñÿ íà ïëàòôîðìå i386, èìåííîïðîãðàììèðîâàíèå â ÎÑ Unix îêàçûâàåòñÿ ñàìûì ïðîñòûì, íó à ëèøíèå ñëîæíîñòè íàì íè ê ÷åìó.Èòàê, òåïåðü âû çíàåòå, ÷òî îòâåòèòü ñêåïòèêàì ïî ïîâîäó ïðîãðàììèðîâàíèÿ íà ÿçûêå àññåìáëåðà ïîä ÎÑ Unix. Ïðàâèëüíûì îòâåòîì áóäåò ôðàçà¾íàì íóæíî áûëî ïîïðàêòèêîâàòüñÿ â àññåìáëåðíîì ïðîãðàììèðîâàíèèïîä êàêóþ-íèáóäü ñóùåñòâóþùóþ ñèñòåìó,âñ¼ ðàâíî êàêóþ,.Îòìåòèì, ÷òî ýòà ôðàçà áóäåò íàì ïîëåçíà, äàæå åñëè íè îäíîãî ñêåïòè÷åñêèíàñòðîåííîãî ïðîôåññèîíàëüíîãî ïðîãðàììèñòà ìû íå âñòðåòèì: äåéñòâèòåëüíî, âåäü çäåñü îäíîé ôðàçîé âûðàæåíà è íàøà öåëü, è ïðèíöèïû, ïî êîòîðûììû âûáèðàëè ñðåäñòâà.à ÎÑ Unix ìû âûáðàëè, ïîòîìó ÷òî ïîä íåé ýòî äåëàòü ïðîùå âñåãî¿Áëàãîäàðíîñòè è ïîñâÿùåíèåÀâòîð ãëóáîêî ïðèçíàòåëåí Âëàäèìèðó Íèêîëàåâè÷ó Ïèëüùèêîâó, ïðî÷èòàâøåìó ðóêîïèñü è ñäåëàâøåìó ðÿä öåííåéøèõ çàìå÷àíèé, êîòîðûå ïîçâîëèëè âòîðîìó èçäàíèþ ýòîãî ïîñîáèÿ ñòàòü ñóùåñòâåííî ëó÷øå ïåðâîãî.
Òàêæåàâòîð ñ÷èòàåò ñâîèì ïðèÿòíûì äîëãîì ïîáëàãîäàðèòü Ïàâëà Ñóòûðèíà, ïðèíÿâøåãî àêòèâíîå ó÷àñòèå â âû÷èòûâàíèè ðóêîïèñè ïåðâîãî èçäàíèÿ.Ïåðâîå èçäàíèå ýòîãî ïîñîáèÿ, ïðåäïðèíÿòîå â 2010 ãîäó â ÌÃÒÓÃÀ, ñòàëî âîçìîæíûì èñêëþ÷èòåëüíî áëàãîäàðÿ çàèíòåðåñîâàííîñòè, ïîìîùè è ïîääåðæêå ñî ñòîðîíû çàâåäóþùåãî êàôåäðîé ïðèêëàäíîé ìàòåìàòèêè ÌÃÒÓÃÀïðîôåññîðà Âàëåðèÿ Ëåîíèäîâè÷à Êóçíåöîâà, êîòîðîìó àâòîð õîòåë áû ñêàçàòü îãðîìíîå ñïàñèáî (è íå òîëüêî çà ýòî).Èçëàãàåìûé â ïîñîáèè ó÷åáíûé ìàòåðèàë áûë âïåðâûå àïðîáèðîâàí àâòîðîì â õîäå ÷òåíèÿ ëåêöèîííîãî êóðñà ¾Àðõèòåêòóðà ÝÂÌ è ÿçûê àññåìáëåðà¿ ïåðâîêóðñíèêàì Òàøêåíòñêîãî ôèëèàëà ÌÃÓ èì. Ì.
Â. Ëîìîíîñîâà âåñíîé2007 ãîäà. Ñàìûì òàëàíòëèâûì è ÿðêèì èç íèõ Ëèíàðå Àäûëîâîé, ÌàêñèìóÁîëîíêèíó, Þëå Áóòêîâîé, Àëèñå Êèðååâîé è äðóãèì àâòîð ñ âåëè÷àéøèìóäîâîëüñòâèåì ïîñâÿùàåò ýòî ïîñîáèå.7Ãëàâà 1. Ââåäåíèå 1.1. Ìàøèííûé êîä è àññåìáëåðÏðàêòè÷åñêè âñå ñîâðåìåííûå öèôðîâûå âû÷èñëèòåëüíûå ìàøèíûðàáîòàþò ïî îäíîìó è òîìó æå ïðèíöèïó. Âû÷èñëèòåëüíîå óñòðîéñòâî(ñîáñòâåííî ñàì êîìïüþòåð) ñîñòîèò èç öåíòðàëüíîãî ïðîöåññîðà ,îïåðàòèâíîé ïàìÿòè è ïåðèôåðèéíûõ óñòðîéñòâ .