Смекни!
smekni.com

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

0000030A : 00

0000030B : 62 <——— ïðåäñòàâëåíèå '(R2)'

R2 = 00001000

R15 = 00000305

(00000010) = 00

(00001000) = FF (R2)

Ïîñëå...

R2 = 00001000

R15 = 00000309

(00000010) = 00

(00001000) = 00 <——— 0

Åñòü îïðåäåëåííûé êëàññ ïðîãðàìì, êîòîðûå íàçûâàþòñÿ ïîçèöèîííî-íåçàâèñèìûìè. Îíè ìîãóò áûòü çàãðóæåíû è çàïóùåíû â ëþáîé îáëàñòè ïàìÿòè áåç ïåðåòðàíñëÿöèè, ïåðåëèíêîâêè èëè ìîäèôèêàöèè àäðåñîâ îïåðàíäîâ. Ïðè ïåðåìåùåíèè â ïàìÿòè ïðîãðàììû, èñïîëüçóþùåé êîñâåííî-ðåãèñòðîâûé ðåæèì àäðåñàöèè àäðåñ àäðåñóåìîé ÿ÷åéêè íå èçìåíÿåòñÿ. Åñëè äàííûå â ïàìÿòè ïåðåìåùàþòñÿ âìåñòå ñ ïðîãðàììîé, êàê ýòî ÷àùå âñåãî áûâàåò, òî àäðåñîâàòüñÿ áóäóò ñîâñåì íå òå äàííûå, êîòîðûå äîëæíû áû. ×òî äåëàòü â òàêèõ ñëó÷àÿõ ? Ðàññìîòðèì êàê èñïîëüçîâàòü ñ÷åò÷èê èíñòðóêöèé â ðåæèìå ñî ñìåùåíèåì. Ñîäåðæèìîå ðåãèñòðà ñ÷åò÷èêà èíñòðóêöèé ñêëàäûâàåòñÿ ñî ñìåùåíèåì, êîòîðîå ðàñïîëîæåíî íåïîñðåäñòâåííî â ïîòîêå èíñòðóêöèé. Ïîëó÷åííàÿ ñóììà ÿâëÿåòñÿ àäðåñîì îïåðàíäà. Î÷åâèäíî, ÷òî â ýòîì ñëó÷àå äàííûå áóäóò àäðåñîâàòüñÿ ïðàâèëüíî, òàê êàê åñëè ïîäîáðàòü ñìåùåíèå ðàâíîå ðàçíèöå ìåæäó àäðåñîì îïåðàíäà è àäðåñîì òåêóùåé êîìàíäû, òî ýòà ðàçíîñòü âñåãäà áóäåò ïîñòîÿííîé. Ýòîò ðåæèì àäðåñàöèè íàçûâàåòñÿ îòíîñèòåëüíûì è íà àññåìáëåðå çàïèñûâàåòñÿ ïðîñòî êàê Addr, ãäå Addr - àäðåñ îïåðàíäà. Ðàññìîòðèì âûïîëíåíèå èíñòðóêöèè MOVB 10,(R2)

Äî îïåðàöèè MOVB 10,(R2)

00000305 : 90 ÊÎÏ

00000306 : CF <——— ïðåäñòàâëåíèå '@(R15)'

00000307 : 07 îòðèöàòåëüíîå ñìåùåíèå (309-10),

00000308 : FD ïðåäñòàâëåííîå â äîï. êîäå

00000309 : 62 <——— ïðåäñòàâëåíèå '(R2)'

R2 = 00001000

R15 = 00000305

(00000010) = 00

(00001000) = FF (R2)

Ïîñëå...

R2 = 00001000

R15 = 0000030A <——— + 5

(00000010) = 00

(00001000) = 00 <——— 0

Îòìåòèì, ÷òî ñìåùåíèå â äàííîì ïðèìåðå îòðèöàòåëüíîå è ïðåäñòàâëåíî â äîïîëíèòåëüíîì êîäå. Äëèíà ñìåùåíèÿ è ñîîòâåòñòâóþùèé êîíêðåòíûé êîä ðåæèìà âû÷èñëÿåòñÿ àâòîìàòè÷åñêè íà ýòàïå êîìïèëèðîâàíèÿ. Åñëè èñïîëüçîâàòü ñ÷åò÷èê èíñòðóêöèé â êîñâåííîì ðåæèìå ñî ñìåùåíèåì, òî ïîëó÷èì åùå îäèí ñïîñîá àäðåñàöèè, êîòîðûé íàçûâàåòñÿ êîñâåííî-îòíîñèòåëüíûì. Çäåñü ñóììà ñîäåðæèìîãî ñ÷åò÷èêà èíñòðóêöèé ñêëàäûâàåòñÿ ñî ñìåùåíèåì è ðàññìàòðèâàåòñÿ êàê àäðåñ àäðåñà îïåðàíäà. Äëÿ ïðîãðàììèñòà ýòîò ðåæèì ÿâëÿåòñÿ ïðîñòî ðåæèìîì êîñâåííîé àäðåñàöèè ñ èñïîëüçîâàíèåì ïðîèçâîëüíîé ÿ÷åéêè äëÿ õðàíåíèÿ àäðåñà. Êàê è â ïðåäûäóùåì ïðèìåðå ñìåùåíèå äîëæíî áûòü ðàâíî ðàçíèöå ìåæäó àäðåñîì äàííîé ÿ÷åéêè è òåêóùèì ïîëîæåíèåì èíñòðóêöèè. Íà àññåìáëåðå ýòîò ðåæèì îáîçíà÷àåòñÿ @Addr, ãäå Addr - àäðåñ ÿ÷åéêè, â êîòîðîé íàõîäèòñÿ àäðåñ îïåðàíäà. Ðàññìîòðèì èíñòðóêöèþ MOVB @10,(R2):

Äî îïåðàöèè MOVB @10,(R2)

00000305 : 90 ÊÎÏ

00000306 : CC <——— ïðåäñòàâëåíèå '@W^FD7(R15)'

00000307 : 07 îòðèöàòåëüíîå ñìåùåíèå (309-10),

00000308 : FD ïðåäñòàâëåííîå â äîï. êîäå

00000309 : 62 <——— ïðåäñòàâëåíèå '(R2)'

R2 = 00001000

R15 = 00000305

(00000000) = EE (00000010)

(00000010) = 00

(00001000) = FF (R2)

Ïîñëå...

R2 = 00001000

R15 = 0000030A <—— + 5

(00000000) = EE

(00000010) = 00

(00001000) = EE <—— EE

2.11 ÀÄÐÅÑÀÖÈß ÏÅÐÅÕÎÄÎÂ.

Ïîñëåäíèé ñïîñîá àäðåñàöèè, êîòîðûé áóäåò ðàññìîòðåí - ýòî àäðåñàöèÿ ïåðåõîäîâ. Âîò ôîðìàò èíñòðóêöèè óñëîâíîãî ïåðåõîäà:

7 0

ÊÎÄ ÎÏÅÐÀÖÈÈ

ÑÌÅÙÅÍÈÅ

Àäðåñàöèÿ â ýòèõ èíñòðóêöèÿõ îòëè÷àåòñÿ îò âñåõ ðàññìàòðèâàåìûõ òåì, ÷òî çäåñü íåò ñïåöèôèêàòîðà îïåðàíäà. Êàæäàÿ èíñòðóêöèÿ óñëîâíîãî ïåðåõîäà ñîñòîèò èç êîäà îïåðàöèè è ñëåäóþùåãî çà íèì áàéòíîãî ñìåùåíèÿ ñî çíàêîì. Ïðè ôîðìèðîâàíèè àäðåñà ïåðåõîäà ñìåùåíèå ñêëàäûâàåòñÿ ñ ñîäåðæèìûì ñ÷åò÷èêà èíñòðóêöèé ïîäîáíî òîìó, êàê ýòî äåëàëîñü ïðè îòíîñèòåëüíîé àäðåñàöèè. Ïî÷åìó âñåãî 128 áàéò ? Ýòî îáóñëîâëåíî òåì, ÷òî áîëüøèíñòâî ïåðåõîäîâ àäðåñîâàíû ê ÿ÷åéêàì, íàõîäÿùèìñÿ íà íåáîëüøîì ðàññòîÿíèè îò ñàìîé èíñòðóêöèè ïåðåõîäà. Ëèøü â íåêîòîðûõ ñëó÷àÿõ òðåáóåòñÿ èñïîëüçîâàíèå áîëåå ýôôåêòèâíûõ ðåæèìîâ àäðåñàöèè.