Ðåôåðàòû. Ñèñòåìû àäðåñàöèè â Ìèíè- è ÌèêpîÝÂÌ

                                                            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



2012 © Âñå ïðàâà çàùèùåíû
Ïðè èñïîëüçîâàíèè ìàòåðèàëîâ àêòèâíàÿ ññûëêà íà èñòî÷íèê îáÿçàòåëüíà.