sciaga_arch.doc

(1964 KB) Pobierz

Jak widać składa się on z dwóch części czyli z bloku sprzęgającego magistrali BIU (Bus Interface Unit) oraz z układu wykonawczego EU (Exeution Unit). Podstawowym tego powodem jest to iż posiada on 16-bitową architekturę wewnętrzną oraz to, że ma bogatszą listę rozkazów. Posiada 20 linii adresowych definiujących bezpośrednio 220 komórek pamięci (czyli 1MB), 16 linii adresowych dla rozkazów definiujących lokacje 216 portów WY/WE (64KB) oraz dwa niezależne układy operacyjne EU i BIU. Układ wykonawczy (procesora ma ALU 16-bitowe, które dobrze współpracuje z rejestrami wewnętrznymi i wskaźnikowymi) UK zawiera: 1. 16-bitową jednostkę arytmetyczno logiczną. 2. Układ sterowania z rejestrem rozkazów. 3. Cztery 16-bitowe rejestry użytkownika: AX, BX, CX, DX bądź cztery pary po 8-bitów: AL.AH, BL, BH, CL, CH, DL, DH (L – oznacza młodszy bajt, a H – starszy bajt). 4. Cztery 16-bitowe rejestry adresacji: SP (Strack Pointer) – wskaźnik stosu, BP (Base Pointer) – wskaźnik bazy, SI (Source Pointer) – indeksowy źródła danych, DI (Destination Pointer) – indeksowy przeznaczenia danych. 5. 16-bitowy rejestr wskaźników (rejestr flagowy).Widać również iż mała część jednostki sterującej jest również zaliczana do układu wykonawczego. Blok sprzęgający magistrali BIU natomiast składa się  z buforu adresu/danych, sumatora adresu, tak zwanej kolejki rozkazów, jednostki sterującej i rejestrów segmentowych wraz z wskaźnikiem instrukcji (CS - segment kodów – wskazuje część adresu 16 bitów odnoszącą się do obszaru pamięci, w który zapisano kod rozkazu. SS – segment stosu – zawiera 16 bitów adresu, które lokalizują obszar pamięci traktowany jako stos, przechowujący dane restartów przerwań. DS. – segment danych – wskazuje 16 bitów adresu komórek pamięci, które zawierają dane, głównie zmienne programu. ES – segment dodatkowy – używany jako dodatkowy obszar pamięci do zapisu danych programu. IP – wskaźnik instrukcji – zwany inaczej wskaźnikiem rozkazów jest odpowiednikiem licznika, zawartość tego wskaźnika modyfikuje układ sprzęgający magistrali BIU. Przed zapisaniem IP do stosu następuje modyfikacja jego zawartości tak aby po powrocie do tej lokacji został wskazany następny rozkaz w programie).

Obie te części (BIU i EU) dobrze za sobą współpracują. Bardzo ważnym elementem jest to, że procesor może bez problemu współpracować z rodzinami 8-bitowych układów. Dzięki temu procesor ten stał się powszechnie używany. Posiada on również dwa tryby przetrwania w układzie maksymalnym i minimalnym.

Rejestry ogólnego przeznaczenia są wykorzystywane do trzymania danych i wykonywania różnych operacji. Pełnią one również inne funkcje, od których są tez nazywane:                          

Rejestry danych:                                                                                                                                                                                                                                                                                                                                                                                                                                   AX (accumulator)  - akumulator; arytmometr wykorzystuje pamięć tego rejestru. Rejestr ten używany jest wtedy gdy wykonujemy mnożenie i dzielenie. Jest on bardzo ważnym rejestrem, który używany jest w operacjach arytmetycznych, logicznych i do zapamiętywania wyników kilku operacji. Osiem dolnych bitów rejestru określa się jako rejestr AL a osiem górnych jako AH.                                                                                                                                                                     BX (basis register) - rejestr bazowy; może być on uważany jako dwa ośmio bitowe rejestry BL i BH. Szesnaście bitów może być użytych jako pewna część adresu dostępnego obszaru pamięci, tworząc z rejestrem segmentowym cały adres.                                                                                                                                                                                                             CX (count register) -  tak zwany rejestr zliczający, wykorzystywany także do blokowego przesyłania danych. Może być również używany jako dwa rejestry 8-bitowe CL i CH.                                                                DX (data register) - jedyny rejestr, w którym można podać adres portu w połączeniu z rozkazami wejścia i wyjścia, wykorzystuje się go między innymi do operacji mnożenia i dzielenia.                                                                                                                               Końcowe litery L i H w rejestrach ogólnego przeznaczenia oznaczają bit młodszy (L) i bit starszy (H).                                                                                                                                                 Rejestry indeksów adresowych:                                                                                    (source index) - rejestr indeksowy źródła. Podobnie jak BX, może być on użyty jako wskaźnik pamięci i jest on cenny w instrukcjach przetwarzających łańcuchy znaków, tworzy wówczas cały adres                                                                                                                                                                                        DI (destination index) - rejestr indeksowy przeznaczenia. Jest podobny do rejestru SI z tym, że może on być użyty jako wskaźnik pamięci i ma specjalne właściwości. Pomiędzy rejestrami SI i DI istnieje podstawowa różnica: SI jest wskaźnikiem adresu źródła łańcucha znaków, DI jest wskaźnikiem adresu przeznaczenia łańcucha znaków.                                                                

Rejestry wskaźników adresowych:

SP (stack pointer) - wskaźnik stosu. Podobnie jak rejestr BX może być użyty jako wskaźnik pamięci. Stosowany jest on często podczas operacji zapisu i odczytu stosu, tworząc z rejestrem SS pełny adres.                                                                                                                            BP (base pointer) - wskaźnik bazy. Używany jest on podczas operacji niestandardowych. Podobnie jak rejestry BX, SI i DI, rejestr ten może być stosowany jako wskaźnik pamięci, ale z pewną różnicą. Rejestr BP jest stosowany do zapamiętywania położenia na stosie określonej informacji. 

Rejestry segmentowe:

Wykorzystuje się je do adresowania pamięci operacyjnej, która posiada maksymalną wielkość 1MB, ale jest dzielona na porcje nie większe jak 64kB                                                                                         

CS (code segment) - segment kodów – wskazuje część adresu 16 bitów odnoszącą się do obszaru pamięci, w który zapisano kod rozkazu.                                                                                   

SS (stack segment) – segment stosu – zawiera 16 bitów adresu, które lokalizują obszar pamięci traktowany jako stos, przechowujący dane restartów przerwań.                                                                                                        DS (data segment) - rejestr segmentowy danych - wskazuje na początek tego segmentu.  
ES (extra segment) – dodatkowy segment - używany jako dodatkowy obszar pamięci do zapisu danych programu.                                                                                                                            

IP (instruction pointer) – rejestr rozkazów - jest wskaźnikiem rozkazów i wraz z rejestrem CS adresuje kolejne rozkazy do wykonania. Rejestr IP wskazuje adres względem początku segmentu programu. 

 

Procesor 8086 posiada dziewięć 1 – bitowych wskaźników tak zwanych bitów flagowych. Wartości są zapisywane w 16 – bitowym rejestrze flagowym.

Wyróżniamy dwie grupy wskaźników:

-znaczniki stanu wewnętrznego (Carry, Auxiliary-Carry, Sign, Over-flow)

- znaczniki stanów sterujących (Trap, Interrupt enable, Direction)

Należy również wiedzieć, że znaczniki stanu wewnętrznego ustawione są w wyniku realizacji określonych operacji logicznych lub arytmetycznych procesora. Znaczniki sterujące rejestru wskaźników natomiast ustawione są przy pomocy rozkazów sterujących procesora w celu wymuszenia określonego trybu pracy.

Współpraca z magistralą BIU:

Przypadek pierwszy szeregowe pobranie i wykonanie rozkazów. Przypadek drugi równoległe pobranie i wykonanie rozkazów.

W procesorze 8086 układ sprzęgający BIU przesyła dane między procesorem, a pamięcią operacyjna lub układami I/O oczywiście pod nadzorem układu wykonawczego. Jak EU wykonuje kolejne rozkazy to BIU pobiera nowy rozkaz z pamięci operacyjnej i przesyła go do kolejki. Dzięki temu  wykorzystany zostaje wolny stan magistrali zewnętrznej w trakcie operacji przetwarzania wewnętrznego w obrębie układu wykonawczego procesora. Innym równie istotnym zadaniem układu sprzęgającego BIU jest wyznaczanie adresu fizycznego na podstawie 16-bitowych danych przekazywanych z EU. Umiejętne posługiwanie się i  znajomość wyznaczania adresów 20-bitowych umożliwia skrócenie zapisu programu, zmniejszenie wymiarów pamięci niezbędnej dla zapisu programu i danych. Jest to bardzo istotne i umożliwia to szybszą prace procesora.

Adresowanie:

Adresowanie bezpośrednie - Przy adresowaniu bezpośrednim kod rozkazu zawiera adres komórki pamięci, w której przechowywany jest rozkaz. Konsekwencją takiego określenia adresowania bezpośredniego jest to, że jeśli używamy tego adresowania, w momencie pisania programu musimy zarezerwować adres przechowywania argumentu.

Adresowanie pośrednie: umożliwia modyfikację położenia argumentu w pamięci gdy wykonywany jest program. Inaczej mówiąc, adres przechowywania tego argumentu może zostać wyliczony przez program. Ponadto kody rozkazów są krótkie. W trybie adresowania pośredniego kod rozkazu zawiera określenie rejestru bądź rejestrów, w których znajduje się adres komórki pamięci zawierającej argument.

Adresowanie względne: Adres względny  obliczany jest względem początku strony poprzez dodanie do niego zawartości określonego rejestru wewnętrznego procesora. Jest to tak zwane przemieszczenie adresowe (dotyczy przemieszczenia wewnątrz strony – od adresu bazy o określoną liczbę komórek pamięci).

Adresowanie natychmiastowe: Dane zostają zapisane w komórce pamięci następującej po lokacji kodu operacji. To właśnie jest adresowanie natychmiastowe. Oznacza to , że w polu operandu występującym po kodzie operacji zapisane są dane dla tej operacji.

Adresowanie indeksowane: Indeksowany adres obliczany jest jako suma podanego w rozkazie adresu oraz zawartości rejestru indeksowanego (SI). Przykład adresacji: Przykład ten jest bardzo prosty do rejestru AX 16-bitowego zostały skopiowane zawartości adresu 44H i 45H, a następnie została dodana zawartość  rejestru indeksowanego SI (SI=3).

Adres fizyczny, logiczny i efektywny: 

Adres fizyczny:

Określa stan 20-bitowego wektora zewnętrznego, który lokalizuje 1MB komórek pamięci, od 00000 H do FFFFF H. Gdy chcemy pisać program w języku maszynowym używamy wtedy już tylko pojęcia adresu logicznego. Mamy krótszy format adresu. W procesorze 8086 mamy 16-bitowy adres więc będziemy dodawać cztery bity na najstarszych pozycjach w przedziale od 0F do FH, czyli będziemy adresować 16 części po 64KB każdy.

Adres logiczny:

Składa się on z bazy zawartej w jednym z czterech rejestrów segmentowych – CS, DS, SS, ES oraz przemieszczenia liczonego od bazy. W praktyce blok BIU przesuwa wektor adresowy bazy o cztery bity w kierunku pozycji starszych i dodaje do niego 16-bitowy wektor przemieszczenia.

Adres efektywny:

Określany jest między innymi jako wartość przemieszczenia wskazującego położenie komórki pamięci w bieżącym segmencie, licząc oczywiście od początku.

Instrukcje:

Instrukcje przesyłania –bez wątpienia są to najczęściej wykonywane rozkazy. Należy wiedzieć, że nie zmieniają wartości informacji, tylko przenoszą je z jednego miejsca na inne. Pisząc program korzystamy wiele razy i takich instrukcji na przykład pobierając jakieś dane do obliczeń i wyświetlając je. Wśród rozkazów przesłań wyróżnia się operacje na stosie (będące jednak też formą przesłań) czy instrukcje wejścia/wyjścia, przesyłające lub odczytujące dane. Przykłady instrukcji przesyłania:

MOV - move - przesłanie słowa pomiędzy rejestrami procesora
STR - store - przesłanie słowa ze wskazanego w rozkazie rejestru procesora do komórki pamięci

CLR - clear - zerowanie rejestru
Instrukcje arytmetyczne - ich głównym zadaniem jest przetwarzanie informacji, czyli w wyniku ich wykonania jest ona zmieniana. Przykłady instrukcji arytmetycznych i również logicznych:

ADD - addition - dodawanie
SUB - subtraction - odejmowanie

Rozkazy sterujące poprzez odpowiednie rozkazy umożliwiają zmieniać kolejność wykonywania instrukcji programu.

Instrukcje sterujące możemy podzielić trzy grupy:

Bezwarunkowe- wykorzystywane są do realizacji rozgałęzień w programach. Jeśli warunek nie jest spełniony, to rozkaz nie jest wykonywany, a wykonywany jest następny rozkaz, znajdujący się w programie po rozkazie warunkowym. Rozkazy skoków i wywołań zawierają adres skoku. Przykłady instrukcji warunkowych:

JMP - jump - skok bezwarunkowy do miejsca w pamięci wyspecyfikowanego w rozkazie
Warunkowe- badają one stan znacznika F.

JF dla F=1 lub JNF dla F=0 (F reprezentuje flagi – znaczniki).

 

Cykl rozkazowy:

 

...
Zgłoś jeśli naruszono regulamin