А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 38
Текст из файла (страница 38)
×èñëî îáû÷íîé òî÷íîñòè çàíèìàåò â ïàìÿòè 32áèòà, èç êîòîðûõ îäèí èñïîëüçóåòñÿ äëÿ õðàíåíèÿ çíàêà ÷èñëà, âîñåìü äëÿ õðàíåíèÿ ñìåù¼ííîãî ìàøèííîãî ïîðÿäêà (âåëè÷èíà ñìåùåíèÿ 127) è îñòàâøèåñÿ 23 äëÿ õðàíåíèÿ ìàíòèññû. ×èñëî äâîéíîé òî÷íîñòè çàíèìàåò 64 áèòà, ïðè÷¼ì íà ìàøèííûé ïîðÿäîê îòâîäèòñÿ 11 áèò, àíà ìàíòèññó 52, è ñìåùåíèå ìàøèííîãî ïîðÿäêà ñîñòàâëÿåò 1023. Íàêîíåö, ÷èñëî ïîâûøåííîé òî÷íîñòè çàíèìàåò 80 áèò, èç íèõ 15 áèò îòâåäåíîíà ìàøèííûé ïîðÿäîê ñî ñìåùåíèåì 16383, à îñòàâøèåñÿ 64 ñîñòàâëÿþòìàíòèññó, ïðè÷¼ì â ýòîì ôîðìàòå ïðèñóòñòâóåò îäíîáèòîâàÿ öåëàÿ ÷àñòüìàíòèññû (îáû÷íî åäèíèöà).1 Çà èñêëþ÷åíèåì íåñêîëüêèõ îñîáûõ ñëó÷àåâ, î êîòîðûõ ðå÷ü ïîéä¼ò äàëüøå.2 Ñîîòâåòñòâóþùèå àíãëîÿçû÷íûå òåðìèíû single precision, double precision èextended precision167Ìàøèííûé ïîðÿäîê, ñîñòîÿùèé èç îäíèõ íóëåé èëè, íàîáîðîò, èç îäíèõ åäèíèö, ïðåäñòàâëÿåò ñîáîé ïðèçíàê îñîáîãî ñëó÷àÿ.
Ïîðÿäîê, ñîñòîÿùèé èç îäíèõ íóëåé, îçíà÷àåò:• ïðè ìàíòèññå, ñîñòîÿùåé èç îäíèõ íóëåé â çàâèñèìîñòè îò çíàêîâîãî áèòà ëèáî íîëü, ëèáî ¾îòðèöàòåëüíûé íîëü¿ (ýòî ðàçëè÷èåáûâàåò ïîëåçíî, åñëè ðåçóëüòàò î÷åðåäíîé îïåðàöèè ñòîëü ìàë ïîìîäóëþ, ÷òî åãî íåâîçìîæíî ïðåäñòàâèòü â âèäå ÷èñëà ñ ïëàâàþùåé òî÷êîé òîãäà ìû õîòÿ áû ìîæåì ñêàçàòü, êàêîâ áûë çíàêðåçóëüòàòà);• ïðè ìàíòèññå, ñîäåðæàùåé õîòÿ áû îäíó åäèíèöó äåíîðìàëèçîâàííîå ÷èñëî , òî åñòü ÷èñëî íàñòîëüêî ìàëîå ïî ìîäóëþ, ÷òîäàæå ïðè íàèìåíüøåì âîçìîæíîì çíà÷åíèè ìàøèííîãî ïîðÿäêà íèîäèí çíà÷àùèé áèò íå ïîïàë áû â ðàçðÿäû ìàíòèññû.Ïîðÿäîê, ñîñòîÿùèé èç îäíèõ åäèíèö, ìîæåò îçíà÷àòü ñëåäóþùåå:• ïðè ìàíòèññå, ñîñòîÿùåé èç îäíèõ íóëåé ¾áåñêîíå÷íîñòü¿ (ïîëîæèòåëüíóþ èëè îòðèöàòåëüíóþ â çàâèñèìîñòè îò çíàêîâîãî áèòà);• ïðè ïåðâîì áèòå ìàíòèññû, óñòàíîâëåííîì â åäèíèöó (äëÿ 80áèòíûõ ÷èñåë ïðè ïåðâûõ äâóõ áèòàõ ìàíòèññû, óñòàíîâëåííûõ âåäèíèöó), à îñòàëüíûõ áèòàõ ìàíòèññû, óñòàíîâëåííûõ â íîëü, çíàêîâûé áèò, ðàâíûé åäèíèöå, îçíà÷àåò ¾íåîïðåäåë¼ííîñòü¿, à çíàêîâûé áèò, ðàâíûé íóëþ ¾íå-÷èñëî òèïà QNAN¿ (quiet not-anumber); èíîãäà ãîâîðÿò, ÷òî íåîïðåäåë¼ííîñòü åñòü ÷àñòíûé ñëó÷àé QNAN;• ïðè ïåðâîì áèòå ìàíòèññû, ðàâíîì íóëþ (äëÿ 80-áèòíûõ ïðè äâóõïåðâûõ áèòàõ ìàíòèññû, ðàâíûõ 10) è ïðè íàëè÷èè â îñòàëüíîéìàíòèññå åäèíè÷íûõ áèòîâ ¾íå-÷èñëî òèïà SNAN¿;• âñå îñòàëüíûå ñèòóàöèè (íàïðèìåð, ìàíòèññà èç îäíèõ åäèíèö)îçíà÷àþò ¾íåïîääåðæèâàåìîå ÷èñëî¿. 6.2.
Óñòðîéñòâî àðèôìåòè÷åñêîãîñîïðîöåññîðàÀðèôìåòè÷åñêèé ñîïðîöåññîð èìååò âîñåìü 80-áèòîâûõ ðåãèñòðîâ äëÿõðàíåíèÿ ÷èñåë, êîòîðûå ìû óñëîâíî îáîçíà÷èì R0, R1, ..., R7; ðåãèñòðûîáðàçóþò ñâîåîáðàçíûé ñòåê, òî åñòü îäèí èç ðåãèñòðîâ Rn ñ÷èòàåòñÿâåðøèíîé ñòåêà è îáîçíà÷àåòñÿ ST0, ñëåäóþùèé çà íèì îáîçíà÷àåòñÿ ST1è ò. ä., ïðè÷¼ì ñ÷èòàåòñÿ, ÷òî ñëåäîì çà R7 èä¼ò R0 (íàïðèìåð, åñëè R7 âíàñòîÿùèé ìîìåíò îáîçíà÷åí êàê ST4, òî ðîëü ST5 áóäåò èãðàòü ðåãèñòð168R0ST(5)CRR1ST(6)SRR2ST(7)TWR3ST/ST(0)R4ST(1)R5ST(2)R6ST(3)FIPR7ST(4)FDPtop = 3Ðèñ. 6.1. Ðåãèñòðû àðèôìåòè÷åñêîãî ñîïðîöåññîðàR0, ST6 áóäåò â R1 è ò.
ä.) Íà ðèñ. 6.1 ïîêàçàíà ñèòóàöèÿ, êîãäà âåðøèíîé ñòåêà îáúÿâëåí ðåãèñòð R3; ðîëü âåðøèíû ñòåêà ìîæåò èãðàòü ëþáîéèç ðåãèñòðîâ Rn, ïðè÷¼ì ïðè çàíåñåíèè íîâîãî çíà÷åíèÿ â ýòîò ñòåê âñåçíà÷åíèÿ, êîòîðûå òàì óæå õðàíèëèñü, îñòàþòñÿ íà ñâîèõ ìåñòàõ, à ìåíÿåòñÿ òîëüêî íîìåð ðåãèñòðà, èãðàþùåãî ðîëü âåðøèíû, òî åñòü åñëè âñòåê, ïîêàçàííûé íà ðèñóíêå, âíåñòè íîâîå çíà÷åíèå, òî ðîëü âåðøèíû ST0 ïåðåéä¼ò ê ðåãèñòðó R2, ðåãèñòð R3 ñòàíåò îáîçíà÷àòüñÿ ST1, è òàêäàëåå. Ïðè óäàëåíèè çíà÷åíèÿ èç ñòåêà ïðîèñõîäèò îáðàòíîå äåéñòâèå.Îòìåòèì, ÷òî ê ýòèì ðåãèñòðàì ìîæíî îáðàòèòüñÿ òîëüêî ïî èõ òåêóùåìó íîìåðó â ñòåêå, òî åñòü ïî èìåíàì ST0, ST1, ..., ST7. Îáðàòèòüñÿ êíèì ïî èõ ïîñòîÿííûì íîìåðàì (R0, R1, ..., R7) íåëüçÿ, ïðîöåññîð íå äà¼òòàêîé âîçìîæíîñòè.Îáîçíà÷åíèÿ ST0, ST1, ..., ST7 ñîîòâåòñòâóþò ñîãëàøåíèÿì NASM.
 äðóãèõàññåìáëåðàõ èñïîëüçóþòñÿ äðóãèå îáîçíà÷åíèÿ; â ÷àñòíîñòè, MASM è íåêîòîðûåäðóãèå àññåìáëåðû îáîçíà÷àþò ðåãèñòðû àðèôìåòè÷åñêîãî ñîïðîöåññîðà ñ èñïîëüçîâàíèåì êðóãëûõ ñêîáîê: ST(0), ST(1), ..., ST(7), è èìåííî òàêèå îáîçíà÷åíèÿ ÷àùå âñåãî âñòðå÷àþòñÿ â ëèòåðàòóðå. Íå óäèâëÿéòåñü ýòîìó.Ðåãèñòð ñîñòîÿíèÿ SR (state register) ñîäåðæèò ðÿä ôëàãîâ, îïèñûâàþùèõ, êàê ñëåäóåò èç íàçâàíèÿ, ñîñòîÿíèå àðèôìåòè÷åñêîãî ñîïðîöåññîðà. ÷àñòíîñòè, áèòû 13-é, 12-é è 11-é (âñåãî òðè áèòà) ñîäåðæàò ÷èñëî îò0 äî 7, íàçûâàåìîå TOP è ïîêàçûâàþùåå, êàêîé èç ðåãèñòðîâ Rn â íàñòîÿùèé ìîìåíò ñ÷èòàåòñÿ âåðøèíîé ñòåêà.
Ôëàãè C0 (áèò 8), C2 (áèò10) è C3 (áèò 14) ñîîòâåòñòâóþò ïî ñìûñëó ôëàãàì öåíòðàëüíîãî ïðîöåññîðà CF, PF è ZF. Îñòàëüíûå ðàçðÿäû ðåãèñòðà ST óêàçûâàþò íà òàêèåîñîáûå ñèòóàöèè, êàê ïåðåïîëíåíèå èëè àíòèïåðåîïëíåíèå ñòåêà (SF), ïîòåðþ òî÷íîñòè (P), ñëèøêîì áîëüøîé èëè ñëèøêîì ìàëåíüêèé ðåçóëüòàòïîñëåäíåé îïåðàöèè (O è U), äåëåíèå íà íîëü (Z) è äð. Ðåãèñòð óïðàâëåíèÿ CR òàêæå ñîñòîèò èç îòäåëüíûõ ôëàãîâ, íî, â îòëè÷èå îò ðåãèñòðàñòàòóñà, ýòè ôëàãè îáû÷íî óñòàíàâëèâàþòñÿ ïðîãðàììîé è ïðåäíàçíà÷åíû äëÿ óïðàâëåíèÿ ñîïðîöåññîðîì, òî åñòü äëÿ çàäàíèÿ ðåæèìà åãîðàáîòû.
Íàïðèìåð, áèòû 11 è 10 ýòîãî ðåãèñòðà çàäàþò ðåæèì îêðóãëåíèÿ ðåçóëüòàòà îïåðàöèè: 00 ê áëèæàéøåìó ÷èñëó, 01 â ñòîðîíó169óìåíüøåíèÿ, 10 â ñòîðîíó óâåëè÷åíèÿ, 11 â ñòîðîíó íóëÿ (òî åñòüâ ñòîðîíó óìåíüøåíèÿ àáñîëþòíîé âåëè÷èíû). Ðåãèñòð òåãîâ TW ñîäåðæèò ïî äâà áèòà äëÿ îáîçíà÷åíèÿ ñîñòîÿíèÿ êàæäîãî èç ðåãèñòðîâ R0R7:00 ðåãèñòð ñîäåðæèò ÷èñëî, 01 ðåãèñòð ñîäåðæèò íîëü, 10 â ðåãèñòðå íå-÷èñëî (NAN, áåñêîíå÷íîñòü èëè äåíîðìàëèçîâàííîå ÷èñëî), 11 ðåãèñòð ïóñò. Èñõîäíî âñå âîñåìü ðåãèñòðîâ ïîìå÷åíû êàê ïóñòûå, ïî ìåðå äîáàâëåíèÿ ÷èñåë â ñòåê ñîîòâåòñòâóþùèå ðåãèñòðû ïîìå÷àþòñÿ êàêçàïîëíåííûå, ïðè èçâëå÷åíèè ÷èñåë èç ñòåêà ñíîâà êàê ïóñòûå.
Ýòîïîçâîëÿåò îòñëåæèâàòü ïåðåïîëíåíèå è àíòèïåðåïîëíåíèå ñòåêà òàêèåñèòóàöèè, êîãäà â ñòåê çàíîñèòñÿ äåâÿòîå ïî ñ÷¼òó ÷èñëî (êîòîðîå íåêóäàïîìåñòèòü), ëèáî, íàîáîðîò, äåëàåòñÿ ïîïûòêà èçâëå÷ü ÷èñëî èç ïóñòîãîñòåêà. Ýòè òðè ðåãèñòðà ìû ïîäðîáíî ðàññìîòðèì â 6.7.3.Ñëóæåáíûå ðåãèñòðû FIP è FDP ïðåäíàçíà÷åíû äëÿ õðàíåíèÿ àäðåñàè îïåðàíäà ïîñëåäíåé âûïîëíÿåìîé ñîïðîöåññîðîì ìàøèííîé êîìàíäûè èñïîëüçóþòñÿ îïåðàöèîííîé ñèñòåìîé ïðè àíàëèçå ïðè÷èí âîçíèêíîâåíèÿ îøèáî÷íîé (èñêëþ÷èòåëüíîé) ñèòóàöèè.Ìíåìîíè÷åñêèå îáîçíà÷åíèÿ âñåõ ìàøèííûõ êîìàíä, èìåþùèõ îòíîøåíèå ê àðèôìåòè÷åñêîìó ñîïðîöåññîðó, íà÷èíàþòñÿ ñ áóêâû f îò àíãëèéñêîãî oating (ïëàâàþùèé; ñëîâîñî÷åòàíèå ¾ïëàâàþùàÿ òî÷êà¿ ïîàíãëèéñêè çâó÷èò êàê oating point ). Áîëüøèíñòâî òàêèõ êîìàíä íå èìååò îïåðàíäà èëè èìååò îäèí îïåðàíä, íî âñòðå÷àþòñÿ è êîìàíäû ñ äâóìÿîïåðàíäàìè.  êà÷åñòâå îïåðàíäà ìîãóò âûñòóïàòü ðåãèñòðû ñîïðîöåññîðà, îáîçíà÷àåìûå STn, ëèáî îïåðàíäû òèïà ¾ïàìÿòü¿.
Ïðè ýòîì ñîïðîöåññîð óìååò ðàáîòàòü ñ âåùåñòâåííûìè ÷èñëàìè, õðàíÿùèìèñÿ â ïàìÿòèâ ëþáîì èç òð¼õ ôîðìàòîâ, çàäàííûõ ñòàíäàðòîì IEEE-754, ÷òî îçíà÷àåò, ÷òî îïåðàíä òèïà ¾ïàìÿòü¿ äîëæåí áûòü ÷åòûð¼õáàéòíûì (ýòîò ðàçìåð ìîæíî óêàçàòü çíàêîìûì íàì ñëîâîì dword), âîñüìèáàéòíûì èëèäåñÿòèáàéòíûì. Äëÿ îáîçíà÷åíèÿ âîñüìèáàéòíûõ îïåðàíäîâ àññåìáëåðNASM ïðåäóñìàòðèâàåò êëþ÷åâîå ñëîâî qword (îò ñëîâ quadro word, ó÷åòâåð¼ííîå ñëîâî), à äëÿ îáîçíà÷åíèÿ äåñÿòèáàéòíûõ ñëîâî tword (îò tenword ). Åñòü è ñîîòâåòñòâóþùèå ïñåâäîêîìàíäû äëÿ îïèñàíèÿ äàííûõ (dqçàäà¼ò âîñüìèáàéòíîå çíà÷åíèå, dt äåñÿòèáàéòíîå), à òàêæå äëÿ ðåçåðâèðîâàíèÿ íåèíèöèàëèçèðîâàííîé ïàìÿòè (resq ðåçåðâèðóåò çàäàííîå êîëè÷åñòâî âîñüìèáàéòíûõ ýëåìåíòîâ, rest çàäàííîå êîëè÷åñòâîäåñÿòèáàéòíûõ).
Ñàì ñîïðîöåññîð âñå äåéñòâèÿ âûïîëíÿåò ñ ÷èñëàìè ïîâûøåííîé òî÷íîñòè, à ÷èñëà äðóãèõ ôîðìàòîâ èñïîëüçóåò òîëüêî ïðèçàãðóçêå è âûãðóçêå. 6.3. Îáìåí äàííûìè ñ ñîïðîöåññîðîìÊîìàíäà fld (îò ñëîâ oat load ), èìåþùàÿ îäèí îïåðàíä, ïîçâîëÿåòçàíåñòè â ðåãèñòðîâûé ñòåê ÷èñëî èç çàäàííîãî ìåñòà, â êà÷åñòâå êîòî170ðîãî ìîæåò âûñòóïàòü îïåðàíä òèïà ¾ïàìÿòü¿ ðàçìåðà dword, qword èëètword, ëèáî ðåãèñòð STn.
Íàïðèìåð, êîìàíäàfld st0ñîçäà¼ò êîïèþ âåðøèíû ñòåêà, à êîìàíäàfld qword [matrix+ecx*8]çàãðóæàåò â ñòåê èç ìàññèâà matrix, ñîñòîÿùåãî èç âîñüìèáàéòîâûõ ÷èñåë, ýëåìåíò ñ íîìåðîì, õðàíÿùèìñÿ â ðåãèñòðå ECX. Ïðè ýòîì â ðåãèñòðåSR óìåíüøàåòñÿ çíà÷åíèå ÷èñëà TOP, òàê ÷òî âåðøèíà ñòåêà ñäâèãàåòñÿââåðõ, ñòàðàÿ âåðøèíà ïîëó÷àåò èìÿ ST1 è ò. ä.Èçâëå÷ü ðåçóëüòàò èç ñîïðîöåññîðà (ñ âåðøèíû ðåãèñòðîâîãî ñòåêà)ìîæíî êîìàíäàìè fst è fstp, èìåþùèìè îäèí îïåðàíä. ×àùå âñåãî ýòîîïåðàíä òèïà ¾ïàìÿòü¿, íî ìîæíî óêàçàòü è ðåãèñòð èç ñòåêà, íàïðèìåðST6, âàæíî òîëüêî, ÷òî ýòîò ðåãèñòð äîëæåí áûòü ïóñòûì.