Îòíîñèòåëüíûé àäðåñ ôîðìèðóåòñÿ ñëîæåíèåì ìàñøòàáèðîâàííîãî èíäåêñà è áàçû, â êà÷åñòâå êîòîðîé èñïîëüçóåòñÿ ñîäåðæèìîå îäíîãî èç ðåãèñòðîâ EAX,EBX,ECX,EDX,ESI èëè EDI. Ïðèâåäåì ïðèìåð òàêîé àäðåñàöèè äàííûõ: Èíñòðóêöèÿ MOV [EAX+EDI*4],666h ïîìåñòèò ÷èñëî 666h ïî àäðåñó EAX ïëþñ ó÷åòâåðåííîå ñîäåðæèìîå EDI.
Ðåãèñòðû äî âûïîëíåíèÿ MOV [EAX+EDI*4],666h
EAX = 0100h
EDI = 0002h
DS:0100h = 000Ah (eax)
DS:0104h = 000Bh
DS:0108h = 000Ch (eax+edi*4)
Ïîñëå...
EAX = 0100h
EDI = 0002h
DS:0100h = 000Ah (eax)
DS:0104h = 000Bh
DS:0108h = 0666h <—— 666h
Ìàñøòàáèðîâàíèå ïîçâîëèëî àäðåñîâàòü èìåííî 2-å 32-ðàçðÿäíîå ñëîâî, à íå çàïèñàòü ÷èñëî 666h ïî àäðåñó EAX+2 ò.å. 102h, êîòîðûé ïîïàäàåò ïî ñåðåäèíå äâóõ ýëåìåíòîâ ìàññèâà.
3.11 ÁÀÇÎÂÎ-ÈÍÄÅÊÑÍÀß ÀÄÐÅÑÀÖÈß ÑÎ ÑÌÅÙÅÍÈÅÌ È ÌÀÑØÒÀÁÈÐÎÂÀÍÈÅÌ
Ýòîò ñïîñîá àäðåñàöèè ðàññìîòðåí â ïóíêòå 3.6 ïðè èñïîëüçîâàíèè 32-ðàçðÿäíîé àäðåñàöèè. Ïîýòîìó ïðèâåäåì ëèøü ïðèìåð èíñòðóêöèè è îïèøåì åå äåéñòâèÿ. Èíñòðóêöèÿ INC [EAX+EDI*4+12345678h] óâåëè÷èò íà åäèíèöó ÷èñëî, àäðåñ êîòîðîãî âû÷èñëÿåòñÿ, êàê áàçîâûé ïëþñ 32-ðàçðÿäíîå ñìåùåíèå 12345678h è ïëþñ ìàñøòàáèðîâàííûé ïî îñíîâàíèþ 4 èíäåêñ, ñîäåðæàùèéñÿ â ðåãèñòðå EDI.
3.12 ÎÒÍÎÑÈÒÅËÜÍÀß ÀÄÐÅÑÀÖÈß
Îòíîñèòåëüíàÿ àäðåñàöèÿ èñïîëüçóåòñÿ â ìèêðîïðîöåññîðå 80386 ïðè âûïîëíåíèè ðÿäà êîìàíä óïðàâëåíèÿ ( óñëîâíûå è áåçóñëîâíûå ïåðåõîäû, âûçîâû ïîäïðîãðàìì, óïðàâëåíèå öèêëàìè è ò.ä. ), ÷òîáû àäðåñîâàòü ÿ÷åéêó ïàìÿòè, ñîäåðæàùóþ ñëåäóþùóþ êîìàíäó. Ïðè ýòîì ñïîñîáå àäðåñ ôîðìèðóåòñÿ êàê ñóììà ñîäåðæèìîãî ðåãèñòðà EIP(IP) ( instruction pointer - óêàçàòåëü èíñòðóêöèè ), ñîîòâåòñòâóþùåãî òåêóùåé êîìàíäå, è 8-, 16- èëè 32-ðàçðÿäíîãî ñìåùåíèÿ, îïðåäåëÿþùåãî ïîëîæåíèå ñëåäóþùåé êîìàíäû, îòíîñèòåëüíî òåêóùåé. Íàïðèìåð ðàññìîòðèì îïåðàöèþ áåçóñëîâíîãî ïåðåõîäà â ïðèâåäåííîì ôðàãìåíòå:
.
.
mov ax,5
jmp @1
sub ax,ax
@1: mov bx,ax
.
.
Áåçóñëîâíûé ïåðåõîä áóäåò ïðåäñòàâëåí êàê JMP 02, ò.å. íà 2 áàéòà âïåðåä, ïîñëå èíñòðóêöèè. SUB AX,AX çàíèìàåò â ïàìÿòè ñëîâî, çíà÷èò ïåðåõîä áóäåò ïåðåäàí íà êîìàíäó MOV BX,AX ò.å. ïî àäðåñó CS:IP+2. (Ýòî íåìíîãî óïðîùåííûé ïðèìåð âíóòðèñåãìåíòíîãî ïåðåõîäà. Íà ñàìîì äåëå ïðè ïåðåõîäàõ ìåíåå ÷åì íà 128 áàéò èñïîëüçóåòñÿ êîðîòêèé ïåðåõîä EB??90, ãäå ?? - ýòî ðàçìåð êîäà êîòîðûé íàäî ïðîïóñòèòü + 1 áàéò. Äîïîëíèòåëüíûé áàéò ïðèáàâëÿåòñÿ çà ñ÷åò êîäà 90h ñëåäóþùåãî çà ñìåùåíèåì. Ýòîò êîä ïðåäñòàâëÿåò ñîáîé êîä èíñòðóêöèè NOP ( no operation ), ïðèñóòñòâèå åãî àáñîëþòíî áåñïîëåçíî, íî ñëîæèëîñü èñòîðè÷åñêè, è áîëüøå íå èñïðàâëÿëîñü. Áàéò ?? - ýòî áàéò ñî çíàêîì, òàê ÷òî ïåðåõîä âîçìîæåí êàê âïåðåä, òàê è íàçàä. À âîò ïðè ïåðåõîäàõ áîëåå ÷åì íà 127 áàéò èñïîëüçóåòñÿ êîìàíäà E9???? , îïèñàííàÿ âûøå ).
4. ÇÀÊËÞ×ÅÍÈÅ. ÑÐÀÂÍÈÒÅËÜÍÛÉ ÀÍÀËÈÇ ÑÈÑÒÅÌ ÀÄÐÅÑÀÖÈÈ ÈÑÏÎËÜÇÓÅÌÛÕ Â CM1700 È Â ÏÝÂÌ ÍÀ ÁÀÇÅ ÏÐÎÖÅÑÑÎÐÀ 80386.
 äâóõ ïðåäûäóùèõ ðàçäåëàõ ìû ïðèâåëè ïðèìåðû è îïèñàëè îñíîâíûå ñïîñîáû àäðåñàöèè, èñïîëüçóåìûå â ìàøèíàõ äâóõ ðàçíûõ ñåìåéñòâ - ìèíè- è ìèêðîÝÂÌ. Êîíå÷íî ýòî íå âñå, ÷òî ìîæíî ñêàçàòü î ñèñòåìàõ àäðåñàöèè äëÿ êîìïüþòåðîâ ýòèõ ñåìåéñòâ, òåì íå ìåíåå îñíîâíûå ñïîñîáû çàäàíèÿ àäðåñîâ è àäðåñàöèè îïåðàíäîâ áûëè ðàññìîòðåíû è ìîæíî ïîïûòàòüñÿ ïðîàíàëèçèðîâàòü, ñðàâíèòü è ïðèâåñòè ïðèìåðû èñïîëüçîâàíèÿ òåõ ñïîñîáîâ àäðåñàöèè, êîòîðûå áûëè îïèñàíû.
Äëÿ íà÷àëà, ðàññìîòðèì ñàìûå ïðîñòûå ñïîñîáû àäðåñàöèè, òàêèå êàê ðåãèñòðîâàÿ, ïðÿìàÿ, íåïîñðåäñòâåííàÿ è êîðîòêîãî ëèòåðàëà. Ïðî ðåãèñòðîâóþ àäðåñàöèþ òðóäíî íàïèñàòü áîëüøå, ÷åì óæå áûëî íàïèñàíî. Åñòåñòâåííî, ÷òî ýòîò ñïîñîá àäðåñàöèè ïîääåðæèâàåòñÿ è íà ÑÌ1700 è 80386 ïðîöåññîðîì, êàê âïðî÷åì âîîáùå âñåìè ïðîöåññîðàìè ñåìåéñòâà 80õ86 è ìíîãèìè äðóãèìè ïðîöåññîðàìè, êîòîðûå èìåþò ðåãèñòðîâóþ ïàìÿòü. Íåñìîòðÿ íà ïðîñòîòó ýòîãî ñïîñîáà àäðåñàöèè, îí äîñòàòî÷íî ÷àñòî èñïîëüçóåòñÿ äëÿ ìàíèïóëÿöèè ðåãèñòðàìè, èõ î÷èñòêè, ìîäèôèêàöèè èõ ñîäåðæèìîãî. Ðåãèñòðîâàÿ ïàìÿòü îòëè÷àåòñÿ î÷åíü áîëüøîé ñêîðîñòüþ, è ïîýòîìó áîëüøèíñòâî âû÷èñëåíèé, îñîáåííî íåñëîæíûõ ïðîãðàììèñòû ïûòàþòñÿ äåëàòü â ýòèõ ðåãèñòðàõ.  íèõ ïîìåùàþò íà÷àëüíûå çíà÷åíèÿ, ïðîèçâîäÿò âû÷èñëåíèÿ, ìîäèôèêàöèþ è êàê-òî èñïîëüçóþò ïîëó÷åííûå ðåçóëüòàòû. Äëÿ âñåõ ýòèõ äåéñòâèé åñòåñòâåííûì ÿâëÿåòñÿ ïðèìåíåíèå èìåííî ðåãèñòðîâîãî ñïîñîáà àäðåñàöèè. Áîëüøèì ïîäñïîðüåì ðåãèñòðîâîìó ñïîñîáó àäðåñàöèè ÿâëÿåòñÿ ðåæèì íåïîñðåäñòâåííîé àäðåñàöèè. Êîíå÷íî â îñíîâíîì îí èñïîëüçóåòñÿ äëÿ çàãðóçêè â ðåãèñòðû íà÷àëüíûõ çíà÷åíèé, çàðàíåå èçâåñòíûõ àäðåñîâ, ñðàâíåíèÿ ñ êîíñòàíòîé è òàê äàëåå. Íî åñëè êîïíóòü ÷óòü ãëóáæå, òî ýòîò ñïîñîá àäðåñàöèè äàåò åùå ìíîæåñòâî óäîáñòâ. Íàïðèìåð äëÿ ïåðåõîäà ïî çàðàíåå èçâåñòíîìó àäðåñó ïðåäñòàâëåííîìó â âèäå ñåãìåíòà ñî ñìåùåíèåì ìîæíî èñïîëüçîâàòü òàêîé êîä: