• Aucun résultat trouvé

1 Architektura procesora MC68000

N/A
N/A
Protected

Academic year: 2022

Partager "1 Architektura procesora MC68000"

Copied!
74
0
0

Texte intégral

(1)

PROGRAMOWANIE MC68K W J EZYKU ASEMBLERA

,

 c Marek Wnuk 7 grudnia 2000

1 Architektura procesora MC68000

Nasze rozwa˙zania na temat architektury mikroprocesora MC68000 rozpoczniemy od przedstawienia og´olnej bu- dowy wewnetrznej komputera. Na tym tle przyjrzymy si, e dok ladniej strukturze wewn, etrznej MC68000 pr´obuj, ac, dociec, dlaczego przyjeto poszczeg´olne rozwi, azania. Om´owimy sposoby wewn, etrznego reprezentowania danych, w mikroprocesorze i tryby adresowania pozwalajace na dost, ep do tych danych.,

1.1 Podstawowe sk ladniki sprz etowe mikrokomputera

,

W typowych komputerach mo˙zna z grubsza wydzieli´c trzy elementy sk ladowe:

jednostke centraln, a,,

pamie´c,,

uk lady wej´scia/wyj´scia.

Przep lyw danych nastepuje pomi, edzy ka˙zd, a par, a wymienionych cz, e´sci sk ladowych komputera. Jednostka cen-, tralna steruje praca obu pozosta lych element´, ow.

1.1.1 Jednostka centralna

Jednostka centralna, zwana procesorem lub CPU, stanowi ”m´ozg” komputera. Wykonuje ona odpowiednie (zlecone jej) operacje. Zlecenie (komenda) mo˙ze mie´c r´o˙zna posta´c. We´zmy jako przyk lad dodawanie dw´och, liczb:

Z = A + B

Mo˙zna to zapisa´c w pseudoangielskiej notacji:

ADD X to Y and SAVE the result toZ

co w uproszczonym symbolicznym zapisie mo˙zna przedstawi´c:

X + Y -> Z

co czytamy: ”dodaj liczbe, X do liczby Y i wynik prze´slij do Z”.

Komenda ta, po przet lumaczeniu na zrozumia ly dla CPU kod binarny winna spowodowa´c nastepuj, ace czynno´sci, procesora:

pobranie liczby X do CPU

pobranie liczby Y do CPU

dodanieX iY

z lo˙zenie wyniku wZ

(2)

Takie komendy tworza wewn, etrzny j, ezyk maszyny i s, a zwane instrukcjami maszynowymi. Sk ladaj, a si, e z dw´och, cze´sci:,

kodu operacji (opcode) ADD,

warto´sci danych do przetwarzania.

Ciag takich rozkaz´, ow maszynowych nazywamy programem w jezyku maszynowym (machine language program)., Zestaw wszystkich rozkaz´ow maszynowych, kt´ore dany komputer mo˙ze wykonywa´c zwie sie list, a rozkaz´, ow procesora (instruction set). W zale˙zno´sci od typu procesora mo´ze sie ona zawiera´c od kilkunastu do paruset, instrukcji. Procesor mo˙ze dostawa´c sie do danych przechowywanych w pami, eci na wiele r´o˙znych sposob´ow., Sposoby te zwie sie trybami adresowania (addressing modes). Ich ilo´s´c jest r´o˙zna dla r´o˙znych procesor´ow. Z, punktu widzenia programisty istotne sa r´ownie˙z sposoby reprezentacji danych dost, epne w danym komputerze., 1.1.2 Pamie´,c

Opisane wcze´sniej instrukcje maszynowe i zwiazane z nimi dane musz, aby´c przechowywane w pami, eci systemu, komputerowego. W architekturze von Neumann’a kom´orki pamieci s, a identyczne dla instrukcji (programu) i, dla danych. Kom´orka pamieci jest czasem zwana s lowem (word), a ilo´s´c bit´ow sk ladaj, acych si, e na s lowo zwie, sie rozmiarem s lowa (wordsize). Ka˙zdej kom´, orce pamieci jest jednoznacznie przyporz, adkowana liczba zwana, adresem s lowa. Adresy liczy sie zazwyczaj od 0 do pewnej g´ornej granicy, zale˙znej od wielko´sci pami, eci., 1.1.3 Wykonywanie instrukcji

Wr´o´cmy do przyk ladu dodawania dw´och liczb. Jak wspomniano, zar´owno dane, jak i instrukcje musza by´c, zakodowane i umieszczone w kom´orkach pamieci. Rozwa˙zmy, jakie kom´, orki sa niezb, edne do przechowania, programu realizujacego dodawanie oraz danych bbior, acych w nim udzia l.,

Przede wszystkim, kod operacji (ADD) musi zajmowa´c s lowo (co najmniej jedno). Aby m´oc pobra´c liczby X i Y, trzeba zna´c miejsca, w kt´orych sa one przechowywane, czyli adresy kom´, orek na te liczby zarezerwowanych.

Wreszcie, wynik (Z) musi zosta´c wpisany w okre´slone miejsce w pamieci, co wymaga kolejnego adresu. Wida´c, wiec, ˙ze kompletny rozkaz maszynowy w naszym prostym przyk ladzie sk lada´c si, e musi z co najmniej czterech, s l´ow:

kod operacji,

adres pierwszej liczby,

adres drugiej liczby,

adres wyniku.

Opr´cz tego w wykonaniu tego rozkazu biora udzia l trzy kom´, orki danych przeznaczone naX,Y iZ.

Kom´orki zawierajace kolejne elementy rozkazu umieszczone s, a w pami, eci sekwencyjnie (maj, a kolejne adresy)., Dzieki temu wprowadzenie rejestru zwanego licznikiem rozkaz´, ow (PC – Program Counter) pozwala unikna´c, pamietania dodatkowo w rozkazie maszynowym adresu nastepnego rozkazu do wykonania. Nawiasem m´owiac,

(3)

W powy˙zszym przyk ladzie cykl wykonania rozkazy maszynowego (cykl rozkazowy) wyglada lby nast, epuj, aco:, 1. pobranie kom´orki pamieci o adresie zawartym w, PCi zwiekszenie, PC;

2. zdekodowanie pobranej warto´sci jako kodu rozkazu (ADD);

3. wykonanie rozkazuADD:

(a) pobranie adresu pierwszej liczby z kom´orki wskazywanej przez PCi zwiekszenie, PC;

(b) pobranie adresu drugiej liczby z kom´orki wskazywanej przez PCi zwiekszenie, PC;

(c) pobranie adresu wyniku z kom´orki wskazywanej przezPCi zwiekszenie, PC;

(d) pobranie warto´sci pierwszej liczby z kom´orki o adresie pierwszym;

(e) pobranie warto´sci drugiej liczby z kom´orki o adresie drugim;

(f) wykonanie dodawania;

(g) wpisanie sumy do kom´orki o adresie trzecim.

Po takim cykluPCwskazuje na nastepn, a kom´, orke w ci, agu zawieraj, acym program, kt´ora powinna zawiera´c kod, nastepnego rozkazu maszynowego. Nie ma przeszk´od, by cykl zosta l powt´, orzony, oczywi´scie dla kolejnych roz- kaz´ow programu. W przypadku konieczno´sci zmiany sekwencyjnego sposobu wykonania programu pos lugujemy sie rozkazem skoku (GOTO), kt´orego argumentem jest adres kom´, orki pamieci zawieraj, acej kod maszynowy, nastepnego rozkazu. Jego wykonanie polega po prostu na wstawieniu tego adresu do, PC.

Opisany powy˙zej spos´ob pracy procesora dotyczy tzw. maszyn tr´ojadresowych.  Latwo sprawdzi´c, ˙ze bezpo´srednie umieszczenie trzech adres´ow w rozkazie wyd lu˙za kod maszynowy programu. We´zmy za przyk lad procesor o 16–

bitowym s lowie i 32–bitowym adresie. Na powy˙zszy rozkaz trzeba zu˙zy´c:

ADD adr.1 adr.2 adr.3

1 + 2 + 2 + 2 = 7

s l´ow. Oczywi´scie, nie wszystkie rozkazy korzystaja z trzech adres´ow. Aby nie marnowa´c miejsca w pami, eci,, wprowadzono zmienna d lugo´s´c instrukcji. Procesor w chwili dekodowania kodu operacji (punkt 2) okre´sla, ile, adres´ow musi pobra´c dla danego typu rozkazu (np. dlaGOTOtylko jeden).

Maszyny dwuadresowe posiadaja rejestr roboczy dla danych, zwany akumulatorem. Sum, e dw´och liczb mo˙zna, wtedy umie´sci´c w tym rejestrze, a nastepnie zapisa´c w pami, eci dodatkowym rozkazem, SAVE:

ADD adr.1 adr.2 (adr.1) + (adr.2) -> AKUMULATOR SAVE adr.3 (AKUMULATOR) -> adr.3

Prosze zwr´oci´c uwag, e, ˙ze, AKUMULATORjest rejestrem, ale jest traktowany jako adres pewnej kom´orki (w niekt´orych typach mikroprocesor´ow akumulatory sa rzeczywi´scie w taki spos´ob zaimplementowane).,

Nastepny krok to ograniczenie ilo´sci adres´ow do jednego:,

LOAD adr.1 (adr.1) -> AKUMULATOR

ADD adr.2 (AKUMULATOR) + (adr.2) -> AKUMULATOR SAVE adr.3 (AKUMULATOR) -> adr.3

co wymaga nowego rozkazuLOAD.

Mo˙zna sprawdzi´c, ˙ze obie powy˙zsze implementacje sa pozornie mniej efektywne od tr´ojadresowej (odpowiednio:, 8 i 9 s l´ow). Poniewa˙z jednak najcze´sciej mamy do czynienia z ci, agami operacji wykonywanych na wsp´olnych, argumentach, proporcje te zmieniaja si, e na korzy´s´c. Prosz, e rozwa˙zy´c sumowanie, N liczb. Sekwencyjny program w maszynie tr´ojadresowej mia lby d lugo´s´c (N1)×7 s l´ow, a w maszynie jednoadresowej: 3 + ((N1)×3) + 3.

Ju˙z dlaN= 3 kr´otszy jest program dla maszyny jednoadresowej.

Powy˙zsze przyk lady maja tylko uzmys lowi´c problemy doboru architektury jednostki centralnej przed prezen-, tacja konkretnych rozwi, aza´, n, przyjetych w mikroprocesorach M68K firmy Motorola, kt´ore b, edziemy omawia´c, szczeg´o lowo.

(4)

1.1.4 Uk lady wej´sciowo–wyj´sciowe

Uk lady wej´scia/wyj´scia komputer´ow sa szczeg´olnie wa˙zne ze wzgl, edu na konieczno´s´c wsp´o lpracy z otoczeniem, (w tym z cz lowiekiem). Obs luga urzadze´, n zewnetrznych odbywa si, e przy pomocy rozkaz´, ow specjalnych, lub przy pomocy takich samych rozkaz´ow, jakimi mo˙zna operowa´c na kom´orkach pamieci. Wi, a˙ze si, e to bezpo´srednio z, dwoma podstawowymi koncepcjami umieszczenia uk lad´ow we/wy.

Jedna z nich polega na wydzieleniu osobnej magistrali we/wy (isolated i/o). Procesor odwo luje sie do urz, adze´, n zewnetrznych przez specjalne rozkazy, kt´ore mog, a zajmowa´c nieco mniej miejsca i dzia la´c nieco szybciej, ni˙z, odwo lania do danych w pamieci. Zazwyczaj ilo´s´c tych rozkaz´, ow jest ograniczona (w drastycznym przypadku do dw´och: INiOUT). Dodajmy, ˙ze czesto oddzielenie magistrali we/wy polega na wydzieleniu tylko cz, e´sci sygna l´, ow sterujacych (w skrajnym przypadku – jedmego:, memory/io) i wsp´olnym u˙zytkowaniem linii adresowych i danych przes pamie´c i uk lady we/wy.,

Druga koncepcja polega na traktowaniu uk lad´ow we/wy tak samo jak zwyk lych kom´orek pamieci (memory-, mapped i/o). Tu mo˙zna u˙zywa´c wszystkich instrukcji do operowania na urzadzeniach zewn, etrznych, co z, nawiazk, a rekompensuje straty spowodowane wi, eksz, a d lugo´sci, a kodu pojedynczego rozkazu. Warto w tym, miejscu zwr´oci´c uwage, ˙ze nie zawsze da sie skorzysta´c z wygodnych operacji przeznaczonych do dzia lania na, kom´orkach pamieci. Prosz, e rozwa˙zy´c przyk lad jakiejkolwiek operacji modyfikuj, acej s lowo typu RMW (read-, modify-write). Zadzia la ona poprawnie tylko wtedy, gdy rejestr uk ladu we/wy zachowuje sie jak kom´, orka pamieci, to znaczy pozwala odczytywa´c wpisan, a do´, n warto´s´c. W wielu przypadkach rzeczywistych tak nie jest. Dla oszczedno´sci przestrzeni adresowej, pod tym samym adresem bywaj, a umieszczane dwa r´o˙zne rejestry, dostepne w zale˙zno´sci od kierunku przesy lania danych. Mo˙ze to by´c na przyk lad rejestr steruj, acy w czasie za-, pisu, a rejestr stanu przy odczycie. Wykonanie na takim rejestrze operacji np. negacji spowodowa loby zupe lnie niezamierzony skutek: do rejestru sterujacego zosta lby wpisany zanegowany obraz rejestru stanu.,

1.2 Organizacja M68000

Procesor MC68000, kt´orym bedziemy si, e zajmowa´c w dalszym ci, agu, jest maszyn, a o systemie we/wy adreso-, wanym wsp´olnie z pamieci, a. Wykorzystuje instrukcje jedno– i dwuadresowe. W tym (nominalnie szesnasto-, bitowym) procesorze wszystkie wewnetrzne rejestry adresowe i danych s, a trzydziestodwubitowe. Pozwoli lo to, na rozw´oj rodziny a˙z do obecnego 68060 bez zmieniania garnituru rejestr´ow, tylko przez wprowadzanie drob- nych rozszerze´n nie wp lywajacych na zgodno´s´c z pierwszym modelem. Lista rozkaz´, ow tego procesora zawiera tylko 56 symbolicznych nazw instrukcji (mnemonics). Jej obszerno´s´c zawdzieczamy g l´, ownie du˙zej ilo´sci tryb´ow adresowania (16), kt´ore u latwiaja implementowanie r´o˙znych struktur danych i oprogramowywanie system´ow, operacyjnych. Poniewa˙z wiekszo´s´c tryb´ow adresowania mo˙ze by´c zastosowana do wi, ekszo´sci instrukcji, oraz, ze wzgledu na symetryczny zestaw rejestr´ow, mo˙zna m´owi´c o, prawieortogonalnej strukturze listy rozkaz´ow 68000.

1.2.1 Rejestry

Procesor 68000 odr´o˙znia sie wyra´znie od swoich poprzednik´ow, jak r´ownie˙z od wsp´o lczesnych sobie rywali ilo´sci, a, uniwersalnych rejestr´ow i szeroka gam, a dost, epnych tryb´ow adresowania, kt´ore z tych rejestr´ow korzystaj, a., Wszystkie uniwersalne rejestry, zar´owno danych (Di), jak i adresowe (Aj), maja d lugo´s´c 32 bit´ow. Podobnie,

(5)

USP (A7) A6 A5 A4 A3 A2 A1 A0

31 16 15 0

D7 D6 D5 D4 D3 D2 D1 D0

31 16 15 8 7 0

SSP (A7’)

X N Z V C CCR T S I2 I1 I0 X N Z V C SR

Rysunek 1: Rejestry procesora MC68000

(6)

itp. Dzieki ich wykorzystaniu w r´o˙znych trybach adresowania mo˙zna zaoszcz, edzi´c wielokrotnego pobierania, z pamieci pe lnego adresu (w tym przypadku 4 bajty), poprzestaj, ac na znacznie kr´otszym adresie wzgl, ednym, wewnatrz struktury (tablicy). Daje to podw´ojn, a oszcz, edno´s´c: 4 bajty kodu i czas ich pobierania z pami, eci przy, dekodowaniu instrukcji.

Rejestr adresowy A7 ma wyznaczona dodatkow, a, wa˙zn, a funkcj, e. Pe lni rol, e wska´znika stosu dla wywo la´, n podprogram´ow i obs lugi zdarze´n specjalnych (exceptions). Przy wywo laniu podprogramu (JSR - Jump to SubRoutine) do kom´orek pamieci adresowanych przez zawarto´s´c, A7sk ladowana jest dotychczasowa zawarto´s´c licznika rozkaz´ow (PC), stanowiaca adres, spod kt´orego nale˙za loby pobra´c kod kolejnej instrukcji maszynowej po, rozkazieJSR. Dzieki temu, przy wywo laniu rozkazu zako´, nczenia poprogramu (RTS - ReTurn from Subroutine), stan licznika rozkaz´ow mo˙ze by´c odtworzony i sekwencyjne wykonanie programu podjete na nowo.,

Przy okazji trzeba doda´c, ˙ze procesor 68000 mo˙ze sie znajdowa´c w jednym z dw´och stan´ow:,

tryb pracy u˙zytkownika (user-mode)

tryb pracy systemowy (uprzywilejowany – supervisor-mode)

RejestrA7wystepuje w dw´och wcieleniach:, USP – User Stack PointeriSSP – Supervisor Stack Pointer. W sys- temowym trybie pracy procesor mo˙ze wykonywa´c wszystkie rozkazy i ma dostep do wszystkich zasob´ow (w tym, r´ownie˙z do USP). W trybie pracy u˙zytkownika niekt´ore instrukcje (w szczeg´olno´sci te, przy pomocy kt´orych mo˙zliwe by loby przeprowadzenie procesora w systemowy tryb pracy) staja si, e nielegalne. Uk lad dekodowa-, nia operacji wykrywa to i generuje zdarzenie specjalne odpowiadajace naruszeniu uprzywilejowania (privillege, violation). Podobnie dzieje sie przy pr´obie dost, epu do chronionych zasob´ow (jak na przyk lad, SSP w try- bie u˙zytkownika). Dzieki temu tw´, orca oprogramowania systemowego mo˙ze  latwo skonstruowa´c zabezpieczenia przed b ledami zwyk lych u˙zytkownik´, ow.

Rejestr stanu procesora (SR) ma r´ownie˙z dwa wcielenia. W systemowym trybie pracy dostepny jest w ca lej (16-, bitowej) okaza lo´sci. Zwyk ly u˙zytkownik mo˙ze operowa´c tylko na jego mniej znaczacym bajcie zwanym rejestrem, flagowym (CCR – Condition Code Register). Jeden z bit´ow niedostepnej cz, e´sci, SR(bit 13, zwanyS) decyduje o aktualnym trybie pracy procesora. Mo˙zna wiec porzuci´c tryb systemowy (przez modyfikacj, e rejestru, SR), lecz nie mo˙zna w ten sam spos´ob do´n wr´oci´c. Og´olnie m´owiac, procesor wchodzi w systemowy tryb pracy, tylkow wyniku zdarze´n specjalnych, do kt´orych nale˙za przerwania, b l, edy wykrywane sprz, etowo i restart procesora., 1.2.2 Organizacja pamieci,

Jak ju˙z wspomniano przy omawianiu licznika rozkaz´ow, najmniejsza jednostk, a pami, eci jest o´smiobitowy bajt., Faktyczny rozmiar magistrali danych w procesorze 68000 wynosi 16 bit´ow, wiec r´ownocze´snie mo˙zna po niej, przekazywa´c dwa bajty, wobec czego pamie´c musi by´c dost, epna przez 16-bitow, a bram, e. W czasie jednego, dostepu do pami, eci (cyklu magistrali danych) wystawiany jest jeden adres na magistrali adresowej.  Latwo, zauwa˙zy´c, ˙ze adres A0 nie bierze udzia lu w wyborze 16-bitowego s lowa na magistrali. W zwiazku z tym dwa, kolejne bajty w pamieci tworz, a jedno s lowo. Motorola przyj, e la tzw. leksykaln, a konwencj, e kolejno´sci bajt´ow, w s lowie (im starszy bajt, tym wcze´sniej wystepuje), odwrotn, a w stosunku do konwencji Intela, lecz r´ownie, rozpowszechniona na ´swiecie (prosz, e zwr´oci´c uwag, e, ˙ze jest ona naturalna dla ludzi pisz, acych liczby od lewej, ku prawej stronie, poczawszy od najbardziej znacz, acej cyfry). Z tej konwencji wynika, ˙ze s lowa 16-bitowe, (dla skr´ocenia zapisu bedziemy je dalej nazywali po prostu s lowami – word) sa dostepne na magistrali danych

(7)

1.3 Podstawowe typy danych w M68000

Typy danych stosowane w jezykach wy˙zszego rz, edu, jak Pascal lub C, mo˙zna podzieli´c na podstawowe (proste), i z lo˙zone. Pierwsze z nich maja bezpo´sredni, a implementacj, e w j, ezyku maszynowym, drugie (jak si, e p´o´zniej, przekonamy) czasem te˙z, cho´c na og´o l wymagaja specjalnych technik dla uzyskania efektywnej implementacji,, wykorzystujacych podstawowe typy danych jako elementy sk ladowe.,

Procesory M68K maja nast, epuj, ace podstawowe typy danych:,

bit,

cyfra dziesietna (BCD),,

bajt,

s lowo (16-bitowe),

d lugie s lowo (32-bitowe).

Ka˙zdy z powy˙zszych typ´ow danych posiada w lasne odwzorowanie w pamieci, kt´ora, jak pami, etamy, ma organi-, zacje bajtow, a.,

1.3.1 Bit

Bit mo˙ze mie´c jeda z dw´och warto´sci: 1 lub 0. Mo˙ze by´c umieszczony na dowolnej z o´smiu pozycji w bajcie, (kom´orce pamieci) lub na dowolnej z 32 pozycji w rejestrze danych procesora. Adres wzgl, edny bitu mie´sci si, e, wtedy (odpowiednio) w przedziale 0-7 lub 0-31.

1.3.2 Cyfra dziesietna (BCD),

Binarna reprezentacja cyfr dziesietnych (BCD – Binary Coded Decimal) bywa u˙zywana (raczej rzadko) przy, niekt´orych zastosowaniach mikroprocesor´ow. Polega ona na zapisie pozycyjnym liczb przy podstawie dziesietnej, z r´ownoczesnym naturalnym (binarnym) kodowaniem cyfr dziesietnych. Nie jest to najefektywniejszy spos´ob, kodowania liczb, poniewa˙z na 16-bitowym s lowie mo˙zna zmie´sci´c tylko liczby BCD o zakresie 0 – 9999, podczas gdy binarny kod pozwala zmie´sci´c liczby od 0 do 65535. Ka˙zda cyfra w tym kodzie zajmuje cztery bity. Mamy do dyspozycji dwa warianty liczb BCD: upakowane i nieupakowane. Pierwszy z nich mie´sci w ka˙zdym bajcie pamieci dwie cyfry dziesi, etne, przy czym starsza z nich zajmuje starsz, a cz, e´s´c bajtu, drugi wykorzystuje tylko, mniej znaczac, a po low, e bajtu na jedn, a cyfr, e.,

1.3.3 Bajt

Bajt jest podstawowym elementem, z kt´orego zbudowana jest pamie´c procesor´ow 68000. Mo˙ze on by´c wykorzy-, stany do przechowywania znak´ow (ASCII – American Standard Code for Information Interchange), lub ma lych liczb binarnych (w zakresie od 0 do 281 = 255) zakodowanych naturalnie. Mo˙zna te˙z w bajcie przechowywa´c liczby ze znakiem. Motorola u˙zywa reprezentacji liczb ze znakiem (signed byte) w kodzie uzupe lnienia do 2 (two’s complement). Daje to zakres od27=128 do +271 = +127.

1.3.4 S lowo

Domy´slnym rozmiarem s lowa w procesorach 68000 sa dwa bajty (16 bit´ow). Daje to zakres liczb ca lkowitych bez, znaku (unsigned integers) od 0 do 2161 = 65535, oraz ze znakiem od215=32788 do +2151 = +32787.

Zgodnie z wcze´sniejszymi rozwa˙zaniami dotyczacymi pami, eci, s lowa musz, a by´c umieszczone pocz, awszy od, parzystych adres´ow, starszy bajt s lowa pod adresem parzystym, m lodszy pod nastepnym (nieparzystym)., 1.3.5 D lugie s lowo

Dwa s lowa 16-bitowe tworzy´c moga d lugie s lowo (longword). Zakres liczb ca lkowitych bez znaku wynosi dla, d lugiego s lowa od 0 do 2321 = 4294963295, a ze znakiem od231=2147481648 do +2311 = 2147481647.

Tu r´ownie˙z obowiazuj, a te same uwagi dotycz, ace kolejno´sci bajt´ow i umieszczenia pocz, awszy od adres´ow parzy-, stych.

(8)

1.3.6 Reprezentacja instrukcji

Kod operacji mo˙ze zajmowa´c w s lowie rozkazowym pole o sta lej ilo´sci bit´ow (wielko´sci). Na przyk lad 8-bitowe pole kodu operacji dawa loby 256 mo˙zliwych kod´ow. Poniewa˙z jednak nie ka˙zdy rozkaz wymaga takiej samej ilo´sci argument´ow, a co za tym idzie - dodatkowych bit´ow w s lowie rozkazowym, w procesorach Motoroli rodziny M68K zastosowano zmiennej d lugo´sci pole kodu operacji. Rozpieto´s´c tego pola wynosi od 2 do 16 bit´ow., Kody operacji (opcodes) mo˙zna podzieli´c na:

bezadresowe (implicit address opcodes)

jednoadresowe (single-address opcodes)

p´o ltoraadresowe (one-and-a-half-address opcodes)

dwuadresowe (two-address opcodes)

Odpowiednio dla ka˙zdej z tych kategorii mo˙zemy poda´c reprezentant´ow:

RTS(ReTurn from Subroutine) - powr´ot z przerwania

JMP <ea>(JuMP) - skok do adresu

ADD <ea>,Dn - dodanie zawarto´sci adresu do Dn

MOVE <ea>,<ea>- przes lanie zawarto´sci jednego adresu pod drugi

Operacje bezadresowe nie u˙zywaja informacji adresowej. Rozkazy takie maj, a kody 16-bitowe .Przyk ladowy, rozkazRTS laduje zawart´o´s´c licznika rozkaz´ow (PC) z kom´orki pamieci wskazywanej przez wska˙znik stosu (SP):,

RTS ((SP)) -> PC

Operacje jednoadresowe wykorzystuja 6-bitowe pole w s lowie rozkazowym zwane deskryptorem adresu (effective, address), kt´ore jest w r´o˙zny spos´ob wykorzystywane do tworzenia wynikowego adresu 32-bitowego. Sposoby te, zwane trybami adresowania zostana om´owione w kolejnym rozdziale. Rozkaz, JMP <ea> laduje wynikowy adres otrzymany z<ea>do licznika rozkaz´ow:

JMP <ea> <ea> -> PC

Przyk ladem nastepnej klasy jest, ADD. Ta operacja u˙zywa dw´och argument´ow. Jeden z nich mo˙ze by´c dostepny, przez<ea>analogicznie, jak dla operacji jednoadresowych, a drugimusiby´c w rejestrze danych:

ADD <ea>,Dn (<ea>) + (Dn) -> Dn ADD Dn,<ea> (Dn) + (<ea>) -> <ea>

Operacja dwuadresow, a jest, MOVE. Przesy la ona dane z jednej do drugiej lokacji:

MOVE <eas>,<ead> (<eas>) -> <ead>

Operacje moga specyfikowa´c rozmiar danych, na kt´orych operuj, a. Dost, epne (nie we wszystkich przypadkach), rozmiary to bajt, s lowo i d lugie s lowo.

Reasumujac, s lowo rozkazowe zawiera kod operacji, specyfikacj, e rozmiaru danych, i od zera do dw´och deskryp-,

(9)

1.4 Adresowanie

Podstawowym problemem przy dostepie do danych zawartych w pami, eci jest spos´ob podania adresu, pod, kt´ory chcemy sie zwr´oci´c. Metoda bezpo´srednia, cho´c oczywista, ma jednak podstawow, a wad, e, kt´or, a jest, konieczno´s´c umieszczenia w kodzie maszynowym programu pe lnych adres´ow. Moga one mie´c d lugo´s´c 32 bit´ow, (jak to jest w omawianych procesorach) i przez to zajmowa´c po cztery bajty na adres. Rejestry dostepne w, jednostce centralnej pozwalaja z lagodzi´c ten problem przez tymczasowe przechowywanie najcz, e´sciej potrzebnych, danych. Inna metod, a jest u˙zycie r´o˙znych sposob´ow adresowania, dopasowanych do specyficznych potrzeb. Du˙za, ilo´s´c tryb´ow adresowania w procesorach rodziny M68K Motoroli usprawnia prace program´ow, ale r´ownocze´snie, wymaga od programisty ich zrozumienia i opanowania technik ich stosowania.

Przedstawimy tryby adresowania od najprostszych do najbardziej z lo˙zonych, pos lugujac si, e w miar, e potrzeby, odwo laniami do analogii z jezyka C (kt´orego znajomo´s´c za lo˙zyli´smy na wst, epie).,

Nasze rozwa˙zania dotyczace tryb´ow adresowania b, edziemy ilustrowa´c przyk ladami. We´zmy instrukcj, e:, MOVE.W <skad>,<dokad>

przesy lajac, a s lowo dwubajtowe (.W) z miejsca okre´slonego specyfikacj, a,skaddo miejsca okre´slonego przezdokad.

Zawarto´s´c ´zr´od la nie ulega zmianie, w miejscu przeznaczenia dwubajtowe s lowo zostaje zastapione warto´sci, a, taka, jak, a ma ´zr´, od lo, a rejestr flagowy (CCR) zostanie odpowiednio zmodyfikowany.

InstrukcjaMOVE.Wjest zakodowana nastepuj, aco:,

bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 1 1 ‘---v---’ ‘---v---’

kod rozmiar adres przeznaczenia adres zrodla operacji danych (dokad - destination) (skad - source)

Kod operacjiMOVEzajmuje tylko dwa bity (00), rozmiar danych jest te˙z dwubitowy ( 01 - bajt, 11 - slowo, 10 - d lugie s lowo). Adresy ´zr´od la i przeznaczenia, sa okre´slone na sze´sciobitowych polach w s lowie zawieraj, acym kod, maszynowy instrukcjiMOVE.W. Pole to sk lada sie z dw´och trzybitowych cz, e´sci. Jedna z nich, zwana jest trybem, (Mode), a druga stanowi numer rejestru (Register). Nie wszystkie tryby adresowania u˙zywaja rejestr´ow. Dla, nich zarezerwowano wsp´olna warto´s´c pola trybu (%111), przy kt´orej pole rejestru stanowi w la´sciwy wyr´o˙znik, trybu adresowania. W ten spos´ob jednostka centralna po pobraniu pierwszego s lowa rozkazu mo˙ze ustali´c jednoznacznie tryby, przy pomocy kt´orych zaadresowano argumenty operacji. Oczywi´scie, wiekszo´s´c tryb´ow, bedzie wymaga la pobrania dalszych s l´, ow sk ladajacych si, e na pe lny rozkaz.,

(10)

1.4.1 Tryb bezpo´sredni rejestru danych (data register direct)

Tryb ten umo˙zliwia dostep do danych zawartych w rejestrach danych procesora. Pole trybu ma warto´s´c, %000, a w polu rejestru podany jest numer wybranego rejestru danych. Adres efektywny odnosi sie bezpo´srednio do, rejestru danych (nie ma dostepu do pami, eci):,

EA=Dn W naszym przyk ladzie:

MOVE.W D1,D2 (D1) -> D2

koduje sie:,

3 4 0 1

___ ___ ___ ___

’ ‘ ’ ‘’ ‘’ ‘

00 11 010 000 000 001 -- -- --- --- --- ---

| | | | | |__rejestr zrodlowy nr 1 \

| | | | | > skad

| | | | |______tryb bezposredni rejestru danych /

| | | |

| | | |__________tryb bezposredni rejestru danych \

| | | > dokad

| | |______________rejestr przeznaczenia nr 2 /

| |

| |_________________rozmiar danych - slowo (.W)

|

|____________________kod instrukcji MOVE

Jak wida´c, ta instrukcja zajmuje tylko jedno s lowo, co daje jednoczesna oszcz, edno´s´c miejsca w pami, eci programu, i czasu zu˙zytego na jej wykonanie (tylko jeden dostep do pami, eci).,

(11)

1.4.2 Tryb bezpo´sredni rejestru adresowego (address register direct)

Tryb ten jest podobny do porzedniego (pole trybu%001), ale mo˙ze by´c stosowany tylko dla danych o d lugo´sci s lowa (.W) lub d lugiego s lowa (.L). Adres efektywny odnosi sie bezpo´srednio do rejestru adresowego (nie ma, dostepu do pami, eci):,

EA=An Nasz przyk lad:

MOVE.W D1,A2 (D1) -> A2

koduje sie:,

00 11 010 001 000 001 -- -- --- --- --- ---

| | | | | |__rejestr zrodlowy nr 1 \

| | | | | > skad

| | | | |______tryb bezposredni rejestru danych /

| | | |

| | | |__________tryb bezposredni rejestru adresowego \

| | | > dokad

| | |______________rejestr przeznaczenia nr 2 /

| |

| |_________________rozmiar danych - slowo (.W)

|

|____________________kod instrukcji MOVE

R´ownie˙z w tym trybie oszczedzamy zarazem na d lugo´sci kodu, jak i na czasie jego wykonania. Obu om´owionych, tryb´ow u˙zywa sie do operowania na cz, esto wykorzystywanych danych, po´srednich wynikach itp.,

(12)

1.4.3 Tryb bezwzgledny d lugi (absolute long),

Operowanie na danych (nawet w przypadku om´owionych tryb´ow rejestrowych) wymaga kontaktu z zawarto´scia, pamieci (cho´cby po to, by za ladowa´c dane do rejestr´ow i przekaza´c wyniki). Omawiany tryb pozwala zaadre-, sowa´c dowolna kom´ork, e pami, eci w ca lej (4GB) przestrzeni adresowej procesora. Wymaga to podania cztero-, bajtowego (dwa s lowa) adresu. W tym trybie nie bierze udzia lu ˙zaden rejestr, wiec specyfikacja trybu ma pole,

%111, a pole rejestru zawiera %001. Ten (w sumie sze´sciobitowy) kod trybu adresowania powoduje, ˙ze procesor pobiera dwa s lowa nastepuj, ace po kodzie maszynowym rozkazu i sk lada je w d lugie s lowo traktowane jako adres, kom´orki pamieci, do kt´orej ma si, e odwo la´c:,

EA= ((P C) + 2) : ((P C) + 4) Asembler (program t lumaczacy) na podstawie tekstu ´zr´, od lowego:

DANEWEJ EQU $123456

MOVE.W DANEWEJ,D2 (DANEWEJ) -> D2

gdzie EQU jest pseudoinstrukcja (dyrektyw, a) przypisuj, ac, a etykiecie, DANEWEJ warto´s´c$123456, wytworzy kod maszynowy:

$3435 kod maszynowy MOVE.W z odpowiednimi trybami

$0012 starsze slowo dlugiego adresu bezwzglednego

$3456 mlodsze slowo dlugiego adresu bezwzglednego

Jego pobranie wymaga trzech odwo la´n do pamieci, a wykonanie - kolejnego dost, epu w celu odczytania s lowa, DANEWEJzawartego w kom´orce o adresie$123456. W przypadku instrukcji:

DANEWEJ EQU $123456 DANEWYJ EQU $345678

MOVE.W DANEWEJ,DANEWYJ (DANEWEJ) -> DANEWYJ

pobranie rozkazu zajmie pie´c dost, ep´, ow, a wykonanie - sz´osty. Wida´c, ˙ze ten tryb adresowania powinien by´c stosowany ze szczeg´olnym umiarem. Jego cecha jest (zgodnie z nazw, a), bezwzgledna, specyfikacja adresu. W pewnych przypadkach jest to zaleta, gdy˙z pozwala odwo lywa´c sie do ustalonych po lo˙ze´, n w przestrzeni adresowej procesora (np. kom´orek zwiazanych z rezydentnym oprogramowaniem, port´ow). Z drugiej strony, nie jest to, tryb godny polecenia w celu odwo lywania sie do roboczych danych programu, o ile chcieliby´smy uzyska´c kod, niezale˙zny od po lo˙zenia w pamieci (PIC - Position Independent Code), a tym bardziej kod wsp´o lu˙zywalny, (sharable/reentrant code).

(13)

1.4.4 Tryb bezwzgledny kr´, otki (absolute short)

Nie zawsze istnieje potrzeba stosowania 32-bitowego adresu kom´orki pamieci. Wydzielono podobszar przestrzeni, adresowej, kt´ory mo˙zna adresowa´c przy pomocy adresu 16-bitowego. Tryb bezwzgledny kr´otki ma pole trybu,

%111 i pole rejestru%000. Procesor obs luguje go w ten spos´ob, ˙ze pobiera nastepne s lowo po kodzie rozkazu i, traktuje je jako liczbe zapisan, a w kodzie uzupe lnienia do 2 (U2). Aby uzyska´c 32-bitowy adres, przeprowadza, operacje rozci, agni, ecia znaku (sign extension), kt´ora polega na uzupe lnieniu brakuj, acych, bardziej znacz, acych, bit´ow (w tym przypadku ca lego starszego s lowa) zgodnie z najstarszym (tu – 15) bitem s lowa rozszerzanego.

Dzieki temu uzyskuje liczb, e ze znakiem (U2) o tej samej warto´sci, lecz wi, ekszej d lugo´sci. W rezultacie otrzymuje, adres, kt´ory dotyczy albo najni˙zszych, albo najwy˙zszych 32kB przestrzeni adresowej procesora:

EA= ((P C) + 2)SEX

Zwr´o´cmy uwage, ˙ze najwy˙zsza cz, e´s´c przestrzeni adresowej jest rozumiana z dok ladno´sci, a do ilo´sci bit´ow adreso-, wych wykorzystywanych do sprzetowego dekodowania adresu pami, eci i urz, adze´, n. Na przyk lad, u˙zywajac tylko, adres´ow do A19 w lacznie, uzyskamy w tym trybie dost, ep do obszar´ow:,

$00000 -- $07FFF i $F8000 -- $FFFFF cho´c wewnetrzna reprezentacja adres´ow b, edzie nadal 32-bitowa:,

$00000000 -- $00007FFF i $FFFF8000 -- $FFFFFFFF

Asembler w czasie t lumaczenia programu preferuje tryb bezwzgledny kr´otki. Warunkiem jego zastosowania jest, znajomo´s´c liczbowej warto´sci adresu odpowiadajacego ewentualnej nazwie symbolicznej (etykiecie), w chwili tworzenia kodu rozkazu. W przypadku niespe lnienia tego warunku wybierany jest tryb bezwzgledny d lugi,, jako zawsze realizowalny, cho´c czasem nieoptymalny. W wiekszo´sci asembler´, ow istnieje mo˙zliwo´s´c wymuszenia trybu d lugiego przez opatrzenie sta lej liczbowej przyrostkiem.Llub u˙zycie zer nieznaczacych.,

(14)

1.4.5 Tryb natychmiastowy (immediate)

W opisanych trybach bezwzglednych dane pobra´c mo˙zna z kom´, orki pamieci, kt´orej adres podamy w kodzie, programu. Czesto istnieje potrzeba u˙zycia danych sta lych, kt´ore mog, a stanowi´c na przyk lad granice p, etli,, wsp´o lczynniki wyra˙ze´n itp. Ich umieszczenie w kom´orkach pamieci jest oczywi´scie mo˙zliwe, ale nieoptymalne., Zamiast pobiera´c z kodu programu s lowa sk ladajace si, e na adres kom´, orki zawierajacej sta l, a warto´s´c i nast, epnie, pobiera´c te warto´s´c z pami, eci danych, mo˙zna j, a pobra´c bezpo´srednio z kodu programu. Oszcz, edzamy w ten, spos´ob zar´owno kom´orke pami, eci przeznaczon, a na sta l, a, jak i czas potrzebny na dost, ep do niej.,

Tryb natychmiastowy w procesorach M68K jest symbolicznie wskazywany w tek´scie ´zr´od lowym programu przez poprzedzenie argumentu znakiem ”#”:

STALA EQU $55AA

MOVE.W #STALA,D2 STALA -> D2

Pole trybu wynosi%111, a pole rejestru%100. Rozmiar u˙zytych danych zale˙zy od specyfikacji w kodzie operacji:

.W– s lowo 16-bitowe,EA= (P C) + 2

.L– d lugie s lowo (32-bitowe),EA= (P C) + 2

.B– 8-bitowy bajt,EA= (P C) + 3

Brak specyfikacji rozmiaru oznacza domy´slnie s lowo 16-bitowe. Zar´owno s lowo, jak i bajt zajmuja w kodzie, maszynowym drugie s lowo po kodzie rozkazu, natomiast sta la o rozmiarze d lugiego s lowa - dwa kolejne s lowa (podobnie jak w przypadku d lugiego adresu).

Zwr´o´cmy uwage, ˙ze sta le w programie nie powinny by´c kodowane w postaci ”magicznych liczb”. U˙zywanie ich, w postaci symbolicznej po nadaniu warto´sci dyrektywa,EQUpozwala uporzadkowa´c program i procentuje przy, konieczno´sci zmiany sta lych warto´sci przy jego modyfikowaniu.

Da˙zenie do skracania kodu maszynowego program´ow przejawia si, e we wprowadzeniu kr´otkiej odmiany danych, natychmiastowych (quick immediate constants). Dla instrukcji MOVE istnieje odmianaMOVEQ, kt´ora korzysta z 8-bitowego pola wygospodarowanego w s lowie zawierajacym kod rozkazu, podobne pola 3-bitowe wygospoda-, rowano w instrukcjachADDQiSUBQbed, acych mutacjami dodawania i odejmowania, a w la´sciwie – uog´olnieniem, operacji inkrementacji i dekrementacji rejestr´ow danych.

(15)

1.4.6 Tryb po´sredni rejestru adresowego (address register indirect)

Wyobra´zmy sobie, ˙ze w naszym systemie musimy czesto dostawa´c si, e do portu (rejestru urz, adzenia zewn, etrznego),, kt´orego adres jest d lugi. Z dotychczas prezentowanych tryb´ow nadawa l sie do tego celu bezwzgl, edny d lugi. Roz-, kaz wpisania 16-bitowych danych natychmiastowych do tego portu:

Dane EQU $55AA #define Dane 0x55aa

PortAdd EQU $FFF000 #define PortAdd 0xfff000

* Deklaracja zmiennych ORG PortAdd

Port DS.W 1 short Port @ Portadd;

* Przeslanie danych do portu

MOVE.W #Dane,Port Port = Dane;

zajmuje przy ka˙zdym dostepie do portu 4 s lowa 16-bitowe, a jego pobranie i wykonanie wymaga 5 dost, ep´ow do, pamieci.,

Znacznie lepszym sposobem jest ustawienie w jednym z rejestr´ow adresowych procesora wska´znika na ten port i wykorzystanie go do po´sredniego adresowania:

Dane EQU $55AA #define Dane 0x55aa

PortAdd EQU $FFF000 #define PortAdd 0xfff000

* Deklaracje zmiennych

* short *ptr; /* rejestr A0 */

* Inicjacja wskaznika

ORG ROM

MOVEA.L #PortAdd,A0 ptr = (short *)PortAdd;

* Przeslanie danych do portu

MOVE.W #Dane,(A0) *ptr = Dane;

Notacja ´zr´od lowa(AO)oznacza, ˙ze zawarto´s´c rejestruA0jest adresem, do kt´orego chcemy siegn, a´c:, EA= (An)

Pole trybu wynosi%010, wska´znikiem mo˙ze by´c tylko rejestr adresowy.

Teraz wprawdzie jednorazowa inicjacja wska´znika w rejestrze A0 zajmuje 3 s lowa (3 dostepy), ale za to rozkaz, wpisu danych natychmiastowych do portu skraca sie do 2 s l´, ow (3 dostepy).  Latwo sprawdzi´c, ˙ze op laca si, e to, ju˙z przy dwukrotnym dostepie do portu przy jednej inicjacji wska´znika.,

(16)

1.4.7 Tryb po´sredni rejestru adresowego z autopostinkrementacja (address register indirect with postincrement)

Rozszerzona wersja po´sredniego trybu adresowania pozwala uzyska´c sekwencyjny dostep do kolejnych kom´, orek pamieci bez wyd lu˙zania kodu maszynowego programu i czasu jego realizacji. Znana np. z j, ezyka C operacja, autoinkrementacji wska´znika po wykonaniu dostepu do danych zosta la zaimplementowana bezpo´srednio w jed-, nym z tryb´ow adresowania procesor´ow M68K. Dzieki temu przepisywanie zawarto´sci jednego obszaru pami, eci, do drugiego nie wymaga dodatkowych operacji na wska´znikach:

* Deklaracje zmiennych

ORG RAM

* short *ptrA; /* rejestr A0 */

* short *ptrB; /* rejestr A1 */

TablA DS.W 100 short TablA[100];

TablB DS.W 100 short TablB[100];

* Inicjacja wskaznikow

ORG ROM

MOVEA.L #TablA,A0 ptrA = &TablA[0];

MOVEA.L #TablB,A1 ptrB = &TablB[0];

* Przepisanie elementow i przesuniecie wskaznikow MOVE.W (A0)+,(A1)+ *ptrB++ = *ptrA++;

Pole trybu tej operacji wynosi%011, jako wska´zniki moga by´c u˙zywane tylko rejestry adresowe. Po wystawieniu, adresu na magistrale, w celu uzyskania dost, epu do wybranej kom´, orki pamieci, zawarto´s´c rejestru adresowego, jest zwiekszana o rozmiar danych (SIZE) bior, acych udzia l w operacji wyra˙zony w bajtach (”.B” – 1, ”.W” –, 2, ”.L– 4):

EA= (An) (An) +SIZE→An

Dzieki temu wska´znik jest ustawiony na nast, epny element tablicy, a poniewa˙z operacja ta odbywa si, e w rejestrze, wewnetrznym procesora, jej wykonanie nie zajmuje dodatkowego czasu.,

(17)

1.4.8 Tryb po´sredni rejestru adresowego z autopredekrementacja (address register indirect with predecrement)

W niekt´orych sytuacjach potrzebne jest przepisywanie tablic w odwrotnej kolejno´sci, na przyk lad przy cze´sciowym, pokrywaniu sie obszaru ´zr´, od lowego z docelowym. Wtedy mo˙zna u˙zy´c trybu przeciwstawnego do poprzednio opisanego :

* Przesuniecie wskaznikow i przepisanie elementow MOVE.W -(A0),-(A1) *--ptrB = *--ptrA;

Kod trybu wynosi %100, rejestr musi by´c adresowy. Tym razem modyfikacja (odpowiednie do typu danych zmniejszenie zawarto´sci) rejestru adresowego nastepuje, przedwystawieniem adresu na magistrale:,

(An)−SIZE→An EA= (An)

Wa˙znym zastosowaniem tryb´ow po´srednich z automodyfikacja s, a operacje na stosie. Istnieje wersja instrukcji, MOVE, zwana MOVEM (MOVE Multiple), kt´ora pozwala przes la´c na stos lub pobra´c z niego dowolny podzbi´or rejestr´ow danych i adresowych procesora przy pomocy rozkazu z lo˙zonego z dw´och s l´ow: kodu rozkazu i maski zestawu rejestr´ow.

(18)

1.4.9 Tryb po´sredni rejestru adresowego z przesunieciem (address register indirect with displa-, cement)

Innym rozszerzeniem po´sredniego trybu rejestru adresowego jest dodanie sta lego przesuniecia (przemieszcze-, nia) adresu wynikowego w stosunku do zawarto´sci rejestru adresowego, zwanej adresem bazowym. Przesuniecie, to jest podawane w postaci 16-bitowego s lowa po kodzie rozkazu, traktowanego jako liczba ze znakiem. Ad- res wystawiany na magistrale budowany jest z zawarto´sci rejestru adresowego przez dodanie przesuni, ecia po, rozciagni, eciu jego znaku na s lowo 32-bitowe:,

EA= (An) + ((P C) + 2)SEX

Typowe zastosowanie tego trybu to dostep do danych wewn, atrz struktur:,

* Definicja struktury data_t

ORG 0

typedef struct{

Dzien DS.B 1 char Dzien;

Miesiac DS.B 1 char Miesiac;

Rok DS.W 1 short Rok;

* } data_t;

Data_L

* Data_L = sizeof(data_t);

* Deklaracje zmiennych

ORG RAM

* data_t *ptr; /* w rejestrze A0 */

Data DS.B Data_L data_t Data;

* Dostep do wnetrza struktury

ORG ROM

MOVEA.L #Data,A0 ptr = &Data;

MOVE.W #1996,Rok(A0) ptr->Rok = 1996;

Pole trybu wynosi%101, rejestr – adresowy, przesuniecie – 16-bitowe.,

(19)

1.4.10 Tryb po´sredni rejestru adresowego z indeksem i przesunieciem (address register indirect, with index and displacement)

Dostep do element´ow tablic wymaga znajomo´sci dw´och parametr´ow: adresu pocz, atku tablicy i kolejnego nu-, meru (indeksu) elementu, o kt´ory nam chodzi. Oba te parametry mo˙zemy zada´c w opisywanym trybie w postaci zawarto´sci dw´och rejestr´ow. Pierwszy z nichmusiby´c rejestrem adresowym i zawiera adres bazowy, a drugi mo˙ze by´c dowolnym z uniwersalnych rejestr´ow procesora i jest zwany rejestrem indeksowym. Dodatkowa mo˙zliwo´s´c u˙zycia sta lego przesuniecia wzgl, edem rejestru bazowego (jak poprzednio) pozwala na dost, ep do ta-, blic zawartych w strukturach. Adres efektywny tworzony jest przez zsumowanie zawarto´sci rejestru bazowego, 8-bitowego przesuniecia wzgl, edem bazy rozszerzonego znakowo i zawarto´sci rejestru indeksowego (rozszerzonego, w przypadku u˙zycia jego 16-bitowej cze´sci):,

EA= (An) + ((P C) + 3)SEX+ (Xm)SEX

Oto ilustracja u˙zycia opisywanego trybu w celu dostepu do tablicy pomiar´ow zawartej w pewnej strukturze:,

* Definicja struktury pomiar_t

ORG 0

typedef struct{

Datas DS.B Data_L data_t Datas;

Temp DS.B 24 char Temp[24];

* } pomiar_t;

Pomiar_L

* Pomiar_L = sizeof(pomiar_t);

* Deklaracje zmiennych

ORG RAM

* pomiar_t *ptr; /* w rejestrze A0 */

* int NumerPom; /* w rejestrze D1 */

* char Wynik; /* w rejestrze D0 */

Pomiar DS.B Pomiar_L pomiar_t Pomiar;

* Dostep do elementu tablicy wewnatrz struktury

ORG ROM

* Inicjacja wskaznika struktury

MOVEA.L #Pomiar,A0 ptr = &Pomiar;

* Inicjacja indeksu w tablicy

MOVE.L #0,D1 NumerPom = 0;

* odczyt pomiaru z tablicy

MOVE.B Temp(A0,D1.L),D0 Wynik = ptr->Temp[NumerPom];

Przyjrzymy sie teraz sposobowi kodowania trybu indeksowego w procesorze M68K. Pole trybu wynosi, %110, a pole rejestru zawiera numer rejestru bazowego. W kolejnym s lowie umieszczone sa parametry dotycz, ace rejestru, indeksowego i 8-bitowe przesuniecie bazowe:,

bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0

D/A ‘---v---’ W/L ‘---v---’

typ / numer /czesc przesuniecie bazowe

rejestru indeksowego

Zwr´o´cmy uwage, ˙ze trybu tego mo˙zna r´ownie˙z u˙zy´c do szybkiej implementacji tablic dwuwymiarowych. Jeden, z indeks´ow tablicy stanowi´c mo˙ze rejestr bazowy, a drugi - rejestr indeksowy.

(20)

W procesorach M68K poczawszy od MC68020 wprowadzono dodatkowo skalowanie indeksu, kt´ore polega na, wykorzystaniu bit´owb9 ib10 drugiego s lowa rozkazowego do zakodowania rozmiaru elementu tablicy:

bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 1 1 1 0 0 0 0 0 0 0 1 0 0

D/A ‘---v---’ W/L ‘-v-’ ‘---v---’

typ / numer /czesc skala przesuniecie bazowe rejestru indeksowego elem.

Kodowanie jest naturalne, rozmiar elementu okre´slony jest jako 2SKALA. W poni˙zszym przyk ladzie zmieniono typ element´ow tablicy nalong, by zlustrowa´c u˙zycie skalowania:

* Definicja struktury pomiar_t

ORG 0

typedef struct{

Datas DS.B Data_L data_t Datas;

Temp DS.L 24 long Temp[24];

* } pomiar_t;

Pomiar_L

* Pomiar_L = sizeof(pomiar_t);

* Deklaracje zmiennych

ORG RAM

* pomiar_t *ptr; /* w rejestrze A0 */

* int NumerPom; /* w rejestrze D1 */

* long Wynik; /* w rejestrze D0 */

Pomiar DS.B Pomiar_L pomiar_t Pomiar;

* Dostep do elementu tablicy wewnatrz struktury

ORG ROM

* Inicjacja wskaznika struktury

MOVEA.L #Pomiar,A0 ptr = &Pomiar;

* Inicjacja indeksu w tablicy

MOVE.L #0,D1 NumerPom = 0;

* odczyt pomiaru z tablicy

MOVE.L Temp(A0,D1.L*4),D0 Wynik = ptr->Temp[NumerPom];

(21)

1.4.11 Tryb po´sredni licznika rozkaz´ow z przesunieciem (program counter indirect with displa-, cement)

Szczeg´olne zalety ma mo˙zliwo´s´c u˙zycia licznika rozkaz´ow jako rejestru bazowego. Taki tryb adresowania pozwala stworzy´c kod maszynowy dzia lajacy niezale˙znie od po lo˙zenia w pami, eci (PIC – Position Independent Code)., Adres jest tworzony przez dodanie rozszerzonego znakowo przesuniecia do zawarto´sci licznika rozkaz´, ow po pobraniu pierwszego s lowa rozkazu:

EA= (P C) + 2 + ((P C) + 2)SEX

Pozornie skomplikowane zadanie obliczania warto´sci przesuniecia jest przerzucone na asembler, kt´ory oblicza, r´o˙znice pomi, edzy bi, e˙z, ac, a warto´sci, a swojego licznika adresowego, a warto´sci, a przypisan, a nazwie (etykiecie), okre´slajacej miejsce w pami, eci, do kt´orego si, e odwo lujemy.,

ORG ROM

Napis DC.B ’Ala ma kota’

DC.B 0

*

* Dostep do pierwszego znaku napisu MOVE.B Napis(PC),D0

Zalety tego trybu adresowania sa jeszcze lepiej widoczne przy u˙zyciu instrukcji, LEA(Load Effective Address), kt´ora obliczony dla u˙zytego w niej trybu adresowania adres wynikowy przesy la do zadanego rejestru adreso- wego. Dalej mo˙zna tego rejestru u˙zy´c jako bazowego dla innych (w szczeg´olno´sci automodyfikowalnych lub indeksowych) tryb´ow:

ORG ROM

Napis DC.B ’Ala ma kota’

DC.B 0

*

* Inicjacja rejestru bazowego LEA.L Napis(PC),A0

*

* Dost/ep do kolejnych znakow napisu MOVE.B (A0)+,Port

Pole trybu –%111, pole rejestru –%010, przesuniecie – 16-bitowe.,

Zwr´o´cmy uwage, ˙ze prawid lowe zastosowanie tego trybu pozwala uzyska´c niezale˙zno´s´c kodu od po lo˙zenia, jak, r´ownie˙z jego wsp´o lu˙zywalno´s´c (sharable/reentrant code). Opisany tryb jest przeznaczony do odczytu, a nie do zapisu danych. Nie stanowi to jednak ˙zadnego ograniczenia. W systemach wielozadaniowych r´o˙zne procesy moga korzysta´c z tej samej kopii kodu w r´o˙znych chwilach. Nie mog, a jednak modyfikowa´c stanu zmiennych, globalnych zwiazanych z tym kodem. Dla zmiennych lokalnych stosuje si, e r´o˙zne rozwi, azania (lokalne wska´zniki, obszaru danych statycznych dla procesu, dane dynamiczne – na stosie itp.).

(22)

1.4.12 Tryb po´sredni licznika rozkaz´ow z indeksem i przesunieciem (program counter indirect, with index and displacement)

Analogicznie do poprzedniego, ten tryb pozwala sie odwo lywa´c do danych zawartych w kodzie programu. Tym, razem moa to by´c tablice, jak to by lo przy trybie indeksowym z rejestrem bazowym. Pole trybu –, %111, pole rejestru –%011. Teraz role rejestru bazowego pe lni licznik rozkaz´, ow (jego zawarto´s´c jest zmodyfikowana o 2 po pobraniu kodu rozkazu):

EA= (P C) + 2 + ((P C) + 3)SEX+ (Xm)SEX

Pozosta le informacje, dotyczace drugiego s lowa rozkazowego nie ulegaj, a zmianie.,

Przyk ladem zastosowania tego trybu mo˙ze by´c tablica konwersji danych wpisana do kodu programu:

ORG ROM

* Deklaracja danych stalych const char

TabPierw DC.B 1,2,3,5,7,11 TabPierw[6] = {1,2,3,5,7,11}

* Inicjacja indeksu w tablicy

MOVE.W #5,D1 NumerLiczby = 5;

* Odczyt liczby z tablicy

MOVE.B TabPierw(PC,D1.W),D0 Wynik = TabPierw[NumerLiczby];

W procesorach poczawszy od MC68020 wprowadzono skalowanie indeksu w tym trybie na identycznej zasadzie,, jak w trybie indeksowym z rejestrem adresowym.

(23)

1.5 Rozszerzenia tryb´ ow adresowania w rodzinie M68K

Ju˙z przy omawianiu tryb´ow indeksowych okaza lo sie, ˙ze procesor MC68020 wni´os l istotne rozszerzenia nie tylko, w dziedzinie spretowej, ale r´ownie˙z do adresowania. Przedstawimy teraz cztery indeksowe tryby adresowania,, kt´ore pojawi ly sie w tym procesorze i w rzeczywisto´sci dostarczy ly kilku tryb´ow pochodnych.,

Wr´o´cmy do drugiego s lowa rozkazowego w trybach indeksowych. Bitb8(dotychczas zawsze ustawiony na warto´s´c

”0”) sta l sie flag, a wyr´o˙zniaj, ac, a nowe tryby. W przypadku ustawienia tego bitu na ”1”, dolny bajt drugiego, s lowa rozkazowego przestaje by´c traktowany jako 8-bitowe przesuniecie i otrzymuje now, a rol, e:,

bit: 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 1 1 1 0 1 0 0 1 0 0 0 1 0

D/A ‘---v---’ W/L ‘-v-’ BS IS ‘-v-’ ‘---v---’

typ / numer /czesc skala | | rozmiar I/IS rejestru indeksowego elem. | | przes.

| |_______ brak indeksowania

|______ brak rejestru bazowego

Jak wida´c, mo˙zliwe jest wy laczenie rejestru bazowego, rejestru indeksowego, wyb´or wielko´sci przesuni, ecia ba-, zowego (w tym wielko´sci zerowej, nie wymagajacej dalszych s l´, ow rozkazowych) i wreszcie – wyb´or trybu in- deksowania. Znaczenie poszczeg´olnych opcji bedzie ja´sniejsze po om´owieniu podstawowych odmian po´srednich, tryb´ow indeksowych.

1.5.1 Tryb adresowania po´sredniego przez pamie´,c z postindeksacja (memory indirect postinde-, xed)

Tym razem zaczniemy od algorytmu tworzenia adresu efektywnego:

EA= ((An) +bdSEX) + (Xm)SEX? SCALE+odSEX

Adres wynikowy sk lada sie tu z:,

zawarto´sci 32-bitowego s lowa zaadresowanego przez zawarto´s´c rejestru bazowego z przesunieciem, base displacement: ((An) +bdSEX)

zawarto´sci rejestru indeksowego ze skalowaniem : (Xm)? SCALE

zewnetrznego przesuni, ecia, outer displacement: odSEX

Zauwa˙zmy, ˙ze ten tryb adresowania sk lada sie z dw´och omawianych wcze´sniej tryb´ow po l, aczonych kaskadowo., Tryb po´sredni rejestru adresowego z przesunieciem s lu˙zy do pobrania z pami, eci adresu bazowego dla trybu, indeksowego. Zewnetrzne przesuni, ecie odnosi si, e do tego w la´snie trybu. W ten z lo˙zony spos´ob mo˙zna si, e, odwo la´c w jednym adresie wynikowym do:

wybranego (Xm, SCALE) elementu tablicy bed, acej polem (bd, SEX) struktury wskazywanej przez wska´znik zawarty w polu (odSEX) struktury wskazywanej przez zawarto´s´c rejestru bazowego (An) .

(24)

Rozbudujmy wcze´sniejszy przyk lad:

* Definicja struktury pomiar_t

ORG 0

typedef struct{

Datas DS.B Data_L data_t Datas;

Temp DS.L 24 long Temp[24];

* } pomiar_t;

Pomiar_L

* Pomiar_L = sizeof(pomiar_t);

* Definicja struktury pacjent_t

ORG 0

typedef struct{

Nazwisko DS.B 20 char Nazwisko[20];

Imie DS.B 20 char Imie[20];

Badanie_p DS.L 1 pomiar_t *Badanie_p;

* } pacjent_t;

Pacjent_L

* Pacjent_L = sizeof(pacjent_t);

* Deklaracje zmiennych

ORG RAM

* pacjent_t *ptr; /* w rejestrze A0 */

* int NumerPom; /* w rejestrze D1 */

* long Wynik; /* w rejestrze D0 */

Pacjent DS.B Pacjent_L pomiar_t Pacjent;

* Dostep do elementu tablicy wewnatrz struktury

ORG ROM

* Inicjacja wskaznika struktury zewnetrznej

MOVEA.L #Pacjent,A0 ptr = &Pacjent;

* Inicjacja indeksu w tablicy wewnetrznej

MOVE.W #12,D1 NumerPom = 12;

* odczyt pomiaru z tablicy

MOVE.L ([Badanie,A0],D1.W*4,Temp),D0

* Wynik = ptr->Badanie->Temp[NumerPom];

Jak wida´c, w pojedynczym adresie docieramy do elementu tablicy podw´ojnie zag lebionej w strukturach. Nazwa

(25)

1.5.2 Tryb adresowania po´sredniego przez pamie´,c z preindeksacja (memory indirect preindexed), Odwr´ocenie kolejno´sci tryb´ow sk ladowych daje:

EA= ((An) +bdSEX+ (Xm)SEX? SCALE) +odSEX

Tak mo˙zemy sie odwo la´c do:,

pola (odSEX) struktury wskazywanej przez wska´znik bed, acy wybranym (Xm, SCALE) elementem, tablicy bed, acej polem (bd, SEX) struktury wskazywanej przez zawarto´s´c rejestru bazowego (An). Oto ilustracja:

* Definicja struktury data_t

ORG 0

typedef struct{

Dzien DS.B 1 char Dzien;

Miesiac DS.B 1 char Miesiac;

Rok DS.W 1 short Rok;

* } data_t;

Data_L

* Data_L = sizeof(data_t);

* Definicja struktury wizyty_t

ORG 0

typedef struct{

Nazwisko DS.B 20 char Nazwisko[20];

Imie DS.B 20 char Imie[20];

DniWiz DS.L 30 data_t * DniWiz[30];

* } wizyty_t;

Wizyty_L

* Wizyty_L = sizeof(wizyty_t);

* Deklaracje zmiennych

ORG RAM

* wizyty_t *ptr; /* w rejestrze A0 */

* int NumerWiz; /* w rejestrze D0 */

* char DzienW; /* w rejestrze D1 */

Wizyty DS.B Wizyty_L wizyty_t Wizyty;

ORG ROM

* Inicjacja wskaznika struktury zewnetrznej

MOVEA.L #Wizyty,A0 ptr = &Wizyty;

* Inicjacja indeksu w tablicy zewnetrznej

MOVE.W #12,D0 NumerWiz = 3;

* odczyt pomiaru z tablicy

MOVE.L ([DniWiz,A0,D0.W*4],Dzien),D0

* DzienW = ptr->DniWiz[NumerWiz]->Dzien;

W opisanym trybie adresowanie indeksowe jest wykonywane w celu znalezienia w pamieci adresu po´sredniego,, stad nazwa ”preindeksacja”.,

W obu powy˙zszych trybach wystepuj, a dwa sta le przesuni, ecia: wewn, etrzne (bazowe) i zewn, etrzne. S, a one, umieszczane po drugim s lowie rozkazu w takiej w la´snie kolejno´sci. Jak wspomniano wcze´sniej, jest wiele wa- riant´ow tryb´ow adresowania za po´srednictwem pamieci, kt´ore wynikaj, a z pomini, ecia niekt´orych sk ladnik´, ow

(26)

adresu wynikowego. W odniesieniu do podanych wcze´sniej element´ow dolnego bajtu drugiego s lowa rozkazo- wego warianty te zawarte sa w tabelach:,

Pole Definicja

BS wykluczenie rejestru bazowego Base register Suppress

0 = jest rejestr bazowy 1 = brak rejestru bazowego IS wykluczenie indeksu

Index Suppress 0 = jest indeksowanie 1 = brak indeksowania BD SIZE rozmiar przesuniecia bazowego,

Base Displacement SIZE 00 = zarezerwowane 01 = zerowe przesuniecie, 10 = 16-bitowe przesuniecie, 11 = 32-bitowe przesuniecie, I/IS wyb´or podtryb´ow

Index/Indirect Selection

wraz z polem IS opisane w nastepnej tablicy,

IS I/IS Opis trybu

0 000 brak odwo lania po´sredniego

0 001 preindeksacja bez zewnetrznego przesuni, ecia,

0 010 preindeksacja z 16-bitowym zewnetrznym przesuni, eciem, 0 011 preindeksacja z 32-bitowym zewnetrznym przesuni, eciem, 0 100 zarezerwowane

0 101 postindeksacja bez zewnetrznego przesuni, ecia,

0 110 postindeksacja z 16-bitowym zewnetrznym przesuni, eciem, 0 111 postindeksacja z 32-bitowym zewnetrznym przesuni, eciem, 1 000 brak odwo lania po´sredniego

1 001 po´srednie bez zewnetrznego przesuni, ecia,

1 010 po´srednie z 16-bitowym zewnetrznym przesuni, eciem, 1 011 po´srednie z 32-bitowym zewnetrznym przesuni, eciem, 1 100–111 zarezerwowane

Références

Documents relatifs

L’habillage de pages du site internet www.olivefoot.com L’Insertion de bannière publicitaire sur le mailing envoyé aux participants après chaque match.. L’insertion du logo

Pour une garantie de fraîcheur irréprochable, ces plats sont préparés en quantité limitée Notre Chef est à votre disposition en cas de restrictions alimentaires ou

Quelques indications sur la lithologie et l'allure des couches sont données par la carte de la MISSION NORD- KIVU (1974). L'examen de l'image satellite permet de distinguer des

Pour une garantie de fraîcheur irréprochable, ces plats sont préparés en quantité limitée Notre Chef est à votre disposition en cas de restrictions alimentaires ou

The stability was not computed, since the method would fail, but the orbit is obviously very unstable with uneven instability... This orbit was not computed

But to treat the general problem of unbiased estimation we must use another method... ARKIV F6R

On choisit la chaîne carbonée la plus longue contenant le carbone fonctionnel, la numéroter de telle sorte que l’indice de position attribué au groupement (- OH),

En bouche ce vin exprime des notes de cassis crémeux, de mûre éclatante et plus légèrement de bleuet associées à des touches de myrtille éclatante, de petites baies