А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 40
Текст из файла (страница 40)
Ôëàã C3 îêàçûâàåòñÿ, òàêèìîáðàçîì, ïî ñìûñëó àíàëîãè÷íûì ôëàãó ZF, à ôëàã C0 ôëàãó CF (ïðèñðàâíåíèè áåççíàêîâûõ öåëûõ).Íà ñàìîì äåëå êîìàíäû ñðàâíåíèÿ óñòàíàâëèâàþò åù¼ è ôëàã C2, ïðè÷¼ì åñëèâñ¼ â ïîðÿäêå òî îí ñáðàñûâàåòñÿ â íîëü, åñëè æå ÷èñëà íåñðàâíèìû (íàïðèìåð,îáà ÷èñëà ¾ïëþñ áåñêîíå÷íîñòè¿, èëè îäíî èç íèõ ¾íå-÷èñëî¿) è ñîïðîöåññîðïðè ýòîì íàñòðîåí òàê, ÷òîáû íå èíèöèèðîâàòü ïðåðûâàíèÿ â ýòèõ ñèòóàöèÿõ òî C2 óñòàíàâëèâàåòñÿ â åäèíèöó.×òîáû ðåçóëüòàòîì ñðàâíåíèÿ ìîæíî áûëî âîñïîëüçîâàòüñÿ äëÿóñëîâíîãî ïåðåõîäà, íåîáõîäèìî ñêîïèðîâàòü ôëàãè èç CR â ðåãèñòð FLAGSîñíîâíîãî ïðîöåññîðà. Ýòî äåëàåòñÿ êîìàíäàìèfstsw axsahfÏåðâàÿ èç íèõ êîïèðóåò SR â ðåãèñòð AX, à âòîðàÿ çàãðóæàåò íåêîòîðûå(íå âñå!) ôëàãè â FLAGS èç AH.
 ÷àñòíîñòè, ïîñëå âûïîëíåíèÿ ýòèõ äâóõêîìàíä çíà÷åíèå ôëàãà C3 êîïèðóåòñÿ â ZF, à çíà÷åíèå C0 â CF3 , ÷òîïîëíîñòüþ ñîîòâåòñòâóåò íàøèì ïîòðåáíîñòÿì: òåïåðü ìû ìîæåì âîñïîëüçîâàòüñÿ äëÿ óñëîâíîãî ïåðåõîäà ëþáîé èç êîìàíä, ïðåäóñìîòðåííûõäëÿ áåççíàêîâûõ öåëûõ ÷èñåë: ja, jb, jae, jbe, jna è ò. ä. (ñì. òàáë. 2.3íà ñòð. 62). Ïîä÷åðêí¼ì åù¼ ðàç, ÷òî èñïîëüçîâàíèå èìåííî ýòèõ êîìàíäîáóñëîâëåíî òîëüêî òåì, ÷òî ðåçóëüòàò ñðàâíåíèÿ îêàçàëñÿ âî ôëàãàõ CFè ZF, áîëüøå íè÷åãî îáùåãî ìåæäó ÷èñëàìè ñ ïëàâàþùåé òî÷êîé è áåççíàêîâûìè öåëûìè, âîîáùå ãîâîðÿ, íåò.3 Îòìåòèì íà âñÿêèé ñëó÷àé, ÷òî ôëàã C2 ïðè ýòîì êîïèðóåòñÿ â PF.175Ïóñòü, íàïðèìåð, ó íàñ åñòü ïåðåìåííûå a, b è m ðàçìåðà qword, ñîäåðæàùèå ÷èñëà ñ ïëàâàþùåé òî÷êîé, è ìû õîòèì çàíåñòè â m íàèìåíüøååèç a è b.
Ýòî ìîæíî ñäåëàòü òàê:lpa:fld qword [b]; b íà âåðøèíó ñòåêà (â ST0)fld qword [a]; òåïåðü à â ST0, b â ST1fcom; ñðàâíèâàåì èõfstsw ax; êîïèðóåì ôëàãè â AXsahf;è îòòóäà - â FLAGSja lpa; åñëè a>b - ïðûãàåìfxcn; èíà÷å ìåíÿåì ÷èñëà ìåñòàìè; òåïåðü áîëüøåå â ST0, ìåíüøåå â ST1fstp st0; ëèêâèäèðóåì íåíóæíîå áîëüøååfstp qword [m] ; çàïèñûâàåì â ïàìÿòü ìåíüøåå¾Íåíóæíîå¿ ÷èñëî ìîæíî áûëî áû óáðàòü èç ñòåêà è èíà÷å.
Âìåñòî ïðåäïîñëåäíåé êîìàíäû ìîæíî áûëî áû äàòü äâå êîìàíäû: ñíà÷àëà ffree st0, êîòîðàÿïîìåòèò ðåãèñòð ST0 êàê ñâîáîäíûé, ïîòîì fincstp, êîòîðàÿ óâåëè÷èò çíà÷åíèåTOP íà åäèíèöó. Ýòè êîìàíäû ðàññìàòðèâàþòñÿ â 6.7.3. ðÿäå ñëó÷àåâ ìîãóò îêàçàòüñÿ ïîëåçíû òàêæå êîìàíäû ficom èficomp, âñåãäà èìåþùèå îäèí îïåðàíä òèïà ¾ïàìÿòü¿ ðàçìåðà word èëèdword è ðàññìàòðèâàþùèå ýòîò îïåðàíä êàê öåëîå ÷èñëî.  îñòàëüíîìîíè àíàëîãè÷íû êîìàíäàì fcom è fcomp: ïåðâûì îïåðàíäîì ñðàâíåíèÿâûñòóïàåò ST0, ïî ðåçóëüòàòàì ñðàâíåíèÿ óñòàíàâëèâàþòñÿ ôëàãè C3, C2è C0.
Êîìàíäà ficomp, â îòëè÷èå îò ficom, âûòàëêèâàåò ST0 èç ñòåêà. Íàêîíåö, êîìàíäà ftst, íå èìåþùàÿ îïåðàíäîâ, ñðàâíèâàåò âåðøèíó ñòåêàñ íóë¼ì. 6.7. Óïðàâëåíèå ñîïðîöåññîðîì 6.7.1. Èñêëþ÷èòåëüíûå ñèòóàöèè è èõ îáðàáîòêà ðåçóëüòàòå âûïîëíåíèÿ âû÷èñëåíèé ñ ïëàâàþùåé òî÷êîé ìîãóò âîçíèêàòü èñêëþ÷èòåëüíûå ñèòóàöèè , ÷òî â íåêîòîðûõ ñëó÷àÿõ ñâèäåòåëüñòâóåò îá îøèáêå â ïðîãðàììå èëè âõîäíûõ äàííûõ, à â äðóãèõñëó÷àÿõ ìîæåò îòðàæàòü âïîëíå øòàòíûå îñîáåííîñòè õîäà âû÷èñëåíèé.Ðàçëè÷àþò øåñòü òàêèõ ñèòóàöèé:1. Íåäîïóñòèìàÿ îïåðàöèÿ (Invalid Operation, #I) ïîïûòêà èñïîëüçîâàíèÿ ¾íå-÷èñåë¿ â êà÷åñòâå îïåðàíäîâ, ïîïûòêà èçâëå÷ü êâàäðàòíûé êîðåíü èëè ëîãàðèôì èç îòðèöàòåëüíîãî ÷èñëà è ò. ï.
Òàêæåýòî ìîæåò îçíà÷àòü îøèáêó ñòåêà: ïîïûòêó çàïèñàòü íîâîå ÷èñëî âçàïîëíåííûé ñòåê (òî åñòü êîãäà âñå âîñåìü ðåãèñòðîâ çàíÿòû), ëèáî ïîïûòêó âûòîëêíóòü ÷èñëî èç ñòåêà, êîãäà â ñòåêå íåò íè îäíîãî176÷èñëà, ëèáî ïîïûòêó èñïîëüçîâàòü â êà÷åñòâå îïåðàíäà ðåãèñòð, êîòîðûé â íàñòîÿùåå âðåìÿ ïóñò.2. Äåíîðìàëèçàöèÿ (Denormalized, #D) ïîïûòêà âûïîëíåíèÿ îïåðàöèè íàä äåíîðìàëèçîâàííûì ÷èñëîì, ëèáî ðåçóëüòàò î÷åðåäíîé îïåðàöèè ñòîëü ìàë ïî ìîäóëþ, ÷òî íå ìîæåò áûòü ïðåñòàâëåí èíà÷åêàê â âèäå äåíîðìàëèçîâàííîãî ÷èñëà.3.
Äåëåíèå íà íîëü (Zero divider, #Z) ïîïûòêà äåëåíèÿ íà íîëü.4. Ïåðåïîëíåíèå (Overow, #O) ðåçóëüòàò î÷åðåäíîé îïåðàöèè ñòîëüâåëèê, ÷òî íå ìîæåò áûòü ïðåäñòàâëåí â âèäå ÷èñëà ñ ïëàâàþùåéòî÷êîé èìåþùèõñÿ ðàçìåðîâ (÷àñòíûì ñëó÷àåì ýòîé ñèòóàöèè ÿâëÿåòñÿ ïåðåâîä ÷èñëà èç âíóòðåííåãî äåñÿòèáàéòíîãî ïðåäñòàâëåíèÿâ ÷åòûð¼õ- èëè âîñüìèáàéòíîå ïðåäñòàâëåíèå ñ ïîìîùüþ, íàïðèìåð, êîìàíäû fst â ñëó÷àå, åñëè â íîâîå ïðåäñòàâëåíèå ÷èñëî ¾íåâëåçàåò¿).5. Àíòèïåðåïîëíåíèå (Underow, #U) ðåçóëüòàò ñòîëü ìàë ïî ìîäóëþ, ÷òî íå ìîæåò áûòü ïðåäñòàâëåí â âèäå ÷èñëà ñ ïëàâàþùåéòî÷êîé íóæíîãî ðàçìåðà (â òîì ÷èñëå ïðè âûïîëíåíèè êîìàíäûfst, ñì. âûøå).6. Ïîòåðÿ òî÷íîñòè (Precision, #P) ðåçóëüòàò îïåðàöèè íå ìîæåòáûòü ïðåäñòàâëåí òî÷íî èìåþùèìèñÿ ñðåäñòâàìè; â áîëüøèíñòâåñëó÷àåâ ýòî àáñîëþòíî íîðìàëüíî. êàæäîì èç ðåãèñòðîâ CR è SR ìëàäøèå øåñòü áèò ñîîòâåòñòâóþòïåðå÷èñëåííûì ñèòóàöèÿì â òîì ïîðÿäêå, â êîòîðîì îíè ïåðå÷èñëåíû:áèò 0 ñîîòâåòñòâóåò íåäîïóñòèìîé îïåðàöèè, áèò 1 äåíîðìàëèçàöèè, è ò.
ä.; áèò 5 ñîîòâåòñòâóåò ïîòåðå òî÷íîñòè. Êðîìå òîãî, â ðåãèñòðå SR áèò 6 ñîîòâåòñòâóåò îøèáêå ñòåêà. Ïðè ýòîì áèòû ðåãèñòðàCR óïðàâëÿþò òåì, ÷òî ïðîöåññîð äîëæåí ñäåëàòü ïðè âîçíèêíîâåíèèèñêëþ÷èòåëüíîé ñèòóàöèè. Åñëè ñîîòâåòñòâóþùèé áèò ñáðîøåí, òî ïðèâîçíèêíîâåíèè èñêëþ÷åíèÿ áóäåò èíèöèèðîâàíî âíóòðåííåå ïðåðûâàíèå(ñì.
4.2.2). Åñëè æå áèò óñòàíîâëåí, èñêëþ÷èòåëüíàÿ ñèòóàöèÿ ñ÷èòàåòñÿ çàìàñêèðîâàííîé è ïðîöåññîð ïðè å¼ âîçíèêíîâåíèè íèêàêèõ ïðåðûâàíèé èíèöèèðîâàòü íå áóäåò; âìåñòî ýòîãî îí ïîñòàðàåòñÿ ñèíòåçèðîâàòü,íàñêîëüêî ýòî âîçìîæíî, ðåëåâàíòíûé ðåçóëüòàò (íàïðèìåð, ïðè äåëåíèèíà íîëü ðåçóëüòàòîì áóäåò ¾áåñêîíå÷íîñòü¿ ñîîòâåòñòâóþùåãî çíàêà; ïðèïîòåðå òî÷íîñòè ðåçóëüòàò îêðóãëèòñÿ äî ìàøèííî-ïðåäñòàâèìîãî ÷èñëàâ ñîîòâåòñòâèè ñ óñòàíîâëåííûì ðåæèìîì îêðóãëåíèÿ, è ò.
ä.)Ïðè âîçíèêíîâåíèè ëþáîé èñêëþ÷èòåëüíîé ñèòóàöèè ñîïðîöåññîðóñòàíàâëèâàåò â åäèíèöó ñîîòâåòñòâóþùèé áèò (ôëàã) â ðåãèñòðå SR. Åñëè ñèòóàöèÿ íå çàìàñêèðîâàíà, ýòîò áèò ïðèãîäèòñÿ îïåðàöèîííîé ñèñòåìå â îáðàáîò÷èêå ïðåðûâàíèÿ, ÷òîáû ïîíÿòü, ÷òî ïðîèçîøëî; åñëè177æå ñèòóàöèÿ çàìàñêèðîâàíà è ïðåðûâàíèÿ íå ïðîèçîéä¼ò, óñòàíîâëåííûåôëàãè ìîæíî èñïîëüçîâàòü â ïðîãðàììå, ÷òîáû îòñëåäèòü âîçíèêøèå èñêëþ÷åíèÿ. Ñëåäóåò ó÷èòûâàòü, ÷òî ýòè ôëàãè ñàìè ïî ñåáå íèêîãäà íåñáðàñûâàþòñÿ, èõ ìîæíî ñáðîñèòü òîëüêî ÿâíî, è ýòî äåëàåòñÿ êîìàíäîéfclex.
Êîìàíäû äëÿ âçàèìîäåéñòâèÿ ñ ðåãèñòðàìè CR è SR ìû ïîäðîáíîðàññìîòðèì â 6.7.3. 6.7.2. Ïàðàëëåëüíîå âûïîëíåíèå è êîìàíäà waitÑîïðîöåññîð, ÿâëÿÿñü ëîãè÷åñêè îáîñîáëåííîé ÷àñòüþ ïðîöåññîðà, íåèìååò äîñòóïà ê ìàøèííûì êîìàíäàì, íàõîäÿùèìñÿ â ïàìÿòè, è íå óìååòèõ äåêîäèðîâàòü; äåêîäèðîâàíèå êîìàíä îñóùåñòâëÿåò îñíîâíîé ïðîöåññîð, îí æå âûäà¼ò ñîïðîöåññîðó óêàçàíèÿ ê äåéñòâèþ. Ïðè ýòîì ñîïðîöåññîð âûïîëíÿåò êîìàíäû àñèíõðîííî, òî åñòü îñíîâíîé ïðîöåññîð ìîæåòïðîäîëæàòü âûïîëíåíèå ¾ñâîèõ¿ êîìàíä (òàêèõ, ÷üè èìåíà íå íà÷èíàþòñÿ ñ F), íå äîæèäàÿñü ðåçóëüòàòà ðàáîòû ñîïðîöåññîðà.
Ñ îäíîé ñòîðîíû,ýòî ïîçâîëÿåò ïîâûñèòü ýôôåêòèâíîñòü ðàáîòû ïðîãðàìì; ñ äðóãîé ñòîðîíû, òàêàÿ ïàðàëëåëüíàÿ ðàáîòà ìîæåò ñîçäàòü îïðåäåë¼ííûå ïðîáëåìû â äâóõ ñëó÷àÿõ: âî-ïåðâûõ, êîãäà ïîñëåäíàÿ F-êîìàíäà çàïèñûâàåò÷òî-òî â îïåðàòèâíóþ ïàìÿòü, à î÷åðåäíàÿ êîìàíäà îñíîâíîãî ïðîöåññîðà äîëæíà ýòîò ðåçóëüòàò èñïîëüçîâàòü; è, âî-âòîðûõ, êîãäà î÷åðåäíàÿîïåðàöèÿ ñîïðîöåññîðà ïðèâîäèò ê âîçíèêíîâåíèþ èñêëþ÷èòåëüíîé ñèòóàöèè ïðè ýòîì äàëüíåéøàÿ ðàáîòà îñíîâíîé ïðîãðàììû ìîæåò áûòüáåññìûñëåííîé, íî èç-çà àñèíõðîííîãî âûïîëíåíèÿ F-êîìàíä ïðåðûâàíèåìîæåò âîçíèêíóòü, êîãäà îñíîâíàÿ ïðîãðàììà óæå óñïåëà âûïîëíèòü ðÿäèíñòðóêöèé.Äëÿ ñèíõðîíèçàöèè ðàáîòû îñíîâíîãî ïðîöåññîðà ñ àðèôìåòè÷åñêèìñîïðîöåññîðîì èñïîëüçóåòñÿ êîìàíäà fwait èëè ïðîñòî wait (íà ñàìîìäåëå ýòî äâà îáîçíà÷åíèÿ îäíîé è òîé æå ìàøèííîé êîìàíäû).
Ýòà êîìàíäà äîæèäàåòñÿ çàâåðøåíèÿ âñåõ äåéñòâèé, êîòîðûå áûëè àðèôìåòè÷åñêîìó ñîïðîöåññîðó çàäàíû; â òîì ÷èñëå, åñëè â ðåçóëüòàòå ýòèõ äåéñòâèé áûëî èíèöèèðîâàíî ïðåðûâàíèå, òî âûïîëíåíèå êîìàíä ïîñëå waitïðîäîëæèòñÿ óæå ïîñëå âîçâðàòà èç ïðåðûâàíèÿ, åñëè, êîíå÷íî, òàêîâîéâîîáùå ñîñòîèòñÿ (îáû÷íî â ÎÑ Unix ïðåðûâàíèå, èíèöèèðîâàííîå ñîïðîöåññîðîì, ïðèâîäèò ê îòïðàâêå ñèãíàëà SIGFPE òåêóùåìó ïðîöåññó, âðåçóëüòàòå ÷åãî ïðîöåññ çàâåðøàåòñÿ).Èíòåðåñíî, ÷òî ìíîãèå ìíåìîíè÷åñêèå îáîçíà÷åíèÿ êîìàíä ñîïðîöåññîðà íà ñàìîì äåëå ñîîòâåòñòâóþò äâóì ìàøèííûì êîìàíäàì: ñíà÷àëàèä¼ò êîìàíäà wait, çàòåì êîìàíäà, âûïîëíÿþùàÿ íóæíîå äåéñòâèå.Ïðèìåðîì òàêîé ìíåìîíèêè ÿâëÿåòñÿ óæå çíàêîìàÿ íàì fstsw: íà ñàìîì äåëå, ýòî äâå êîìàíäû wait è fnstsw; ïðè íåîáõîäèìîñòè ìîæíîèñïîëüçîâàòü fnstsw îòäåëüíî, áåç îæèäàíèÿ, íî äëÿ ýòîãî íåîáõîäèìîòâ¼ðäî ïîíèìàòü, ÷òî èìåííî âû äåëàåòå. Òî÷íî òàê æå óñòðîåíà êîìàíäà178151413CR15SR1413B C315TW12IC14tag7121111TOP1312tag6109RC108PC976IEM87543210PM UM OM ZM DM IM6543210C2 C1 C0 IR SF PE UE OE ZE DE IE1110tag598tag476tag354tag232tag110tag0Ðèñ.