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 ÁÀÇÎÂÎ-ÈÍÄÅÊÑÍÀß ÀÄÐÅÑÀÖÈß Ñ ÌÀÑØÒÀÁÈÐÎÂÀÍÈÅÌ
Îòíîñèòåëüíûé àäðåñ ôîðìèðóåòñÿ ñëîæåíèåì ìàñøòàáèðîâàííîãî èíäåêñà è áàçû, â êà÷åñòâå êîòîðîé èñïîëüçóåòñÿ ñîäåðæèìîå îäíîãî èç ðåãèñòðîâ EAX,EBX,ECX,EDX,ESI èëè EDI. Ïðèâåäåì ïðèìåð òàêîé àäðåñàöèè äàííûõ: Èíñòðóêöèÿ MOV [EAX+EDI*4],666h ïîìåñòèò ÷èñëî 666h ïî àäðåñó EAX ïëþñ ó÷åòâåðåííîå ñîäåðæèìîå EDI.
Ñòðàíèöû: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20