А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 14
Текст из файла (страница 14)
Îáå êîìàíäû èìåþò ïî äâà îïåðàíäà, ïðè÷¼ì ïåðâûé èç íèõ çàäà¼ò è îäíî èç ÷èñåë, ó÷àñòâóþùèõ âîïåðàöèè, è ìåñòî, êóäà ñëåäóåò çàïèñàòü ðåçóëüòàò; âòîðîé îïåðàíä çàäà¼ò âòîðîå ÷èñëî äëÿ îïåðàöèè (âòîðîå ñëàãàåìîå, ëèáî âû÷èòàåìîå).ßñíî, ÷òî ïåðâûé îïåðàíä îáÿçàí áûòü ðåãèñòðîâûì ëèáî òèïà ¾ïàìÿòü¿;âòîðîé îïåðàíä ó îáåèõ êîìàíä ìîæåò áûòü ëþáîãî òèïà. Êàê è äëÿ êîìàíäû mov, äëÿ êîìàíä add è sub íåëüçÿ èñïîëüçîâàòü äâà îïåðàíäà òèïà¾ïàìÿòü¿ îäíîâðåìåííî.Íàïðèìåð, êîìàíäàadd eax, ebxîçíà÷àåò ¾âçÿòü çíà÷åíèå èç ðåãèñòðà EAX, ïðèáàâèòü ê íåìó çíà÷åíèå èçðåãèñòðà EBX, à ðåçóëüòàò çàïèñàòü îáðàòíî â ðåãèñòð EAX¿. Êîìàíäàsub [x], ecxîçíà÷àåò ¾âçÿòü ÷åòûð¼õáàéòíîå ÷èñëî èç ïàìÿòè ïî àäðåñó x, âû÷åñòüèç íåãî çíà÷åíèå èç ðåãèñòðà ECX, ðåçóëüòàò çàïèñàòü îáðàòíî â ïàìÿòüïî òîìó æå àäðåñó¿. Êîìàíäàadd edx, 12óâåëè÷èò íà 12 ñîäåðæèìîå ðåãèñòðà EDX, à êîìàíäà53add dword [x], 12ñäåëàåò òî æå ñàìîå ñ ÷åòûð¼õáàéòíîé îáëàñòüþ ïàìÿòè ïî àäðåñó x;îáðàòèòå âíèìàíèå, ÷òî íàì ïðèøëîñü ÿâíî óêàçàòü ðàçìåð îïåðàíäà(ñì.
2.2.7, ñòð. 51).Èíòåðåñíî, ÷òî êîìàíäû add è sub ðàáîòàþò ïðàâèëüíî âíå çàâèñèìîñòè îò òîãî, ñ÷èòàåì ëè ìû èõ îïåðàíäû ÷èñëàìè çíàêîâûìè èëè áåççíàêîâûìè7 .  çàâèñèìîñòè îò ïîëó÷åííîãî ðåçóëüòàòà êîìàíäû add èsub âûñòàâëÿþò çíà÷åíèÿ ôëàãîâ OF, CF, ZF è SF (ñì.
ñòð. 36), îäíàêî íåâñåãäà ýòè ôëàãè èìååò ñìûñë ðàññìàòðèâàòü.Ôëàã ZF óñòàíàâëèâàåòñÿ â åäèíèöó, åñëè â ðåçóëüòàòå ïîñëåäíåé îïåðàöèè ïîëó÷èëñÿ íîëü, â ïðîòèâíîì ñëó÷àå ôëàã ñáðàñûâàåòñÿ; ÿñíî, ÷òîçíà÷åíèå ýòîãî ôëàãà îñìûñëåííî êàê äëÿ çíàêîâûõ, òàê è äëÿ áåççíàêîâûõ ÷èñåë.Ôëàã SF óñòàíàâëèâàåòñÿ â åäèíèöó, åñëè ïîëó÷åíî îòðèöàòåëüíîå÷èñëî, èíà÷å îí ñáðàñûâàåòñÿ â íîëü. Ïðîöåññîð ïðîèçâîäèò óñòàíîâêó ýòîãî ôëàãà, ïîïðîñòó êîïèðóÿ â íåãî ñòàðøèé áèò ðåçóëüòàòà; äëÿçíàêîâûõ ÷èñåë ýòîò áèò äåéñòâèòåëüíî îçíà÷àåò çíàê ÷èñëà, íî äëÿ áåççíàêîâûõ çíà÷åíèå ôëàãà SF íå èìååò íèêàêîãî ñìûñëà.Ôëàã OF óñòàíàâëèâàåòñÿ, åñëè ïðîèçîøëî ïåðåïîëíåíèå, ÷òî îçíà÷àåò,÷òî â ðåçóëüòàòå ñëîæåíèÿ äâóõ ïîëîæèòåëüíûõ ïîëó÷èëîñü îòðèöàòåëüíîå, ëèáî, íàîáîðîò, â ðåçóëüòàòå ñëîæåíèÿ äâóõ îòðèöàòåëüíûõ ïîëó÷èëîñü ïîëîæèòåëüíîå, è ò.
ä. ßñíî, ÷òî ýòîò ôëàã, êàê è ïðåäûäóùèé, íåèìååò íèêàêîãî ñìûñëà äëÿ áåççíàêîâûõ ÷èñåë.Íàêîíåö, ôëàã CF óñòàíàâëèâàåòñÿ, åñëè (äëÿ áåççíàêîâûõ ÷èñåë) ïðîèçîøåë ïåðåíîñ èç ñòàðøåãî ðàçðÿäà, ëèáî ïðîèçîøåë çà¼ì èç íåñóùåñòâóþùåãî ðàçðÿäà. Ïî ñìûñëó ýòîò ôëàã ÿâëÿåòñÿ àíàëîãîì OF â ïðèìåíåíèè ê áåççíàêîâûì ÷èñëàì (ðåçóëüòàò íå ïîìåñòèëñÿ â ðàçìåð îïåðàíäà, ëèáî ïîëó÷èëñÿ îòðèöàòåëüíûì). Äëÿ çíàêîâûõ ÷èñåë ýòîò ôëàãñìûñëà íå èìååò.Ïîä÷åðêí¼ì, ÷òî ïðè ñëîæåíèè è âû÷èòàíèè ïðîöåññîð íå çíàåò, ðàáîòàåò ëè îí ñî çíàêîâûìè èëè ñ áåççíàêîâûìè ÷èñëàìè.Ñõåìàòè÷åñêè ñëîæåíèå è âû÷èòàíèå ïðîèçâîäèòñÿ àáñîëþòíî îäèíàêîâîâíå çàâèñèìîñòè îò ¾çíàêîâîñòè¿ îïåðàíäîâ; ôëàãè ïðîöåññîð âûñòàâëÿåò âñå, ò. å.
è òå, ÷òî èìåþò ñìûñë òîëüêî äëÿ çíàêîâûõ, è òå, ÷òî èìåþòñìûñë òîëüêî äëÿ áåççíàêîâûõ. Ïîìíèòü î òîì, êàêèå ÷èñëà èìåþòñÿ ââèäó ýòî îáÿçàííîñòü ïðîãðàììèñòà; èìåííî ïðîãðàììèñò äîëæåí èñïîëüçîâàòü íàáîð ôëàãîâ, ñîîòâåòñòâóþùèé çíàêîâîñòè îáðàáàòûâàåìûõ÷èñåë.7 Çíàêîâîñòü è áåççíàêîâîñòü öåëûõ ÷èñåë ìû îáñóæäàëè â 1.3.1 è 1.3.2; åñëè âûíå ÷óâñòâóåòå óâåðåííîñòè â îáðàùåíèè ñ ýòèìè òåðìèíàìè, îáÿçàòåëüíî ïåðå÷èòàéòåýòè ïàðàãðàôû è ïðè íåîáõîäèìîñòè çàäàéòå âîïðîñû ïðåïîäàâàòåëþ, â ïðîòèâíîìñëó÷àå âû ðèñêóåòå íè÷åãî íå ïîíÿòü â äàëüíåéøåì êóðñå.54 2.3.2.
Ñëîæåíèå è âû÷èòàíèå ñ ïåðåíîñîìÍàëè÷èå ôëàãà ïåðåíîñà ïîçâîëÿåò îðãàíèçîâàòü ñëîæåíèå è âû÷èòàíèå ÷èñåë, íå ïîìåùàþùèõñÿ â ðåãèñòðû, ñïîñîáîì, íàïîìèíàþùèìøêîëüíîå ñëîæåíèå è âû÷èòàíèå ¾â ñòîëáèê¿. Äëÿ ýòîãî â ïðîöåññîðåi386 ïðåäóñìîòðåíû êîìàíäû adc è sbb. Ïî ñâîåé ðàáîòå è ñâîéñòâàì îíèïîëíîñòüþ àíàëîãè÷íû êîìàíäàì add è sub, íî îòëè÷àþòñÿ îò íèõ òåì,÷òî ó÷èòûâàþò çíà÷åíèå ôëàãà ïåðåíîñà (CF) íà ìîìåíò íà÷àëà âûïîëíåíèÿ îïåðàöèè. Êîìàíäà adc äîáàâëÿåò ê ñâîåìó èòîãîâîìó ðåçóëüòàòóçíà÷åíèå ôëàãà ïåðåíîñà, êîìàíäà sbb, íàïðîòèâ, âû÷èòàåò çíà÷åíèåôëàãà ïåðåíîñà èç ñâîåãî ðåçóëüòàòà. Ïîñëå òîãî êàê ðåçóëüòàò ñôîðìèðîâàí, îáå êîìàíäû çàíîâî âûñòàâëÿþò âñå ôëàãè, âêëþ÷àÿ è CF, óæå âñîîòâåòñòâèè ñ íîâûì ðåçóëüòàòîì.Ïðèâåä¼ì ïðèìåð.
Ïóñòü ó íàñ åñòü äâà 64-áèòíûõ öåëûõ ÷èñëà, ïðè÷¼ì ïåðâîå çàïèñàíî â ðåãèñòðû EDX (ñòàðøèå 32 áèòà) è EAX (ìëàäøèå32 áèòà), à âòîðîå òî÷íî òàê æå çàïèñàíî â ðåãèñòðû EBX è ECX. Òîãäàñëîæèòü ýòè äâà ÷èñëà ìîæíî êîìàíäàìèadd eax, ecxadc edx, ebx; ñêëàäûâàåì ìëàäøèå ÷àñòè; òåïåðü ñòàðøèå, ñ ó÷¼òîì ïåðåíîñàåñëè æå íàì ïîíàäîáèòñÿ ïðîèçâåñòè âû÷èòàíèå, òî ýòî äåëàåòñÿ êîìàíäàìèsub eax, ecxsbb edx, ebx; âû÷èòàåì ìëàäøèå ÷àñòè; òåïåðü ñòàðøèå, ñ ó÷¼òîì çà¼ìà 2.3.3. Êîìàíäû inc, dec, neg è cmp×òîáû çàâåðøèòü ðàññìîòðåíèå ïðîñòåéøèõ àðèôìåòè÷åñêèõ îïåðàöèé, îïèøåì åù¼ ÷åòûðå êîìàíäû.Êîìàíäû inc è dec, ñ êîòîðûìè ìû óæå ñòàëêèâàëèñü â ðàíåå ïðèâåä¼ííûõ ïðèìåðàõ èìåþò âñåãî îäèí îïåðàíä (ðåãèñòðîâûé èëè òèïà¾ïàìÿòü¿) è ïðîèçâîäÿò, ñîîòâåòñòâåííî, óâåëè÷åíèå è óìåíüøåíèå íàåäèíèöó. Îáå êîìàíäû óñòàíàâëèâàþò ôëàãè ZF, OF è SF, íî íå çàòðàãèâàþò ôëàã CF.
Îòìåòèì, ÷òî ïðè èñïîëüçîâàíèè ýòèõ êîìàíä ñ îïåðàíäîìòèïà ¾ïàìÿòü¿ óêàçàíèå ðàçìåðà îïåðàíäà îêàçûâàåòñÿ îáÿçàòåëüíûì :äåéñòâèòåëüíî, äëÿ àññåìáëåðà íåò äðóãîãî ñïîñîáà ïîíÿòü, êàêîãî ðàçìåðà îáëàñòü ïàìÿòè èìååòñÿ â âèäó.Êîìàíäà neg, òàêæå èìåþùàÿ îäèí îïåðàíä, îáîçíà÷àåò ñìåíó çíàêà,òî åñòü îïåðàöèþ ¾óíàðíûé ìèíóñ¿. Îáû÷íî å¼ ïðèìåíÿþò ê çíàêîâûì÷èñëàì; òåì íå ìåíåå, îíà óñòàíàâëèâàåò âñå ÷åòûðå ôëàãà ZF, OF è SF èCF, êàê åñëè áû îïåðàíä âû÷èòàëñÿ èç íóëÿ.Íàêîíåö, êîìàíäà cmp (îò ñëîâà ¾compare¿ ¾ñðàâíèòü¿) ïðîèçâîäèòòî÷íî òàêîå æå âû÷èòàíèå, êàê è êîìàíäà sub, çà èñêëþ÷åíèåì òîãî, ÷òî55ðåçóëüòàò íèêóäà íå çàïèñûâàåòñÿ. Êîìàíäà âûçûâàåòñÿ ðàäè óñòàíîâêèôëàãîâ, îáû÷íî ñðàçó ïîñëå íå¼ ñëåäóåò êîìàíäà óñëîâíîãî ïåðåõîäà. 2.3.4.
Öåëî÷èñëåííîå óìíîæåíèå è äåëåíèå îòëè÷èå îò ñëîæåíèÿ è âû÷èòàíèÿ, óìíîæåíèå è äåëåíèå ñõåìàòè÷åñêè ðåàëèçóåòñÿ ñðàâíèòåëüíî ñëîæíî8 , òàê ÷òî êîìàíäû óìíîæåíèÿè äåëåíèÿ ìîãóò ïîêàçàòüñÿ îðãàíèçîâàííûìè î÷åíü íåóäîáíî äëÿ ïðîãðàììèñòà. Ïðè÷èíà ýòîãî, ïî-âèäèìîìó, â òîì, ÷òî ñîçäàòåëè ïðîöåññîðài386 è åãî ïðåäøåñòâåííèêîâ äåéñòâîâàëè çäåñü ïðåæäå âñåãî èç ñîîáðàæåíèé óäîáñòâà ðåàëèçàöèè ñàìîãî ïðîöåññîðà.Íàäî ñêàçàòü, ÷òî óìíîæåíèå è äåëåíèå äîñòàâëÿåò íåêîòîðûå ñëîæíîñòè íå òîëüêî ðàçðàáîò÷èêàì ïðîöåññîðîâ, íî è ïðîãðàììèñòàì, è îòíþäü íå òîëüêî â ñèëó íåóäîáíîñòè ñîîòâåòñòâóþùèõ êîìàíä, íî è ïîñàìîé ñâîåé ïðèðîäå.
Âî-ïåðâûõ, â îòëè÷èå îò ñëîæåíèÿ è âû÷èòàíèÿ,óìíîæåíèå è äåëåíèå äëÿ çíàêîâûõ è áåççíàêîâûõ ÷èñåë ïðîèçâîäèòñÿñîâåðøåííî ïî-ðàçíîìó, òàê ÷òî íåáõîäèìû è ðàçëè÷íûå êîìàíäû.Âî-âòîðûõ, èíòåðåñíûå âåùè ïðîèñõîäÿò ñ ðàçìåðàìè îïåðàíäîâ. Ïðèóìíîæåíèè ðàçìåð (êîëè÷åñòâî çíà÷àùèõ áèòîâ) ðåçóëüòàòà ìîæåò áûòüâäâîå áîëüøå, ÷åì ðàçìåð èñõîäíûõ îïåðàíäîâ, òàê ÷òî, åñëè ìû íå õîòèìïîòåðÿòü èíôîðìàöèþ, òî îäíèì ôëàæêîì, êàê ïðè ñëîæåíèè è âû÷èòàíèè, ìû òóò íå îáîéä¼ìñÿ: íóæåí äîïîëíèòåëüíûé ðåãèñòð äëÿ õðàíåíèÿñòàðøèõ áèòîâ ðåçóëüòàòà. Ñ äåëåíèåì ñèòóàöèÿ åù¼ èíòåðåñíåå: åñëè ìîäóëü äåëèòåëÿ ïðåâîñõîäèò 1, ðàçìåð ðåçóëüòàòà áóäåò ìåíüøå ðàçìåðàäåëèìîãî (åñëè òî÷íåå, êîëè÷åñòâî çíà÷àùèõ áèòîâ ðåçóëüòàòà äâîè÷íîãî äåëåíèÿ íå ïðåâîñõîäèò n − m + 1, ãäå n è m êîëè÷åñòâî çíà÷àùèõáèòîâ äåëèìîãî è äåëèòåëÿ ñîîòâåòñòâåííî), òàê ÷òî æåëàòåëüíî èìåòüâîçìîæíîñòü çàäàâàòü äåëèìîå áîëåå äëèííîå, ÷åì äåëèòåëü è ðåçóëüòàò.Êðîìå òîãî, öåëî÷èñëåííîå äåëåíèå äà¼ò â êà÷åñòâå ðåçóëüòàòà íå îäíî,à äâà ÷èñëà: ÷àñòíîå è îñòàòîê.
Ðàçäåëÿòü ìåæäó ñîáîé îïåðàöèè íàõîæäåíèÿ ÷àñòíîãî è îñòàòêà íåæåëàòåëüíî, ïîñêîëüêó ìîæåò ïðèâåñòèê äâóõêðàòíîìó âûïîëíåíèþ (íà óðîâíå ýëåêòðîííûõ ñõåì) îäíèõ è òåõæå äåéñòâèé.Âñå êîìàíäû öåëî÷èñëåííîãî óìíîæåíèÿ è äåëåíèÿ èìåþòòîëüêî îäèí îïåðàíä9 , çàäàþùèé âòîðîé ìíîæèòåëü â êîìàíäàõ óìíî-æåíèÿ è äåëèòåëü â êîìàíäàõ äåëåíèÿ, ïðè÷¼ì ýòîò îïåðàíä ìîæåò áûòüðåãèñòðîâûì èëè òèïà ¾ïàìÿòü¿, íî íå íåïîñðåäñòâåííûì. ×òî êàñàåòñÿïåðâîãî ìíîæèòåëÿ è äåëèìîãî, òî äëÿ èõ çàäàíèÿ, à òàêæå â êà÷åñòâå8 Íà íåêîòîðûõ ïðîöåññîðàõ, äàæå ñîâðåìåííûõ, ýòèõ îïåðàöèé âîîáùå íåò, è ïðè-÷èíà ýòîãî èñêëþ÷èòåëüíî ñëîæíîñòü èõ ðåàëèçàöèè.9 Íà ñàìîì äåëå, èç ýòîãî ïðàâèëà åñòü èñêëþ÷åíèå: êîìàíäà öåëî÷èñëåííîãî óìíîæåíèÿ çíàêîâûõ ÷èñåë imul èìååò äâóõìåñòíóþ è äàæå òð¼õìåñòíóþ ôîðìû, íî ðàññìàòðèâàòü ýòè ôîðìû ìû íå áóäåì: ïîëüçîâàòüñÿ èìè åù¼ ñëîæíåå, ÷åì îáû÷íîéîäíîìåñòíîé ôîðìîé.56ðàçðÿäí.(áèò)81632óìíîæåíèåíåÿâíûéðåçóëüòàòìíîæèòåëü óìíîæåíèÿALAXAXDX:AXEAXEDX:EAXäåëèìîåäåëåíèå÷àñòíîåîñòàòîêAXDX:AXEDX:EAXALAXEAXAHDXEDXÒàáëèöà 2.1.
Ðàñïîëîæåíèå íåÿâíîãî îïåðàíäà è ðåçóëüòàòîâ äëÿ îïåðàöèé öåëî÷èñëåííîãî äåëåíèÿ è óìíîæåíèÿ â çàâèñèìîñòè îò ðàçðÿäíîñòèÿâíîãî îïåðàíäàöåëè äëÿ çàïèñè ðåçóëüòàòà èñïîëüçóþòñÿ íåÿâíûé îïåðàíä , â êà÷åñòâå êîòîðîãî â äàííîì ñëó÷àå âûñòóïàþò ðåãèñòðû AL, AX, EAX, à ïðèíåîáõîäèìîñòè è ðåãèñòðîâûå ïàðû DX:AX è EDX:EAX (íàïîìíèì, ÷òîáóêâà A îçíà÷àåò ñëîâî ¾àêêóìóëÿòîð¿; ýòî è åñòü îñîáàÿ ðîëü ðåãèñòðàEAX, î êîòîðîé ãîâîðèëîñü íà ñòð. 34).Äëÿ óìíîæåíèÿ áåççíàêîâûõ ÷èñåë ïðèìåíÿþò êîìàíäó mul, äëÿóìíîæåíèÿ çíàêîâûõ êîìàíäó imul.  îáîèõ ñëó÷àÿõ, â çàâèñèìîñòè îòðàçðÿäíîñòè îïåðàíäà (âòîðîãî ìíîæèòåëÿ) ïåðâûé ìíîæèòåëü áåð¼òñÿèç ðåãèñòðà AL (äëÿ îäíîáàéòíîé îïåðàöèè), ëèáî AX (äëÿ äâóõáàéòíîéîïåðàöèè), ëèáî EAX (äëÿ ÷åòûð¼õáàéòíîé), à ðåçóëüòàò ïîìåùàåòñÿ â ðåãèñòð AX (åñëè îïåðàíäû áûëè îäíîáàéòíûìè), ëèáî â ðåãèñòðîâóþ ïàðóDX:AX (äëÿ äâóõáàéòíîé îïåðàöèè), ëèáî â ðåãèñòðîâóþ ïàðó EDX:EAX(äëÿ ÷åòûð¼õáàéòíîé îïåðàöèè).
Ýòî ìîæíî áîëåå íàãëÿäíî ïðåäñòàâèòüâ âèäå òàáëèöû (ñì. òàáë. 2.1).Êîìàíäû mul è imul óñòàíàâëèâàþò ôëàãè CF è OF â íîëü, åñëè ñòàðøàÿ ïîëîâèíà ðåçóëüòàòà ðàâíà íóëþ (òî åñòü âñå çíà÷àùèå áèòû ðåçóëüòàòà óìåñòèëèñü â ìëàäøåé ïîëîâèíå), â ïðîòèâíîì ñëó÷àå CF è OFóñòàíàâëèâàþòñÿ â åäèíèöó. Çíà÷åíèÿ îñòàëüíûõ ôëàãîâ ïîñëå âûïîëíåíèÿ mul è imul íå îïðåäåëåíû (òî åñòü íè÷åãî îñìûñëåííîãî ñêàçàòü îáèõ çíà÷åíèÿõ íåëüçÿ, ïðè÷¼ì ðàçíûå ïðîöåññîðû ìîãóò óñòàíàâëèâàòü èõïî-ðàçíîìó è äàæå â ðåçóëüòàòå âûïîëíåíèÿ îäíîé è òîé æå êîìàíäû íàîäíîì è òîì æå ïðîöåññîðå ôëàãè ìîãóò ïîëó÷èòü ðàçíûå çíà÷åíèÿ).Äëÿ äåëåíèÿ (è íàõîæäåíèÿ îñòàòêà îò äåëåíèÿ) öåëûõ ÷èñåë ïðèìåíÿþò êîìàíäó div (äëÿ áåççíàêîâûõ) è idiv (äëÿ çíàêîâûõ).