1. Âûáîðêà êîìàíä.
Ñåãìåíòíûé ðåãèñòð CS ( Code Segment )
Îòíîñèòåëüíûé àäðåñ EIP(IP) ( Instruction Pointer )
2. Îáðàùåíèå ê ñòåêó.
Ñåãìåíòíûé ðåãèñòð SS ( Stack Segment )
Îòíîñèòåëüíûé àäðåñ ESP(SP) ( Stack Pointer )
3. Àäðåñàöèÿ îïåðàíäà.
Ñåãìåíòíûé ðåãèñòð DS èëè (CS,SS,ES,FS,GS)
Îòíîñèòåëüíûé àäðåñ EA
4. Àäðåñàöèÿ ýëåìåíòà ñòðîêè-èñòî÷íèêà.
Îòíîñèòåëüíûé àäðåñ ESI(SI)
5. Àäðåñàöèÿ ýëåìåíòà ñòðîêè-ïðèåìíèêà.
Ñåãìåíòíûé ðåãèñòð ES
Îòíîñèòåëüíûé àäðåñ EDI(DI)
6. Àäðåñàöèÿ îïåðàíäà ñ èñïîëüçîâàíèåì â êà÷åñòâå áàçîâîãî ðåãèñòðà EBP(BP) èëè ESP(SP).
Ñåãìåíòíûé ðåãèñòð SS èëè (CS,DS,ES,FS,GS)
Ýôôåêòèâíûé àäðåñ îïåðàíäà EA ÿâëÿåòñÿ 16- èëè 32-ðàçðÿäíûì è ôîðìèðóåòñÿ â çàâèñèìîñòè îò çíà÷åíèÿ îïðåäåëåííûõ ïîëåé â ïðåäñòàâëåíèè êîìàíäû.  îáùåì ñëó÷àå EA îáðàçóåòñÿ ïóòåì ñëîæåíèÿ òðåõ êîìïîíåíò:
· ñîäåðæèìîãî áàçîâîãî ðåãèñòðà EBP(BP) èëè EBX(BX);
· ñîäåðæèìîãî èíäåêñíîãî ðåãèñòðà ESI(SI) èëè EDI(DI);
· 8-, 16- èëè 32-ðàçðÿäíîãî ñìåùåíèÿ, çàäàííîãî íåïîñðåäñòâåííî â êîìàíäå.
 ðàçíûõ ñëó÷àÿõ äëÿ ôîðìèðîâàíèÿ EA èñïîëüçóþòñÿ ëèáî âñå ëèáî ÷àñòü ýòèõ ñëàãàåìûõ. Òåïåðü ðàññìîòðèì êîíêðåòíûå ñïîñîáû àäðåñàöèè.
3.1 ÍÅÏÎÑÐÅÄÑÒÂÅÍÍÀß ÀÄÐÅÑÀÖÈß.
 êà÷åñòâå îïåðàíäà èñïîëüçóåòñÿ îäèí, äâà èëè ÷åòûðå ïîñëåäíèõ áàéòà êîìàíäû. Òàêîé ñïîñîá àäðåñàöèè ðåàëèçóåòñÿ ïðè âûïîëíåíèè ðÿäà êîìàíä ïåðåñûëêè (MOV, PUSH), àðèôìåòè÷åñêèõ îïåðàöèÿõ (ADD, ADC, SUB, SBB, CMP, IMUL), è ëîãè÷åñêèõ (AND, OR, XOR, TEST). Ðàññìîòðèì ïðîñòîé ïðèìåð - óìíîæåíèå ñîäåðæèìîãî ðåãèñòðà íà êîíñòàíòó:
Ðåãèñòðû äî âûïîëíåíèÿ IMUL AX,5
AX = 10
Ïîñëå...
AX = 50
3.2 ÐÅÃÈÑÒÐÎÂÀß ÀÄÐÅÑÀÖÈß.
Ïðè ýòîì ñïîñîáå àäðåñàöèè îïåðàíäîì áåðåòñÿ ñîäåðæèìîå ðåãèñòðà. Íàïðèìåð äëÿ îïåðàöèè çàíåñåíèÿ íà ñòåê ðåàëèçàöèÿ ðåãèñòðîâîãî ñïîñîáà àäðåñàöèè áóäåò âûãëÿäåòü êàê PUSH DS.
Ðåãèñòðû äî âûïîëíåíèÿ PUSH DS
DS = 5678h
SP = FFFEh
SS:FFFE = 0000h
DS = 5678
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20