А.В. Столяров - Программирование на языке ассемблера NASM для ОС Unix (1110582), страница 6
Текст из файла (страница 6)
Äàëüøå áóäåò 00000011,00000100 è òàê äàëåå; íî â êàêîé-òî ìîìåíò âî âñåõ èìåþùèõñÿ ðàçðÿäàõîêàæóòñÿ åäèíèöû, òàê ÷òî ïðèáàâëÿòü äàëüøå áóäåò íåêóäà: 11111111;ýòî äâîè÷íîå ïðåäñòàâëåíèå ÷èñëà 255 (28 − 1). Åñëè òåïåðü ïðèáàâèòüåù¼ åäèíèöó, âìåñòî ÷èñëà 256 ìû ïîëó÷èì ¾âñå íóëè¿, òî åñòü ïðîñòîíîëü; ïðîèçîøåë óæå çíàêîìûé íàì ïåðåíîñ â íåñóùåñòâóþùèé ðàçðÿä.Âîîáùå, ïðè èñïîëüçîâàíèè äëÿ ïðåäñòàâëåíèÿ öåëûõ ïîëîæè-òåëüíûõ ÷èñåë ïîçèöèîííîé íåñìåøàííîé ñèñòåìû ñ÷èñëåíèÿïî îñíîâàíèþ N è îãðàíè÷åíèè êîëè÷åñòâà ðàçðÿäîâ ÷èñëîì kìàêñèìàëüíîå ÷èñëî, êîòîðîå ìû ìîæåì ïðåäñòàâèòü, ñîñòàâëÿåò N k − 1; òàê, â íàøåì ïðèìåðå ñî ñ÷¼ò÷èêîì áûëî ïÿòü ðàçðÿäîâ äåñÿ-òè÷íîé ñèñòåìû, è ìàêñèìàëüíûì ÷èñëîì îêàçàëîñü 99999 = 105 − 1, à âïðèìåðå ñ âîñüìèáèòíîé ÿ÷åéêîé ñèñòåìà èñïîëüçîâàëàñü äâîè÷íàÿ, ðàçðÿäîâ áûëî âîñåìü, òàê ÷òî ìàêñèìàëüíûì ÷èñëîì îêàçàëîñü 28 −1 = 255.19 1.3.2.
Çíàêîâûå ÷èñëà; äîïîëíèòåëüíûé êîäÏîñìîòðèì òåïåðü, êàê áûòü, åñëè íóæíû íå òîëüêî ïîëîæèòåëüíûå÷èñëà. ßñíî, ÷òî íóæåí êàêîé-òî äðóãîé ñïîñîá èíòåðïðåòàöèè êîìáèíàöèé äâîè÷íûõ ðàçðÿäîâ, òàêîé, ÷òîáû êàêèå-òî èç êîìáèíàöèé ñ÷èòàëèñüïðåäñòàâëåíèåì îòðèöàòåëüíûõ ÷èñåë. Áóäåì â òàêèõ ñëó÷àÿõ ãîâîðèòü,÷òî ÿ÷åéêà èëè îáëàñòü ïàìÿòè õðàíèò çíàêîâîå öåëîå ÷èñëî, â îòëè÷èåîò ïðåäûäóùåãî ñëó÷àÿ, êîãäà ãîâîðÿò î áåççíàêîâîì öåëîì ÷èñëå.Íà çàðå âû÷èñëèòåëüíîé òåõíèêè äëÿ ïðåäñòàâëåíèÿ îòðèöàòåëüíûõöåëûõ ÷èñåë ïûòàëèñü èñïîëüçîâàòü ðàçíûå ïîäõîäû, íàïðèìåð, õðàíèòü çíàê ÷èñëà êàê îòäåëüíûé ðàçðÿä. Îêàçàëîñü, îäíàêî, ÷òî ïðè ýòîìíåóäîáíî ðåàëèçîâûâàòü äàæå ñàìûå ïðîñòûå îïåðàöèè ñëîæåíèå èâû÷èòàíèå, ïîòîìó ÷òî ïðèõîäèòñÿ ó÷èòûâàòü çíàêîâûé áèò îáîèõ ñëàãàåìûõ. Ïîýòîìó ñîçäàòåëè êîìïüþòåðîâ äîñòàòî÷íî áûñòðî ïðèøëè êèñïîëüçîâàíèþ òàê íàçûâàåìîãî äîïîëíèòåëüíîãî êîäà 12 .
Åñëè îòðèöàòåëüíûå ÷èñëà ïðåäñòàâëÿòü ýòèì ñïîñîáîì, ñëîæåíèå è âû÷èòàíèåðåàëèçóåòñÿ íà àïïàðàòíîì óðîâíå àáñîëþòíî îäèíàêîâî âíå çàâèñèìîñòè îò çíàêîâ ñëàãàåìûõ è äàæå îò ñàìîãî ôàêòà èõ ¾çíàêîâîñòè¿: ìûìîæåì ïî-ïðåæíåìó ðàññìàòðèâàòü âñå âîçìîæíûå áèòîâûå êîìáèíàöèèêàê ïðåäñòàâëåíèå íåîòðèöàòåëüíûõ ÷èñåë (òî åñòü âåðíóòüñÿ ê áåççíàêîâîé àðèôìåòèêå), è ñõåìàòè÷åñêè ñëîæåíèå è âû÷èòàíèå îò ýòîãî íåèçìåíÿòñÿ. Áîëüøå òîãî, îòïàäàåò âîîáùå íàäîáíîñòü â îòäåëüíîì ýëåêòðîííîì óñòðîéñòå äëÿ âû÷èòàíèÿ: îïåðàöèÿ âû÷èòàíèÿ ìîæåò áûòü ðåàëèçîâàíà êàê îïåðàöèÿ ïðèáàâëåíèÿ ÷èñëà, êîòîðîìó ñíà÷àëà ñìåíèëèçíàê, ïðè÷¼ì ýòî, êàê íè ïàðàäîêñàëüíî, ðàáîòàåò è äëÿ áåççíàêîâûõ÷èñåë.×òîáû ïîíÿòü, êàê óñòðîåí äîïîëíèòåëüíûé êîä, âåðí¼ìñÿ ê íàøåìó ïðèìåðó ñ ìåõàíè÷åñêèì ñ÷¼ò÷èêîì.  áîëüøèíñòâå ñëó÷àåâ òàêèåðîëèêîâûå öåïî÷êè óìåþò êðóòèòüñÿ êàê âïåð¼ä, òàê è íàçàä, è åñëèïðîêðóòêà âïåð¼ä äàâàëà íàì ïðèáàâëåíèå åäèíèöû, òî ïðîêðóòêà íàçàäáóäåò âûïîëíÿòü âû÷èòàíèå åäèíèöû.
Ïóñòü òåïåðü ó íàñ âñå ðîëèêè âûñòàâëåíû íà íîëü è ìû îòêðó÷èâàåì ñ÷¼ò÷èê íàçàä. Ðåçóëüòàòîì ýòîãîáóäåò 99999; îíî è ïîíÿòíî, âåäü êîãäà ìû ê 99999 ïðèáàâèëè åäèíèöó,òî ïîëó÷èëîñü 00000, à òåïåðü ìû ïðîäåëàëè îáðàòíóþ îïåðàöèþ. Ãîâîðÿò, ÷òî ó íàñ ïðîèçîøåë çà¼ì èç íåñóùåñòâóþùåãî ðàçðÿäà : êàêè â ñëó÷àå ñ ïåðåíîñîì â íåñóùåñòâóþùèé ðàçðÿä, åñëè áû ó íàñ áûëåù¼ îäèí ðîëèê, âñ¼ áû áûëî ïðàâèëüíî (íàïðèìåð, 100000 − 1 = 99999),íî åãî íåò.
Òî æå ñàìîå ïðîèñõîäèò è â äâîè÷íîé ñèñòåìå: åñëè âî âñåõðàçðÿäàõ ÿ÷åéêè áûëè íóëè (00000000) è ìû âû÷ëè åäèíèöó, ïîëó÷èìâñå åäèíèöû: 11111111; åñëè òåïåðü ñíîâà ïðèáàâèòü åäèíèöó, ìû ñíîâà12 Àíãëèéñêèé òåðìèí two's complement, òî åñòü ¾äâîè÷íîå äîïîëíåíèå¿; íàäîñêàçàòü, ÷òî íè÷åãî íîâîãî â èñïîëüçîâàíèè ýòîãî ìåòîäà íå áûëî, ìåòîä äåñÿòè÷íûõ äîïîëíåíèé èñïîëüçîâàë åù¼ Áëåç Ïàñêàëü äëÿ âûïîëíåíèÿ âû÷èòàíèé íà ñâîåìàðèôìîìåòðå.20ïîëó÷èì íóëè âî âñåõ ðàçðÿäàõ.
Ýòî ëîãè÷íî ïðèâîäèò íàñ ê èäåå èñïîëüçîâàòü â êà÷åñòâå ïðåäñòàâëåíèÿ ÷èñëà -1 åäèíèöû âî âñåõðàçðÿäàõ äâîè÷íîãî ÷èñëà, ñêîëüêî áû íè áûëî ó íàñ òàêèõ ðàçðÿäîâ.Òàê, åñëè ìû ðàáîòàåì ñ âîñüìèðàçðÿäíûìè ÷èñëàìè, 11111111 ó íàñ òåïåðü îçíà÷àåò -1, à íå 255; åñëè ìû ðàáîòàåì ñ øåñòíàäöàòèðàçðÿäíûìè÷èñëàìè, 1111111111111111 òåïåðü áóäåò îáîçíà÷àòü, îïÿòü-òàêè, -1, àíå 65535, è òàê äàëåå.Ïðîäîëæàÿ îïåðàöèþ ïî âû÷èòàíèþ åäèíèöû íàä âîñüìèðàçðÿäíîéÿ÷åéêîé, ìû ïðèä¼ì ê çàêëþ÷åíèþ, ÷òî äëÿ ïðåäñòàâëåíèÿ ÷èñëà -2íóæíî èñïîëüçîâàòü 11111110 (ðàíüøå ýòî áûëî ÷èñëî 254), äëÿ ïðåäñòàâëåíèÿ -3 11111101 (ðàíüøå ýòî áûëî 253), è òàê äàëåå.
Èíà÷åãîâîðÿ, ìû âîëþíòàðèñòñêè îáúÿâèëè ÷àñòü êîìáèíàöèé äâîè÷íûõ ðàçðÿäîâ ïðåäñòàâëÿþùèìè îòðèöàòåëüíûå ÷èñëà âìåñòî ïîëîæèòåëüíûõ,ïðè÷¼ì âñåãäà íîâîå (îòðèöàòåëüíîå) çíà÷åíèå êîìáèíàöèè ðàçðÿäîâ ïîëó÷àåòñÿ èç ñòàðîãî (ïîëîæèòåëüíîãî) ïóò¼ì âû÷èòàíèÿ èç íåãî ÷èñëà256: 255 − 256 = −1, 254 − 256 = −2 è ò. ä. (÷èñëî 256 ïðåäñòàâëÿåò ñîáîé28 , à íàøè ðàññóæäåíèÿ âåðíû òîëüêî äëÿ ÷àñòíîãî ñëó÷àÿ ñ âîñüìèðàçðÿäíûìè ÷èñëàìè; â îáùåì ñëó÷àå èç ñòàðîãî çíà÷åíèÿ íóæíî âû÷èòàòü÷èñëî 2n , ãäå n èñïîëüçóåìàÿ ðàçðÿäíîñòü).
Îñòà¼òñÿ âîïðîñ, â êàêîéìîìåíò îñòàíîâèòüñÿ, òî åñòü ïåðåñòàòü ñ÷èòàòü ÷èñëà îòðèöàòåëüíûìè;èíà÷å, óâë¼êøèñü, ìû ìîæåì äîéòè äî 00000001 è çàÿâèòü, ÷òî ýòî âîâñåíå 1, à -255. Ïðèíÿòî ñëåäóþùåå ñîãëàøåíèå: åñëè íàáîð äâîè÷íûõðàçðÿäîâ ðàññìàòðèâàåòñÿ êàê ïðåäñòàâëåíèå çíàêîâîãî ÷èñëà,òî îòðèöàòåëüíûìè ñ÷èòàþòñÿ êîìáèíàöèè, ñòàðøèé áèò êîòîðûõ ðàâåí 1, à îñòàëüíûå êîìáèíàöèè ñ÷èòàþòñÿ ïîëîæèòåëüíûìè.Òàêèì îáðàçîì, íàèáîëüøåå ïî ìîäóëþ îòðèöàòåëüíîå ÷èñëî áóäåò ïðåäñòàâëåíî îäíîé åäèíèöåé â ñòàðøåì ðàçðÿäå è íóëÿìè âî âñåõ îñòàëüíûõ;â âîñüìèáèòíîì ñëó÷àå ýòî 10000000, -128.
Åñëè èç ýòîãî ÷èñëà âû÷åñòüåäèíèöó, ïîëó÷èòñÿ 01111111; ýòà êîìáèíàöèÿ (ñòàðøèé íîëü, îñòàëüíûå åäèíèöû) ñ÷èòàåòñÿ ïðåäñòàâëåíèåì íàèáîëüøåãî çíàêîâîãî ÷èñëàè äëÿ âîñüìèáèòíîãî ñëó÷àÿ ïðåäñòàâëÿåò, êàê íåñëîæíî âèäåòü, ÷èñëî127. Êàê âû óæå äîãàäàëèñü, ïðèáàâëåíèå åäèíèöû ê ýòîìó ÷èñëó ñíîâà äàñò íàèáîëüøåå ïî ìîäóëþ îòðèöàòåëüíîå. Ïåðåõîä ÷åðåç ãðàíèöóìåæäó êîìáèíàöèÿìè 011...11 è 100...00 äëÿ çíàêîâîé öåëî÷èñëåííîéàðèôìåòèêè13 ïðåäñòàâëÿåò ñîáîé àíàëîã ïåðåíîñà è çàéìà äëÿ íåñóùåñòâóþùåãî ðàçðÿäà, êîòîðûé ìû íàáëþäàëè â àðèôìåòèêå áåççíàêîâîé,íî íàçûâàåòñÿ ýòà ñèòóàöèÿ èíà÷å: ïåðåïîëíåíèå .Èìåííî òàêîå, à íå êàêîå-ëèáî äðóãîå ðàñïîëîæåíèå ãðàíèöû ïåðåïîëíåíèÿ äà¼ò äâå ïðèÿòíûå âîçìîæíîñòè. Âî-ïåðâûõ, çíàê ÷èñëà ìîæíîîïðåäåëèòü, âçÿâ îò íåãî âñåãî îäèí (ñòàðøèé) áèò.
Âî-âòîðûõ, îêàçûâàåòñÿ î÷åíü ïðîñòîé îïåðàöèÿ ñìåíû çíàêà ÷èñëà. ×òîáû ñìåíèòü çíàê13 Òî åñòü êîãäà ñóììà äâóõ ïîëîæèòåëüíûõ îêàçûâàåòñÿ îòðèöàòåëüíîé è íàîáîðîò.21÷èñëà íà ïðîòèâîïîëîæíûé ïðè èñïîëüçîâàíèè äîïîëíèòåëüíîãî êîäà, äîñòàòî÷íî ñìåíèòü çíà÷åíèÿ âî âñåõ ðàçðÿäàõ íà ïðîòèâîïîëîæíûå, à ê ïîëó÷åííîìó çíà÷åíèþ ïðèáàâèòü åäèíèöó.Íàïðèìåð, ÷èñëî 5 ïðåäñòàâëÿåòñÿ ñëåäóþùèì âîñüìèáèòíûì çíàêîâûìöåëûì: 00000101. ×òîáû ïîëó÷èòü ïðåäñòàâëåíèå ÷èñëà -5, ìû ñíà÷àëàèíâåðòèðóåì âñå ðàçðÿäû, ïîëó÷àåì 11111010; òåïåðü ïðèáàâëÿåì åäèíèöó è ïîëó÷àåì 11111011, ýòî è åñòü ïðåäñòàâëåíèå ÷èñëà -5. Äëÿ íàãëÿäíîñòè ïðîäåëàåì ñìåíó çíàêà åù¼ ðàç: èíâåðòèðóåì âñå áèòû â ïðåäñòàâëåíèè ÷èñëà -5, ïîëó÷àåì 00000100, ïðèáàâëÿåì åäèíèöó, ïîëó÷àåì00000101, òî åñòü ñíîâà ÷èñëî 5, ÷òî è òðåáîâàëîñü.
Êàê íåñëîæíî óáåäèòüñÿ, äëÿ ïðåäñòàâëåíèÿ íóëÿ îïåðàöèÿ ñìåíû çíàêà èíâàðèàíòíà, òîinv.+1åñòü íîëü îñòà¼òñÿ íóë¼ì: 00000000 −−→ 11111111 −−→ 00000000.Òàêàÿ æå ñèòóàöèÿ íåñêîëüêî íåîæèäàííî âîçíèêàåò äëÿ ÷èñëà -128 (â âîñüìèáèòíîì ñëó÷àå) èëè, ãîâîðÿ âîîáùå, äëÿ ìàêñèìàëüíîãî ïî ìîäóëþ îòðèöà+1inv.òåëüíîãî ÷èñëà çàäàííîé ðàçðÿäíîñòè: 100000000 −−→ 01111111 −−→ 10000000.Ýòî îáóñëîâëåíî îòñóòñòâèåì â äàííîé ðàçðÿäíîñòè ïîëîæèòåëüíîãî ÷èñëà ñ òàêèì æå ìîäóëåì, òî åñòü ïðè ïðèìåíåíèè îïåðàöèè çàìåíû çíàêà ê êîìáèíàöèè100...00 ïðîèñõîäèò ïåðåïîëíåíèå. 1.4.
Èñòîðèÿ ïëàòôîðìû i386 1971 ãîäó êîðïîðàöèÿ Intel âûïóñòèëà â ñâåò ñåìåéñòâî ìèêðîñõåì,ïîëó÷èâøåå íàçâàíèå MCS-4. Îäíà èç ýòèõ ìèêðîñõåì, Intel 4004, ïðåäñòàâëÿëà ñîáîé ïåðâûé â ìèðå çàêîí÷åííûé öåíòðàëüíûé ïðîöåññîð íàîäíîì êðèñòàëëå, ò. å., èíà÷å ãîâîðÿ, ïåðâûé â èñòîðèè ìèêðîïðîöåñ14 ýòîãî ïðîöåññîðà ñîñòàâëÿëî ÷åòûðå áèòà. Ãîäñîð . Ìàøèííîå ñëîâîñïóñòÿ Intel âûïóñòèëà âîñüìèáèòíûé ïðîöåññîð Intel 8008, à â 1974 ãîäó áîëåå ñîâåðøåííûé Intel 8080. Èíòåðåñíî, ÷òî 8080 èñïîëüçîâàëèíûå êîäû îïåðàöèé, íî ïðè ýòîì ïðîãðàììû, íàïèñàííûå íà ÿçûêå àññåìáëåðà äëÿ 8008, ìîãëè áûòü áåç èçìåíåíèé îòòðàíñëèðîâàíû è äëÿ8080.
Àíàëîãè÷íóþ ¾ñîâìåñòèìîñòü ïî èñõîäíîìó êîäó¿ êîíñòðóêòîðûIntel ïîääåðæàëè è äëÿ ïîÿâèâøåãîñÿ â 1978 ãîäó 16-áèòíîãî ïðîöåññîðàIntel 8086. Âûïóùåííûé ãîäîì ïîçæå ïðîöåññîð Intel 8088 ïðåäñòàâëÿëñîáîé ïðàêòè÷åñêè òàêîå æå óñòðîéñòâî, îòëè÷àþùååñÿ òîëüêî ðàçðÿäíîñòüþ âíåøíåé øèíû (äëÿ 8088 îíà ñîñòàâëÿëà 8 áèò, äëÿ 8086 16áèò). Èìåííî ïðîöåññîð 8088 áûë èñïîëüçîâàí â êîìïüþòåðå IBM PC,äàâøåì íà÷àëî ìíîãî÷èñëåííîìó è íåâåðîÿòíî ïîïóëÿðíîìó15 ñåìåéñòâó14 Íàïîìíèì, ÷òî ìàøèííûì ñëîâîì íàçûâàåòñÿ ïîðöèÿ èíôîðìàöèè, îáðàáàòûâàåìàÿ ïðîöåññîðîì â îäèí ïðè¼ì.15 Ïîïóëÿðíîñòü IBM-ñîâìåñòèìûõ ìàøèí ïðåäñòàâëÿåò ñîáîé ÿâëåíèå âåñüìà íåîäíîçíà÷íîå; ìíîãèå äðóãèå àðõèòåêòóðíûå ðåøåíèÿ, èìåâøèå ñóùåñòâåííî ëó÷øèé äèçàéí, íå ñìîãëè âûæèòü íà ðûíêå, çàòîïëåííîì IBM-ñîâìåñòèìûìè êîìïüþòåðàìè,22ìàøèí, äî ñèõ ïîð íàçûâàåìûõ IBM PC-ñîâìåñòèìûìè èëè ïðîñòîIBM-ñîâìåñòèìûìè .Ïðîöåññîðû 8086 è 8088 íå ïîääåðæèâàëè çàùèòû ïàìÿòè è íå èìåëè ðàçäåëåíèÿ êîìàíä íà îáû÷íûå è ïðèâèëåãèðîâàííûå, òàê ÷òî çàïóñòèòü ìóëüòèçàäà÷íóþ îïåðàöèîííóþ ñèñòåìó íà êîìïüþòåðàõ ñ ýòèìè ïðîöåññîðàìè áûëî íåâîçìîæíî.