А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 39
Текст из файла (страница 39)
Îñíîâíîå îòëè÷èå ìåæäó ýòèìè äâóìÿ êîìàíäàìè â òîì, ÷òî fst ïðîñòî ÷èòàåò ÷èñëî,íàõîäÿùååñÿ íà âåðøèíå ñòåêà (ò. å. â ðåãèñòðå ST0), òîãäà êàê fstp èçâëåêàåò ÷èñëî èç ñòåêà, ïîìå÷àÿ ST0 êàê ñâîáîäíûé è óâåëè÷èâàÿ çíà÷åíèåTOP. Êîìàíäà fst ïî÷åìó-òî íå óìååò ðàáîòàòü ñ 80-áèòíûìè îïåðàíäàìè òèïà ¾ïàìÿòü¿, ó fstp òàêîãî îãðàíè÷åíèÿ íåò. Îòìåòèì åù¼ îäèíìîìåíò: êîìàíäàfstp st0ñíà÷àëà çàïèñûâàåò ñîäåðæèìîå ST0 â íåãî æå ñàìîãî, à çàòåì âûòàëêèâàåò ST0 èç ñòåêà; òàêèì îáðàçîì, ýôôåêò îò ýòîé êîìàíäû ñîñòîèò âóíè÷òîæåíèè çíà÷åíèÿ íà âåðøèíå ñòåêà. Òàê îáû÷íî äåëàþò â ñëó÷àå,åñëè ÷èñëî, íàõîäÿùååñÿ íà âåðøèíå ñòåêà, â äàëüíåéøèõ âû÷èñëåíèÿõíå íóæíî.×àñòî áûâàåò íóæíî ïåðåâåñòè öåëîå ÷èñëî â ôîðìàò ñ ïëàâàþùåéòî÷êîé è íàîáîðîò. Êîìàíäà fild ïîçâîëÿåò âçÿòü èç ïàìÿòè öåëîå ÷èñëî è çàïèñàòü åãî â ñòåê ñîïðîöåññîðà (åñòåñòâåííî, óæå â ¾ïëàâàþùåì¿ôîðìàòå).
Êîìàíäà èìååò îäèí îïåðàíä, îáÿçàòåëüíî òèïà ¾ïàìÿòü¿, ðàçìåðà word, dword èëè qword (â ýòîì ñëó÷àå èìååòñÿ â âèäó âîñüìèáàéòíîåöåëîå). Êîìàíäû fist è fistp ïðîèçâîäÿò îáðàòíîå äåéñòâèå: áåðóò ÷èñëî, íàõîäÿùååñÿ â ST0, îêðóãëÿþò åãî äî öåëîãî â ñîîòâåòñòâèè ñ óñòàíîâëåííûì ðåæèìîì îêðóãëåíèÿ è çàïèñûâàþò ðåçóëüòàò â ïàìÿòü ïîàäðåñó, çàäàííîìó îïåðàíäîì. Ïî àíàëîãèè ñ êîìàíäàìè fst è fstp, êîìàíäà fst íèêàê íå èçìåíÿåò ñàì ñòåê, à êîìàíäà fstp óáèðàåò ÷èñëîèç ñòåêà. Îïåðàíä êîìàíäû fstp ìîæåò áûòü ðàçìåðà word, dword èëèqword, êîìàíäà fst óìååò ðàáîòàòü òîëüêî ñ word è dword.Êîìàíäà fxch ïîçâîëÿåò îáìåíÿòü ìåñòàìè ñîäåðæèìîå âåðøèíû ñòåêà (ST0) è ëþáîãî äðóãîãî ðåãèñòðà STn, êîòîðûé óêàçûâàåòñÿ â êà÷åñòâå171å¼ îïåðàíäà.
Ðåãèñòðû íå äîëæíû áûòü ïóñòûìè. ×àùå âñåãî fxch èñïîëüçóþò, ÷òîáû ïîìåíÿòü ìåñòàìè ST0 è ST1, â ýòîì ñëó÷àå îïåðàíäìîæíî íå óêàçûâàòü.Ñîïðîöåññîð ïîääåðæèâàåò ðÿä êîìàíä, ïîçâîëÿþùèõ çàãðóçèòü âñòåê ÷àñòî óïîòðåáëÿåìûå êîíñòàíòû: fld1 (çàãðóæàåò 1.0), fldz (çàãðóæàåò +0.0), fldpi (çàãðóæàåò π ), fldl2e (çàãðóæàåò log2 e), fldl2t(çàãðóæàåò log2 10), fldln2 (çàãðóæàåò ln 2), fldlg2 (çàãðóæàåò lg 2). Âñåýòè êîìàíäû íå èìåþò îïåðàíäîâ; â ðåçóëüòàòå âûïîëíåíèÿ êàæäîé èçíèõ çíà÷åíèå TOP óìåíüøàåòñÿ, è â íîâîì ðåãèñòðå ST0 îêàçûâàåòñÿ ñîîòâåòñòâóþùåå çíà÷åíèå. Îò óñòàíîâëåííîãî ðåæèìà îêðóãëåíèÿ çàâèñèò,â êàêóþ ñòîðîíó áóäåò îòëè÷àòüñÿ çàãðóæåííîå ïðèáëèæ¼ííîå çíà÷åíèåîò ìàòåìàòè÷åñêîãî. 6.4.
Êîìàíäû àðèôìåòè÷åñêèõ äåéñòâèéÏðîñòåéøèé ñïîñîá âûïîëíåíèÿ ÷åòûð¼õ äåéñòâèé àðèôìåòèêè íàñîïðîöåññîðå ýòî êîìàíäû fadd, fsub, fsubr, fmul, fdiv è fdivr ñîäíèì îïåðàíäîì, â êà÷åñòâå êîòîðîãî ìîæåò âûñòóïàòü îïåðàíä òèïà¾ïàìÿòü¿ ðàçìåðà dword èëè qword. Êîìàíäû fadd è fmul âûïîëíÿþòñîîòâåòñòâåííî ñëîæåíèå è óìíîæåíèå ðåãèñòðà ST0 ñî ñâîèì îïåðàíäîì,êîìàíäà fsub âû÷èòàåò îïåðàíä èç ST0, êîìàíäà fdiv äåëèò ST0 íà ñâîéîïåðàíä, fsubr, íàîáîðîò, âû÷èòàåò ST0 èç ñâîåãî îïåðàíäà, fdivr äåëèò ñâîé îïåðàíä íà ST0; ðåçóëüòàò âñåõ êîìàíä çàïèñûâàåòñÿ îáðàòíî âST0.
Âñå øåñòü êîìàíä ìîãóò áûòü èñïîëüçîâàíû è áåç îïåðàíäîâ, â ýòîìñëó÷àå ðîëü îïåðàíäà èãðàåò ST1.Âñå ïåðå÷èñëåííûå êîìàíäû èìåþò òàêæå ôîðìó ñ äâóìÿ îïåðàíäàìè, ïðè ýòîì â ðîëè îáîèõ îïåðàíäîâ ìîãóò âûñòóïàòü òîëüêî ðåãèñòðûSTn, ïðè÷¼ì îäíèì èç íèõ îáÿçàí áûòü ST0 (íî îí ìîæåò áûòü êàê ïåðâûì, òàê è âòîðûì îïåðàíäîì).  ýòîì ñëó÷àå êîìàíäû âûïîëíÿþò çàäàííîå äåéñòâèå íàä ïåðâûì è âòîðûì îïåðàíäàìè è ðåçóëüòàò ïîìåùàþòâ ïåðâûé îïåðàíä.Êðîìå òîãî, âñå øåñòü êîìàíä èìåþò åù¼ è ¾âûòàëêèâàþùóþ¿ ôîðìó,êîòîðàÿ íàçûâàåòñÿ, ñîîòâåòñòâåííî, faddp, fsubp, fsubrp, fmulp, fdivp èfdivrp; â ýòîé ôîðìå êîìàíäû èìåþò âñåãäà äâà îïåðàíäà-ðåãèñòðà STn,ïðè÷¼ì âòîðîé îïåðàíä äîëæåí áûòü ST0; ïîñëå âûïîëíåíèÿ îïåðàöèèè çàíåñåíèÿ ðåçóëüòàòà â ïåðâûé îïåðàíä ýòè êîìàíäû óáèðàþò èç ñòåêàST0, òî åñòü îí ïîìå÷àåòñÿ êàê ïóñòîé è çíà÷åíèå TOP óâåëè÷èâàåòñÿ íàåäèíèöó; âûòåñíåííîå èç ñòåêà ÷èñëî íèêóäà íå çàïèñûâàåòñÿ.Êîìàíäû â ¾âûòàëêèâàþùåé¿ ôîðìå ìîæíî òàêæå çàïèñàòü áåç îïåðàíäîâ, â ýòîì ñëó÷àå â êà÷åñòâå îïåðàíäîâ èñïîëüçóþòñÿ ST1 è ST0; äåéñòâèå â ýòîì ñëó÷àå ìîæíî îïèñàòü ôðàçîé ¾âçÿòü èç ñòåêà äâà îïåðàíäà,ïðîèçâåñòè íàä íèìè çàäàííîå äåéñòâèå, ðåçóëüòàò ïîëîæèòü îáðàòíî â172ñòåê¿.
Îòìåòèì, ÷òî íåêîòîðûå ïðîãðàììèñòû ñ÷èòàþò äîñòîéíûìè ïðèìåíåíèÿ òîëüêî êîìàíäû â ýòîé ôîðìå. Äåéñòâèòåëüíî, òàê ìîæíî âû÷èñëèòü ëþáîå àðèôìåòè÷åñêîå âûðàæåíèå, åñëè òîëüêî îíî íå ñîäåðæèòñëèøêîì ìíîãî âëîæåííûõ ñêîáîê (èíà÷å íàì íå õâàòèò ãëóáèíû ñòåêà).Äëÿ ýòîãî âûðàæåíèå íóæíî ïðåäñòàâèòü â òàê íàçûâàåìîé ïîëüñêîé èíâåðñíîé çàïèñè (ÏÎËÈÇ), â êîòîðîé ñíà÷àëà ïèøóòñÿ îïåðàíäû, ïîòîìçíàê îïåðàöèè; îïåðàíäû ìîãóò áûòü ñêîëü óãîäíî ñëîæíûìè âûðàæåíèÿìè, òàêæå çàïèñàííûìè â ÏÎËÈÇå. Íàïðèìåð, âûðàæåíèå (x+y)∗(1−z)â ÏÎËÈÇå áóäåò çàïèñàíî òàê: x y + 1 z - *.
Ïóñòü x, y è z ó íàñ îïèñàíû êàê îáëàñòè ïàìÿòè (ïåðåìåííûå) äëèíû qword è ñîäåðæàò ÷èñëà ñïëàâàþùåé òî÷êîé. Òîãäà äëÿ âû÷èñëåíèÿ íàøåãî âûðàæåíèÿ ìû ìîæåìïðîñòî ïåðåâåñòè çàïèñü â ÏÎËÈÇå â çàïèñü íà ÿçûêå àññåìáëåðà, ïðèýòîì êàæäûé ýëåìåíò ÏÎËÈÇà ïðåâðàòèòñÿ ðîâíî â îäíó êîìàíäó:fldfldfaddpfld1fldfsubpfmulpqword [x]qword [y]qword [z];;;;;;;xy+1z*Ðåçóëüòàò âû÷èñëåíèÿ îêàæåòñÿ â ST0. Âïðî÷åì, ïðèìåíåíèå äðóãèõôîðì àðèôìåòè÷åñêèõ êîìàíä ñïîñîáíî èçðÿäíî óêîðîòèòü òåêñò ïðîãðàììû; êàê íåñëîæíî óáåäèòüñÿ, ñëåäóþùèé ôðàãìåíò äåëàåò àáñîëþòíî òî æå ñàìîå:fldfaddfld1fsubfmulpqword [x]qword [y]qword [z]Èíîãäà áûâàþò ïîëåçíû èìåþùèå îäèí îïåðàíä êîìàíäû fiadd,fisub, fisubr, fimul, fidiv è fidivr, âûïîëíÿþùèå ñîîòâåòñòâóþùååàðèôìåòè÷åñêîå äåéñòâèå íàä ST0 è ñâîèì îïåðàíäîì, êîòîðûé äîëæåíáûòü òèïà ¾ïàìÿòü¿ ðàçìåðà word èëè dword è ðàññìàòðèâàåòñÿ êàê öåëîå ÷èñëî. çàêëþ÷åíèå ðàçãîâîðà î ïðîñòåéøåé àðèôìåòèêå óïîìÿíåì åù¼ òðèêîìàíäû.
Êîìàíäà fabs âû÷èñëÿåò ìîäóëü ST0, êîìàíäà fchs (îò ñëîâchange sign ñìåíèòü çíàê) ìåíÿåò çíàê ST0 íà ïðîòèâîïîëîæíûé, êîìàíäà frndint îêðóãëÿåò ST0 äî öåëîãî â ñîîòâåòñòâèè ñ óñòàíîâëåííûìðåæèìîì îêðóãëåíèÿ. Ðåçóëüòàò çàïèñûâàåòñÿ îáðàòíî â ST0 Âñå òðè êîìàíäû èìåþò òîëüêî îäíó ôîðìó áåç îïåðàíäîâ.Êîìàíäû fprem, fprem1, fscale, fxtract îñòàâëÿåì ëþáîçíàòåëüíûì ÷èòàòåëÿì äëÿ ñàìîñòîÿòåëüíîãî èçó÷åíèÿ.173 6.5. Êîìàíäû âû÷èñëåíèÿ ìàòåìàòè÷åñêèõôóíêöèéÊîìàíäû fsin, fcos è fsqrt âû÷èñëÿþò, ñîîòâåòñòâåííî, ñèíóñ, êîñèíóñ è êâàäðàòíûé êîðåíü ÷èñëà, ëåæàùåãî â ST0, ðåçóëüòàò ïîìåùàåòñÿîáðàòíî â ST0. Êîìàíäà fsincos ÷óòü ñëîæíåå: îíà èçâëåêàåò èç ñòåêà÷èñëî, âû÷èñëÿåò åãî ñèíóñ è êîñèíóñ è êëàä¼ò èõ â ñòåê, òàê ÷òî ñèíóñîêàçûâàåòñÿ â ST1, êîñèíóñ â ST0, à âñåãî â ñòåêå îêàçûâàåòñÿ íà îäíî÷èñëî áîëüøå, ÷åì áûëî äî âûïîëíåíèÿ êîìàíäû.Íåñêîëüêî ýêçîòè÷íî âåä¼ò ñåáÿ êîìàíäà fptan, âû÷èñëÿþùàÿ òàíãåíñ.
Îíà áåð¼ò àðãóìåíò èç ST0, âû÷èñëÿåò åãî òàíãåíñ, çàíîñèò ðåçóëüòàò îáðàòíî â ST0, íî ïîñëå ýòîãî äîáàâëÿåò â ñòåê åù¼ ÷èñëî 1, òàê ÷òî âñòåêå îêàçûâàåòñÿ íà îäíî ÷èñëî áîëüøå, ÷åì äî âûïîëíåíèÿ êîìàíäû, èïðè ýòîì â ST0 íàõîäèòñÿ åäèíèöà, à ðåçóëüòàò âû÷èñëåíèÿ òàíãåíñà íàõîäèòñÿ â ST1. Öåëüþ âñåé ýòîé ïëÿñêè ÿâëÿåòñÿ óïðîùåíèå âû÷èñëåíèÿêîòàíãåíñà: åãî òåïåðü ìîæíî âû÷èñëèòü óæå çíàêîìîé íàì êîìàíäîéfdivr; åñëè æå êîòàíãåíñ íå íóæåí, èçáàâèòüñÿ îò åäèíèöû ìîæíî, ðàçäåëèâ íà íå¼, òî åñòü êîìàíäîé fdivp, èëè ïðîñòî âûêèíóòü å¼ èç ñòåêàêîìàíäîé fstp st0.Êîìàíäà fpatan âû÷èñëÿåò arctg xy , ãäå x çíà÷åíèå â ST0, y çíà÷åíèå â ST1. Ýòè äâà ÷èñëà èç ñòåêà èçûìàþòñÿ, ðåçóëüòàò çàïèñûâàåòñÿ âñòåê, òàê ÷òî â ñòåêå îêàçûâàåòñÿ íà îäíî ÷èñëî ìåíüøå, ÷åì áûëî. Çíàêðåçóëüòàòà ñîâïàäàåò ñî çíàêîì y , ìîäóëü ðåçóëüòàòà íå ïðåâîñõîäèò π .Êðîìå òîãî, ñîïðîöåññîð ïðåäóñìàòðèâàåò êîìàíäû f2xm1, fyl2x è fyl2xp.Êîìàíäà f2xm1 âû÷èñëÿåò 2x − 1, ãäå x çíà÷åíèå ST0, ðåçóëüòàò çàíîñèò îáðàòíî â ST0.
Àðãóìåíò íå äîëæåí ïî ìîäóëþ ïðåâîñõîäèòü 1, èíà÷å ðåçóëüòàòíåîïðåäåë¼í. Êîìàíäû fyl2x è fyl2xp âû÷èñëÿþò y × log2 x è y × log2 (x + 1),ãäå x çíà÷åíèå ST0, y çíà÷åíèå ST1; ýòè çíà÷åíèÿ èç ñòåêà óáèðàþòñÿ, àðåçóëüòàò äîáàâëÿåòñÿ â ñòåê, òàê ÷òî â èòîãå â ñòåêå îñòà¼òñÿ íà îäíî ÷èñëîìåíüøå, ÷åì áûëî, è íà âåðøèíå íàõîäèòñÿ ðåçóëüòàò âû÷èñëåíèÿ.Ïðè âûïîëíå√íèè fyl2xp1 çíà÷åíèå x íå äîëæíî ïî ìîäóëþ ïðåâîñõîäèòü 1 + 22 , â ïðîòèâíîìñëó÷àå ðåçóëüòàò íåîïðåäåë¼í.
×èòàòåëþ ïðåäëàãàåòñÿ ñàìîñòîÿòåëüíî äîãàäàòüñÿ, äëÿ ÷åãî íóæíû ýòè òðè êîìàíäû è êàê èìè ïîëüçîâàòüñÿ.Îïåðàíäû ó âñåõ êîìàíä èç ýòîãî ïàðàãðàôà íå ïðåäóñìîòðåíû. 6.6. Ñðàâíåíèå è îáðàáîòêà åãî ðåçóëüòàòîâÎáùàÿ èäåÿ ñðàâíåíèÿ è äåéñòâèé â çàâèñèìîñòè îò åãî ðåçóëüòàòîâ äëÿ ÷èñåë ñ ïëàâàþùåé òî÷êîé òàêàÿ æå, êàê è äëÿ öåëûõ: ñíà÷àëàïðîèçâîäèòñÿ ñðàâíåíèå, ïî èòîãàì êîòîðîãî óñòàíàâëèâàþòñÿ ôëàãè, àçàòåì èñïîëüçóåòñÿ êîìàíäà óñëîâíîãî ïåðåõîäà â çàâèñèìîñòè îò ñîñòîÿíèÿ ôëàãîâ. Âñ¼ íåñêîëüêî îñëîæíÿåòñÿ òåì, ÷òî ó àðèôìåòè÷åñêîãîñîïðîöåññîðà ñâîÿ ñèñòåìà ôëàãîâ, ïðè÷¼ì îñíîâíîé ïðîöåññîð íå èìååò174êîìàíä óñëîâíîãî ïåðåõîäà ïî ýòèì ôëàãàì. Ïîýòîìó â ïðèâû÷íóþ ñõåìó ïðèõîäèòñÿ äîáàâèòü åù¼ è óñòàíîâêó ôëàãîâ îñíîâíîãî ïðîöåññîðà âñîîòâåòñòâèè ñ òåêóùèì ñîñòîÿíèåì ôëàãîâ ñîïðîöåññîðà.Ñðàâíåíèå ìîæíî âûïîëíèòü êîìàíäàìè fcom, fcomp è fcompp.
Êîìàíäû fcom è fcomp èìåþò îäèí îïåðàíä ëèáî òèïà ¾ïàìÿòü¿ ðàçìåðàdword èëè qword, ëèáî ðåãèñòð STn; îïåðàíä ìîæíî îïóñòèòü, òîãäà â åãîðîëè âûñòóïèò ST1. Êîìàíäû ñðàâíèâàþò ST0 ñî ñâîèì îïåðàíäîì (èëèñ ST1, åñëè îïåðàíä íå óêàçàí. Êîìàíäà fcomp îòëè÷àåòñÿ îò fcom òåì,÷òî âûòàëêèâàåò èç ñòåêà ST0.
Êîìàíäà fcompp, íå èìåþùàÿ îïåðàíäîâ,ñðàâíèâàåò ST0 ñ ST1 è âûòàëêèâàåò èõ îáà èç ñòåêà. ðåçóëüòàòå âûïîëíåíèÿ êîìàíä ñðàâíåíèÿ óñòàíàâëèâàþòñÿ ôëàãèC3 è C0 â ðåãèñòðå SR (ñì. ñòð. 169) ñëåäóþùèì îáðàçîì: ïðè ðàâåíñòâåñðàâíèâàåìûõ ÷èñåë C3 óñòàíàâëèâàåòñÿ â åäèíèöó, C0 ñáðàñûâàåòñÿâ íîëü; â ïðîòèâíîì ñëó÷àå C3 ñáðàñûâàåòñÿ, è åñëè ïåðâîå èç ñðàâíèâàåìûõ (òî åñòü ÷èñëî, íàõîäèâøååñÿ â ðåãèñòðå ST0) áîëüøå âòîðîãî(çàäàííîãî îïåðàíäîì èëè ðåãèñòðîì ST1), òî C0 óñòàíàâëèâàåòñÿ â åäèíèöó, åñëè æå ìåíüøå òî ñáðàñûâàåòñÿ.