Смекни!
smekni.com

Системы адресации в Мини- и МикpоЭВМ (стр. 10 из 14)

Ïðèìåðíî òîæå ñàìîå, ÷òî è áàçîâàÿ àäðåñàöèÿ, îäíàêî çäåñü è èñïîëüçóþòñÿ èíäåêñíûå ðåãèñòðû ( SI,DI ) è ñìåùåíèå çàäàííîå áàéòîì èëè ñëîâîì. Ïðè ôîðìèðîâàíèè 32-ðàçðÿäíûõ àäðåñîâ, â êà÷åñòâå áàçîâîãî èëè èíäåêñíîãî ìîæåò èñïîëüçîâàòüñÿ ëþáîé èç ðåãèñòðîâ EAX, ECX, EDX, EBX, EBP, ESI, EDI.. Äëÿ ïðèìåðà âîçüìåì èíñòðóêöèþ MOV WORD PTR ES:[DI+2],AX, êîòîðàÿ ïî àäðåñó ES:[DI+2] çàøëåò ñëîâî èç AX.

Ðåãèñòðû äî âûïîëíåíèÿ MOV WORD PTR ES:[DI+2],AX

AX = 0099h

DI = 000Dh

ES:000Dh = 0000h (di)

ES:000Fh = 0000h (di+2)

Ïîñëå...

AX = 0099h

DI = 000Dh

ES:000Dh = 0000h

ES:000Fh = 0099h <—— 99h

Àäðåñ ÿ÷åéêè ES:000Fh áûë ïîñ÷èòàí êàê ñîäåðæèìîå DI ïëþñ 2 = F. ×èñëî 99h èç ðåãèñòðà AX óñïåøíî ñêîïèðîâàíî â ýòó ÿ÷åéêó ïàìÿòè.

3.7 ÁÀÇÎÂÎ-ÈÍÄÅÊÑÍÀß ÀÄÐÅÑÀÖÈß.

Ïðè èñïîëüçîâàíèè ýòîãî ñïîñîáà îòíîñèòåëüíûé àäðåñ îáðàçóåòñÿ ïóòåì ñëîæåíèÿ ñîäåðæèìûõ áàçîâîãî ( BX,BP ) è èíäåêñíîãî ( SI,DI ) ðåãèñòðîâ. Íàïðèìåð äëÿ îïåðàöèè MOV AX,[BP+SI] ìû ïîëó÷èì:

Ðåãèñòðû äî âûïîëíåíèÿ MOV AX,[BP+SI]

AX = 00AAh

BP = 0100h

SI = 0050h

DS:0100h = 0001h (bp)

DS:0150h = 0002h (bp+si)

Ïîñëå...

AX = 0002h <—— 02h

BP = 0100h

SI = 0050h

DS:0100h = 0001h

DS:0150h = 0002h

Àäðåñ ÿ÷åéêè DS:0150h ïîëó÷åí ïóòåì ñëîæåíèÿ çíà÷åíèé ðåãèñòðîâ BP è SI, ïîñëå ÷åãî ÷èñëî èç ýòîé ÿ÷åéêè ïàìÿòè áûë çàãðóæåí â ðåãèñòð AX.

3.8 ÁÀÇÎÂÎ-ÈÍÄÅÊÑÍÀß ÀÄÐÅÑÀÖÈß ÑÎ ÑÌÅÙÅÍÈÅÌ.

Ýòî âàðèàíò áàçîâî èíäåêñíîé àäðåñàöèè, ïðè êîòîðîì ê îòíîñèòåëüíîìó àäðåñó ïðèáàâëÿåòñÿ 8- èëè 16-ðàçðÿäíîå ñìåùåíèå. Äîïîëíèòåëüíûå ñïîñîáû àäðåñàöèè ðåàëèçóþòñÿ ïðè èñïîëüçîâàíèè 32-ðàçðÿäíûõ àäðåñîâ, êîãäà çàäàíî ñïåöèàëüíîå ïîëå (SIB) â êîäå êîìàíäû. Òîãäà âîçìîæíû êîíñòðóêöèè òèïà [EAX+EBX], [EAX+EAX], [ECX+EDX],  êà÷åñòâå èíäåêñíîãî ðåãèñòðà ìîæíî èñïîëüçîâàòü ëþáîé ðåãèñòð êðîìå ESP. Ñîäåðæèìîå ýòîãî ðåãèñòðà óìíîæàåòñÿ íà ìàñøòàáíûé êîýôôèöèåíò F ò.å. ñäâèãàåòñÿ âëåâî íà ÷èñëî ðàçðÿäîâ 0,1,3 èëè 4. Çíà÷åíèå F çàâèñèò îò ðàçìåðà äàííûõ. Äëÿ ïðèìåðà ðàññìîòðèì èíñòðóêöèþ MOV EAX,[EAX+EAX].

Ðåãèñòðû äî âûïîëíåíèÿ MOV EAX,[EAX+EAX]

EAX = 0010h

DS:0010h = 000Ah (eax)

DS:0020h = 000Bh (eax+eax)

Ïîñëå...

EAX = 000Bh <—— 0Bh

DS:0010h = 000Ah

DS:0020h = 000Bh

Áàçîâûé àäðåñ áåðåòñÿ èç EAX, ñêëàäûâàåòñÿ ñî ñìåùåíèåì èç EAX è äâîéíîå ñëîâî ïî àäðåñó DS:0020h çàíîñèòñÿ â EAX.

3.9 ÈÍÄÅÊÑÍÀß ÀÄÐÅÑÀÖÈß Ñ ÌÀÑØÒÀÁÈÐÎÂÀÍÈÅÌ

Ïðè èñïîëüçîâàíèè ýòîãî ñïîñîáà àäðåñàöèè îòíîñèòåëüíûé àäðåñ ôîðìèðóåòñÿ ïðè ñëîæåíèè ìàñøòàáèðîâàííîãî èíäåêñà ( ñîäåðæèìîãî èíäåêñíîãî ðåãèñòðà ) è 32-ðàçðÿäíîãî ñìåùåíèÿ. Ïîÿñíèì èäåþ ìàñøòàáèðîâàíèÿ èíäåêñà: ñîäåðæèìîå èíäåêñíîãî ðåãèñòðà óìíîæàåòñÿ íà ìàñøòàáíûé êîýôôèöèåíò, ÷òîáû ïðàâèëüíî àäðåñîâàòü äàííûå ðàçìåðîì áîëåå îäíîãî áàéòà. Äëÿ ïðèìåðà ðàññìîòðèì ôðàãìåíò ïðîãðàììû, îñóùåñòâëÿþùåé ðàáîòó ñ öåïî÷êîé äâîéíûõ-ñëîâ.

Start: jmp Begin

Var dd 5 dup (0)

Begin:

mov edi,2 ; 1

mov [Var+edi*4],12345678h ; 2

Ïåðåìåííàÿ Var ïðåäñòàâëÿåò ñîáîé ìàññèâ èç 5 32-ðàçðÿäíûõ ñëîâ.  ñòðîêå 1 ìû çàíîñèì â èíäåêñíûé ðåãèñòð 2, èìåÿ ââèäó îáðàáîòêó âòîðîãî ýëåìåíòà ìàññèâà, à äàëåå â ñòðîêå 2 ìû çàíîñèì âî âòîðîé ýëåìåíò ÷èñëî 1234567h. Íà ïàñêàëå ýòî âûãëÿäåëî-áû êàê Y[2]:=$1234567 Åñëè áû ìû íå ïðîèçâåëè ìàñøòàáèðîâàíèå, òî ÷èñëî 1234567h áûëî-áû çàíåñåíî ïî àäðåñó [Y+2], à ïðè ìàñøòàáèðîâàíèè ðåàëüíûé àäðåñ áûë âû÷èñëåí êàê [Y+2*4] ò.å. [Y+8] è ÷èñëî ïîïàëî "ïî àäðåñó". Èñïîëüçîâàíèå ìàñøòàáèðîâàíèÿ èìååò îãðîìíóþ ðîëü ïðè ðàáîòå ñ ìàññèâàìè ñëîâ è äâîéíûõ ñëîâ, èçáàâëÿÿ ïðîãðàììèñòà îò íåîáõîäèìîñòè äîïîëíèòåëüíîãî èíäåêñèðîâàíèÿ ïåðåìåííûõ è ðàáîòû ñ óäâîåííûìè è ó÷åòâåðåííûìè èíäåêñàìè ýëåìåíòîâ. Âñå ýòî çà íåãî âûïîëíÿåò ïðîöåññîð, ñîêðàùàÿ è ðàçìåð êîäà è ñêîðîñòü åãî âûïîëíåíèÿ.

3.10 ÁÀÇÎÂÎ-ÈÍÄÅÊÑÍÀß ÀÄÐÅÑÀÖÈß Ñ ÌÀÑØÒÀÁÈÐÎÂÀÍÈÅÌ