А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 23
Текст из файла (страница 23)
Äëÿ íåêîòîðûõ äðóãèõ àññåìáëåðîâ ýòî íå òàê,÷òî ïîðîæäàåò ïîñòîÿííóþ ïóòàíèöó.Êîììåíòàðèé îáîçíà÷àåòñÿ ñèìâîëîì ¾òî÷êà ñ çàïÿòîé¿ (¾;¿). Íà÷èíàÿ ñ ýòîãî ñèìâîëà, âåñü òåêñò äî êîíöà ñòðîêè àññåìáëåð íå ïðèíèìàåòâî âíèìàíèå, ÷òî ïîçâîëÿåò íàïèñàòü òàì âñ¼, ÷òî óãîäíî. Îáû÷íî ýòî èñïîëüçóþò äëÿ âñòàâêè â òåêñò ïðîãðàììû ïîÿñíåíèé, ïðåäíàçíà÷åííûõäëÿ òåõ, êîìó ïðèä¼òñÿ ýòîò òåêñò ïðî÷èòàòü. 3.2. ÏñåâäîêîìàíäûÏîä ïñåâäîêîìàíäàìè ïîíèìàåòñÿ ðÿä ââîäèìûõ àññåìáëåðîìNASM ñëîâ, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ ñèíòàêñè÷åñêè òàê æå, êàêè ìíåìîíèêè ìàøèííûõ êîìàíä, õîòÿ ìàøèííûìè êîìàíäàìè íà ñàìîìäåëå íå ÿâëÿþòñÿ. Íåêîòîðûå òàêèå ïñåâäîêîìàíäû, à èìåííî db, dw, dd,resb, resw è resd íàì óæå èçâåñòíû èç 2.2.2.
Îòìåòèì òîëüêî, ÷òî êðîìåïåðå÷èñëåííûõ, NASM ïîääåðæèâàåò òàêæå ïñåâäîêîìàíäû resq, rest,dq è dt. Áóêâà q â èõ íàçâàíèÿõ îçíà÷àåò ¾quadro¿ ¾ó÷åòâåð¼ííîå ñëîâî¿ (8 áàéò), áóêâà t îò ñëîâà ¾ten¿ è îçíà÷àåò äåñÿòèáàéòíûå ýëåìåíòû. Ýòè ïñåâäîêîìàíäû ìîãóò ïîòðåáîâàòüñÿ òîëüêî â ïðîãðàììå, ðàáîòàþùåé ñ ÷èñëàìè ñ ïëàâàþùåé òî÷êîé (ïîïðîñòó ãîâîðÿ, äðîáíûìè ÷èñëàìè); áîëåå òîãî, dq è dt â êà÷åñòâå èíèöèàëèçàòîðîâ äîïóñêàþò òîëüêî, è èñêëþ÷èòåëüíî, ÷èñëà ñ ïëàâàþùåé òî÷êîé (íàïðèìåð, 71.361775).Êðîìå ïñåâäîêîìàíä dq è dt, ÷èñëà ñ ïëàâàþùåé òî÷êîé ïðèíèìàåò èïñåâäîêîìàíäà dd; ýòî îáóñëîâëåíî òåì, ÷òî ñòàíäàðò IEEE-7543 ïðåäó3 IEEE-754 ýòî ìåæäóíàðîäíûé ñòàíäàðò, îïèñûâàþùèé ñïîñîá ïðåäñòàâëåíèÿ âìàøèííîé ïàìÿòè ÷èñåë ñ ïëàâàþùåé òî÷êîé è ðåãëàìåíòèðóþùèé îïåðàöèè íàä íèìè; ñòàíäàðò áûë ñîçäàí ïîä ýãèäîé àìåðèêàíñêîé îðãàíèçàöèè Institute of Electricaland Electronics Engineers (IEEE), ïðåäñòàâëÿþùåé ñîáîé ïðîôåññèîíàëüíóþ àññîöèàöèþ èíæåíåðîâ â îáëàñòè ýëåêòðîòåõíèêè è ýëåêòðîíèêè.97ñìàòðèâàåò òðè ôîðìàòà ÷èñåë ñ ïëàâàþùåé òî÷êîé îáû÷íûå, äâîéíîéòî÷íîñòè è ïîâûøåííîé òî÷íîñòè, çàíèìàþùèå, ñîîòâåòñòâåííî, 4 áàéòà,8 áàéò è 10 áàéò.Îòäåëüíîãî ðàçãîâîðà çàñëóæèâàåò ïñåâäîêîìàíäà equ, ïðåäíàçíà÷åííàÿ äëÿ îïðåäåëåíèÿ êîíñòàíò.
Ýòà ïñåâäîêîìàíäà âñåãäà ïðèìåíÿåòñÿ â ñî÷åòàíèè ñ ìåòêîé, òî åñòü íå ïîñòàâèòü ïåðåä íåé ìåòêó ñ÷èòàåòñÿîøèáêîé. Ïñåâäîêîìàíäà equ ñâÿçûâàåò ñòîÿùóþ ïåðåä íåé ìåòêó ñ ÿâíîçàäàííûì ÷èñëîì. Ñàìûé ïðîñòîé ïðèìåð:fourequ 4Çäåñü ìû îïðåäåëèëè ìåòêó four, çàäàþùóþ ÷èñëî 4. Òåïåðü, íàïðèìåð,mov eax, fouråñòü òî æå ñàìîå, ÷òî èmov eax, 4Óìåñòíî íàïîìíèòü, ÷òî, âîîáùå ãîâîðÿ, ëþáàÿ ìåòêà ïðåäñòàâëÿåò ñîáîé íå áîëåå ÷åì ÷èñëî, íî ìåòêè, ââåä¼ííûå äðóãèì ñïîñîáîì (ïîìå÷àþùèå äðóãèå ñòðîêè) ñâÿçûâàþòñÿ ñ àäðåñàìè â ïàìÿòè (êîòîðûå,ðàçóìååòñÿ, åñòü òîæå íè ÷òî èíîå êàê ïðîñòî ÷èñëà).Îäíî èç ñàìûõ ÷àñòûõ ïðèìåíåíèé äèðåêòèâû equ ýòî ñâÿçàòü ñíåêîòîðûì èìåíåì (ìåòêîé) äëèíó ìàññèâà, òîëüêî ÷òî çàäàííîãî ñ ïîìîùüþ äèðåêòèâû db, dw èëè ëþáîé äðóãîé.
Äëÿ ýòîãî èñïîëüçóåòñÿ ïñåâäîìåòêà $, êîòîðàÿ â êàæäîé ñòðî÷êå, ãäå îíà ïîÿâëÿåòñÿ, îáîçíà÷àåòòåêóùèé àäðåñ 4 . Íàïðèìåð, ìîæíî íàïèñàòü òàê:msgmsglendb "Hello and welcome", 10, 0equ $-msgÂûðàæåíèå $-msg, ïðåäñòàâëÿþùåå ñîáîé ðàçíîñòü äâóõ ÷èñåë, èçâåñòíûõ àññåìáëåðó âî âðåìÿ åãî ðàáîòû, áóäåò ïðîñòî âû÷èñëåíî ïðÿìî âîâðåìÿ àññåìáëèðîâàíèÿ. Ïîñêîëüêó $ îçíà÷àåò àäðåñ, ñòàâøèé òåêóùèìóæå ïîñëå îïèñàíèÿ ñòðîêè, à msg àäðåñ íà÷àëà ñòðîêè, òî èõ ðàçíîñòüâ òî÷íîñòè ðàâíà äëèíå ñòðîêè (â íàøåì ïðèìåðå 19). Ê âû÷èñëåíèþâûðàæåíèé âî âðåìÿ àññåìáëèðîâàíèÿ ìû âåðí¼ìñÿ â 3.4.Äèðåêòèâà times ïîçâîëÿåò ïîâòîðèòü êàêóþ-íèáóäü êîìàíäó (èëèïñåâäîêîìàíäó) çàäàííîå êîëè÷åñòâî ðàç.
Íàïðèìåð,starstimes 4096 db '*'4 Òî÷íåå ãîâîðÿ, òåêóùåå ñìåùåíèå îòíîñèòåëüíî íà÷àëà ñåêöèè.98çàäà¼ò îáëàñòü ïàìÿòè ðàçìåðîì â 4096 áàéò, çàïîëíåííóþ êîäîì ñèìâîëà '*', òî÷íî òàê æå, êàê ýòî ñäåëàëè áû 4096 îäèíàêîâûõ ñòðîê, ñîäåðæàùèõ äèðåêòèâó db '*'.Èíîãäà ìîæåò îêàçàòüñÿ ïîëåçíîé ïñåâäîêîìàíäà incbin, ïîçâîëÿþùàÿ ñîçäàòü îáëàñòü ïàìÿòè, çàïîëíåííóþ äàííûìè èç íåêîòîðîãî âíåøíåãî ôàéëà. Ïîäðîáíî ìû å¼ ðàññìàòðèâàòü íå áóäåì; çàèíòåðåñîâàííûé ÷èòàòåëü ìîæåò èçó÷èòüýòó äèðåêòèâó ñàìîñòîÿòåëüíî, îáðàòèâøèñü ê äîêóìåíòàöèè. 3.3.
ÊîíñòàíòûÊîíñòàíòû â ÿçûêå àññåìáëåðà NASM äåëÿòñÿ íà ÷åòûðå êàòåãîðèè: öåëûå ÷èñëà, ñèìâîëüíûå êîíñòàíòû, ñòðîêîâûå êîíñòàíòû è ÷èñëàñ ïëàâàþùåé òî÷êîé.Êàê óæå ãîâîðèëîñü (ñì. ñòð. 41), öåëî÷èñëåííûå êîíñòàíòûìîæíî çàäàâàòü â äåñÿòè÷íîé, äâîè÷íîé, øåñòíàäöàòåðè÷íîé è âîñüìåðè÷íîé ñèñòåìàõ ñ÷èñëåíèÿ. Åñëè ïðîñòî íàïèñàòü ÷èñëî, ñîñòîÿùåå èçöèôð (è, âîçìîæíî, çíàêà ¾ìèíóñ¿ â êà÷åñòâå ïåðâîãî ñèìâîëà), òî ýòî÷èñëî áóäåò âîñïðèíÿòî àññåìáëåðîì êàê äåñÿòè÷íîå. Øåñòíàäöàòåðè÷íîå ÷èñëî ìîæíî çàäàòü òðåìÿ ñïîñîáàìè: ïðèáàâèâ â êîíöå ÷èñëà áóêâóh (íàïðèìåð, 2af3h), ëèáî íàïèñàâ ïåðåä ÷èñëîì ñèìâîë $, êàê â BorlandPascal (íàïðèìåð, $2af3), ëèáî ïîñòàâèâ, îïÿòü òàêè, ïåðåä ÷èñëîì ñèìâîëû 0x, êàê â ÿçûêå Ñè (0x2af3).
Ïðè èñïîëüçîâàíèè ñèìâîëà $ íåîáõîäèìî ñëåäèòü, ÷òîáû ñðàçó ïîñëå $ ñòîÿëà öèôðà, à íå áóêâà, òàê ÷òîåñëè ÷èñëî íà÷èíàåòñÿ ñ áóêâû, íåîáõîäèìî äîáàâèòü 0 (íàïðèìåð, $0f9âìåñòî ïðîñòî $f9). Ýòî íåîáõîäèìî, ÷òîáû àññåìáëåð íå ïóòàë çàïèñü÷èñëà ñ çàïèñüþ ïîëüçîâàòåëüñêîé ìåòêè, ïåðåä êîòîðûìè, êàê ìû óæåãîâîðèëè, èíîãäà òîæå ñòàâèòñÿ çíàê $. Âîñüìåðè÷íîå ÷èñëî îáîçíà÷àåòñÿ äîáàâëåíèåì ïîñëå ÷èñëà áóêâû o èëè q (íàïðèìåð, 634o, 754q).Íàêîíåö, äâîè÷íîå ÷èñëî îáîçíà÷àåòñÿ áóêâîé b (10011011b).Ñèìâîëüíûå êîíñòàíòû è ñòðîêîâûå êîíñòàíòû î÷åíü ïîõîæè äðóã íà äðóãà, è, áîëåå òîãî, â ëþáîì ìåñòå, ãäå ïî ñìûñëó äîëæíàáûòü ñòðîêîâàÿ êîíñòàíòà, ìîæíî óïîòðåáèòü è ñèìâîëüíóþ. Ðàçíèöàìåæäó ñòðîêîâûìè è ñèìâîëüíûìè êîíñòàíòàìè çàêëþ÷àåòñÿ òîëüêî âèõ äëèíå: ïîä ñèìâîëüíîé êîíñòàíòîé ïîäðàçóìåâàåòñÿ òàêàÿ êîíñòàíòà,êîòîðàÿ óêëàäûâàåòñÿ â äëèíó ¾äâîéíîãî ñëîâà¿ (òî åñòü ñîäåðæèò íåáîëåå 4 ñèìâîëîâ) è ìîæåò, â ñèëó ýòîãî, ðàññìàòðèâàòüñÿ êàê àëüòåðíàòèâíàÿ çàïèñü öåëîãî ÷èñëà (ëèáî áèòîâîé ñòðîêè).
È ñèìâîëüíûå, èñòðîêîâûå êîíñòàíòû ìîãóò çàïèñûâàòüñÿ êàê ñ ïîìîùüþ äâîéíûõ êàâû÷åê, òàê è ñ ïîìîùüþ àïîñòðîôîâ. Ýòî ïîçâîëÿåò èñïîëüçîâàòü â ñòðîêàõè ñàìè ñèìâîëû àïîñòðîôîâ è êàâû÷åê: åñëè ñòðîêà ñîäåðæèò ñèìâîë êàâû÷åê îäíîãî òèïà, òî å¼ çàêëþ÷àþò â êàâû÷êè äðóãîãî òèïà (ñì. ïðèìåðíà ñòð. 43).99Ñèìâîëüíûå êîíñòàíòû, ñîäåðæàùèå ìåíüøå 4 ñèìâîëîâ, ñ÷èòàþòñÿ ñèíîíèìàìè öåëûõ ÷èñåë, ìëàäøèå áàéòû êîòîðûõ ðàâíû êîäàì ñèìâîëîâ èç êîíñòàíòû,à íåäîñòàþùèå ñòàðøèå áàéòû çàïîëíåíû íóëÿìè. Ïðè èñïîëüçîâàíèè ñèìâîëüíûõ êîíñòàíò ñëåäóåò ïîìíèòü, ÷òî öåëûå ÷èñëà â êîìïüþòåðàõ ñ ïðîöåññîðàìèi386 çàïèñûâàþòñÿ â îáðàòíîì ïîðÿäêå áàéòîâ, òî åñòü ìëàäøèé áàéò èä¼ò ïåðâûì.
 òî æå âðåìÿ, ïî ñìûñëó ñòðîêè (è ñèìâîëüíîé êîíñòàíòû) êîä ïåðâîé áóêâû äîëæåí â ïàìÿòè ðàçìåùàòüñÿ ïåðâûì. Ïîýòîìó, íàïðèìåð, êîíñòàíòà 'abcd'ýêâèâàëåíòíà ÷èñëó 64636261h: 64h ýòî êîä áóêâû d, 61h êîä áóêâû a, è âîáîèõ ñëó÷àÿõ áàéò ñî çíà÷åíèåì 61h ñòîèò ïåðâûì, à 64h ïîñëåäíèì.  íåêîòîðûõ ñëó÷àÿõ àññåìáëåð âîñïðèíèìàåò â êà÷åñòâå ñòðîêîâûõ è òàêèå êîíñòàíòû,êîòîðûå äîñòàòî÷íî êîðîòêè è ìîãëè áû ñ÷èòàòüñÿ ñèìâîëüíûìè.
Ýòî ïðîèñõîäèò,íàïðèìåð, åñëè àññåìáëåð âèäèò ñèìâîëüíóþ êîíñòàíòó äëèíîé áîëåå 1 ñèìâîëàâ ïàðàìåòðàõ äèðåêòèâû db èëè êîíñòàíòó äëèíîé áîëåå äâóõ ñèìâîëîâ â ïàðàìåòðàõ äèðåêòèâû dw.Êîíñòàíòû ñ ïëàâàþùåé òî÷êîé , çàäàþùèå äðîáíûå ÷èñëà,ñèíòàêñè÷åñêè îòëè÷àþòñÿ îò öåëî÷èñëåííûõ êîíñòàíò íàëè÷èåì äåñÿòè÷íîé òî÷êè. Ó÷òèòå, ÷òî öåëî÷èñëåííàÿ êîíñòàíòà 1 è êîíñòàíòà1.0 íå èìåþò ìåæäó ñîáîé íè÷åãî îáùåãî! Äëÿ íàãëÿäíîñòè îòìåòèì, ÷òî áèòîâàÿ çàïèñü ÷èñëà ñ ïëàâàþùåé òî÷êîé 1.0 îäèíàðíîéòî÷íîñòè (òî åñòü çàïèñü, çàíèìàþùàÿ 4 áàéòà, òàê æå, êàê è äëÿ öåëîãî ÷èñëà) ýêâèâàëåíòíà çàïèñè öåëîãî ÷èñëà 3f800000h (1065353216 âäåñÿòè÷íîé çàïèñè).
Êîíñòàíòó ñ ïëàâàþùåé òî÷êîé ìîæíî çàäàòü è â¾ýêñïîíåíöèàëüíîì¿ âèäå, èñïîëüçóÿ áóêâó e èëè E. Íàïðèìåð, 1.0e-5åñòü òî æå ñàìîå, ÷òî è 0.00001. Îáðàòèòå âíèìàíèå, ÷òî äåñÿòè÷íàÿòî÷êà ïî-ïðåæíåìó îáÿçàòåëüíà. 3.4. Âû÷èñëåíèå âûðàæåíèé âî âðåìÿàññåìáëèðîâàíèÿÀññåìáëåð NASM â íåêîòîðûõ ñëó÷àÿõ âû÷èñëÿåò âñòðåòèâøèåñÿ åìóàðèôìåòè÷åñêèå âûðàæåíèÿ íåïîñðåäñòâåííî âî âðåìÿ àññåìáëèðîâàíèÿ.Âàæíî ïîíèìàòü, ÷òî â èòîãîâûé ìàøèííûé êîä ïîïàäàþò òîëüêîâû÷èñëåííûå ðåçóëüòàòû, à íå ñàìè äåéñòâèÿ ïî èõ âû÷èñëåíèþ. Åñòåñòâåííî, äëÿ âû÷èñëåíèÿ âûðàæåíèÿ âî âðåìÿ àññåìáëèðîâàíèÿ íåîáõîäèìî, ÷òîáû òàêîå âûðàæåíèå íå ñîäåðæàëî íèêàêèõ íåèçâåñòíûõ: âñ¼, ÷òî íóæíî äëÿ âû÷èñëåíèÿ, äîëæíî áûòü èçâåñòíî àññåìáëåðóâî âðåìÿ åãî ðàáîòû. 3.4.1. Âû÷èñëÿåìûå âûðàæåíèÿ è îïåðàöèè â íèõÂûðàæåíèå, âû÷èñëÿåìîå àññåìáëåðîì, äîëæíî áûòü öåëî÷èñëåííûì, òî åñòü ñîñòîÿòü èç öåëî÷èñëåííûõ êîíñòàíò è ìåòîê, è èñïîëüçî-âàòü îïåðàöèè èç ñëåäóþùåãî ñïèñêà:100• + è - ñëîæåíèå è âû÷èòàíèå• * óìíîæåíèå;• / è % öåëî÷èñëåííîå äåëåíèå è îñòàòîê îò äåëåíèÿ (äëÿ áåççíàêîâûõ öåëûõ ÷èñåë);• // è %% öåëî÷èñëåííîå äåëåíèå è îñòàòîê îò äåëåíèÿ (äëÿ çíàêîâûõ öåëûõ ÷èñåë);• &, |, ^ îïåðàöèè ïîáèòîâîãî ¾è¿, ¾èëè¿, ¾èñêëþ÷àþùåãî èëè¿;• << è >> îïåðàöèè ïîáèòîâîãî ñäâèãà âëåâî è âïðàâî;• óíàðíûå îïåðàöèè - è + èñïîëüçóþòñÿ â èõ îáû÷íîé ðîëè: - ìåíÿåòçíàê ÷èñëà íà ïðîòèâîïîëîæíûé, + íå äåëàåò íè÷åãî;• óíàðíàÿ îïåðàöèÿ ~ îáîçíà÷àåò ïîáèòîâîå îòðèöàíèå.Ïðè ïðèìåíåíèè îïåðàöèé % è %% íåîáõîäèìî îáÿçàòåëüíî îñòàâëÿòüïðîáåëüíûé ñèìâîë ïîñëå çíàêà îïåðàöèè, ÷òîáû àññåìáëåð íå ïåðåïóòàëèõ ñ ìàêðîäèðåêòèâàìè (ìàêðîäèðåêòèâû ìû ðàññìîòðèì ïîçæå).Åù¼ îäíà óíàðíàÿ îïåðàöèÿ, seg, äëÿ íàñ íåïðèìåíèìà ââèäó îòñóòñòâèÿ ñåãìåíòîâ â ïëîñêîé ìîäåëè ïàìÿòè.¾¿Óíàðíûå îïåðàöèè èìåþò ñàìûé âûñîêèé ïðèîðèòåò, ñëåäîì çà íèìèèäóò îïåðàöèè óìíîæåíèÿ, äåëåíèÿ è îñòàòêà îò äåëåíèÿ, åù¼ íèæå ïðèîðèòåò ó îïåðàöèé ñëîæåíèÿ è âû÷èòàíèÿ.