SYSTEM MIKROPROCESOROWY CPU ROM RAM I/O AB DB CB Rys 4.1. System mikroprocesorowy
MIKROPROCESOR
RDZEŃ MIKROPROCESORA
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Mikroprocesor zawiera następujące, podstawowe zespoły funkcjonalne (rys.): układ arytmetyczno-logiczny (ang. arithmetic logic unit ALU), zespół rejestrów, rejestr instrukcji oraz układ sterujący, umożliwiający sterowanie wykonywania ciągu instrukcji.
rejestry A F dane B D C E ALU wynik H L EU - jednostka wykonawcza program IR D Układ sterowania zewn. sygnały ster. CU - jednostka sterująca Rys 4.2. Schemat blokowy mikroprocesora Mikroprocesorem jest nazywany układ zdolny wykonywać operacje arytmetyczno-logiczne w sposób programowany, wykonany w technologii półprzewodnikowej o dużym stopniu scalenia.
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Układ arytmetyczno-logiczny Układ arytmetyczno-logiczny (rys. 3.10) wykonuje operacje arytmetyczne i logiczne. Rejestr, przechowujący wyniki pośrednie, a przed wykonaniem rozkazu jeden z argumentów, jest nazywany akumulatorem. W poszczególnych wykonaniach liczba akumulatorów może być większa (np. mikroprocesor 6800 zawiera dwa akumulatory, PACE cztery). W akumulatorze są najczęściej przechowywane wyniki z ALU. ALU realizuje operacje arytmetyczne dodawania i odejmowania. Układ arytmetyczno - logiczny wykonuje również operacje przesunięcia i obrotu w prawo i w lewo oraz zapewnia realizację funkcji logicznych typu AND, OR, EXCLUSIVE OR czynności arytmetycznych uzupełnienia do l, uzupełnienia do 2.
Typowa komunikacja procesora z pamięcią operacyjną A. Odczyt Magistrala pamięci 1. wysłanie adresu magistrala komórki adresowa 2. wysłanie rozkazu magistrala czytania sterująca 3. przesłanie zawartości magistrala komórki do procesora danych B. Zapis Magistrala pamięci 1. wysłanie adresu magistrala komórki adresowa 2. zawartość do magistrala zapełnienia komórki danych 3. rozkaz uaktualniania magistrala zawartości komórki sterująca
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Z jednostką arytmetyczno-logiczną jest bezpośrednio związany rejestr bitów warunków (wskaźników) zawierający bieżącą informację o stanie systemu oraz wyniku przeprowadzonej operacji. Są to następujące warunki: C przeniesienie (ang. carry), O nadmiar (ang. overflow), N znak (ujemny) (ang. negative), Z zero, P parzystość (ang. parity), H przeniesienie pomocnicze (ang. half curry). Przeniesienie (C). Bit przeniesienia jest ustawiany wówczas, gdy występuje przeniesienie z najbardziej znaczącego bitu wyniku. Przykładowo: 11011100 + 11100001 110111101 -> C (przeniesienie)
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Rejestry Rejestry w mikroprocesorze można podzielić na dwie grupy: rejestry ogólnego przeznaczenia (operacyjne), rejestry adresowe. Rejestry ogólnego przeznaczenia współpracują z układem arytmetyczno-logicznym i służą do manipulacji danymi, wymagającymi dużej szybkości działania. Zwykle liczba tych rejestrów nie przekracza ośmiu. Wynika to stąd, że w instrukcji tylko niewielka liczba bitów (zwykle 3) może być poświęcona na bezpośrednie adresowanie rejestrów.
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Rejestry adresowe służą do adresowania pamięci. Są to najczęściej pary rejestrów 8-bitowych, oznaczone jako L (bity O 7) i H (bity 8 15). Rejestry te są ładowane informacją z szyny danych (rys. 3.12). Rejestry adresowe to: licznik programu (ang. program, counter) PC), wskażnik stosu (ang. stack pointer SP), rejestr indeksowy (ang. indexing register). Dwa pierwsze rejestry istnieją w każdym mikroprocesorze. Zawartość określonych rejestrów adresowych jest przesyłana do buforowego rejestru adresowego, a stąd przez układ buforowy szyny adresowej na szynę adresową. Licznik programu i wskaźnik stosu mają możliwość arytmetycznego zwiększania lub zmniejszania zawartości o l. Jest to wykorzystywane przy sekwencyjnym adresowaniu pamięci i stosu.
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Licznik rozkazów, nazywany również licznikiem programu, zawiera adres. następnej instrukcji, która ma być wykonywana. Instrukcje są zapamiętywane najczęściej w pamięci ROM (EPROM). Ciąg instrukcji, pobieranych z pamięci w sposób sekwencyjny, jest możliwy właśnie dzięki generowanym adresom z licznika rozkazów. Adres w liczniku rozkazów jest podzielony na cztery części, każda część kodowana w kodzie szesnastkowym. Mechanizm pobierania instrukcji jest następujący. Zawartość licznika programu jest przesyłana do rejestru adresowego, a stąd na szynę adresową. Jednocześnie zawartość licznika adresów jest zwiększana o 1. Instrukcja ze wskazanego przez licznik programu miejsca pamięci jest przesyłana do rejestru rozkazów i następuje jej wykonanie.
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Wskaźnik stosu. Stos służy do obsługi przerwań i podprogramów. Jeżeli jest rozwiązany w sposób programowy, to część zewnętrznej pamięci RAM jest zarezerwowana jako stos. Wskaźnik stosu spełnia taką funkcję dla pamięci stosu jak licznik programu dla pamięci programu. Wskaźnik stosu zawiera adres informacji znajdującej się na szczycie" stosu. Rejestr indeksowy jest stosowany przy adresowaniu indeksowym. Adres indeksowy jest formowany przez dodanie zawartości rejestru indeksowego (tzw. modyfikatora) i adresu zawartego wewnątrz instrukcji. Ten sposób adresowania jest używany w celu realizacji dostępu do danych, umieszczonych kolejno w pamięci. Mikroprocesor 6800 zawiera jeden rejestr indeksowy, mikroprocesor 6500 zawiera dwa rejestry indeksowe. Mikroprocesor 8080 nie zawiera rejestru indeksowego
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA Stos stanowi zespół rejestrów lub miejsc w pamięci operacyjnej, które pod względem logicznym są wzajemnie powiązane w taki sposób, że ich zawartości mogą być wywoływane w kolejności odwrotnej do porządku, w jakim zostały zapamiętane. Stos ułatwia programiście przechowywanie informacji i ich odtwarzanie w czasie realizacji podprogramów i obsługi przerwań. Stanowi on tablicę ze wskaźnikiem, który przy dopisywaniu pozycji na stos ulega zwiększeniu, a przy pobieraniu pozycji ze stosu zmniejszeniu. Stos jest zatem zorganizowany jako pamięć LIFO (ang. last in first out). Stos jest obsługiwany przez dwa rodzaje instrukcji: PUSH operacja wprowadzania danych do stosu, POP (PULL) operacja pobierania danych ze stosu.
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIKROPROCESORA istnieją dwie metody realizacji stosu: układowa i programowa. Realizacja układowa stosu polega na wydzieleniu określonej liczby rejestrów w mikroprocesorze i przeznaczeniu ich do wykonywania funkcji stosu. Zapewnia to dużą szybkość działania stosu, lecz jego pojemność jest ograniczona liczbą rejestrów stosu. W realizacji programowej część pamięci RAM systemu mikroprocesorowego jest przeznaczona na stos. Przy takim rozwiązaniu stosu nie występuje tak silne ograniczenie jego pojemności, lecz jego szybkość działania jest znacznie mniejsza. Jest ono jednak rozwiązaniem powszechnie stosowanym w systemach mikroprocesorowych.
PODSTAWOWE ZESPOŁY FUNKCJONALNE MIJROPROCESORA Instrukcję operacji dostępu do stosu podczas wykonywania instrukcji wprowadzania danych lub pobierania danych przedstawiono na rysunku obok. Dostęp do stosu jest zawsze realizowany przez jego,,szczyt". Rysunek przedstawia w sposób graficzny mechanizm działania stosu podczas wykonywania instrukcji PUSH i POP
ZASADA DZIAŁANIA SYSTEMU MIKROPROCESOROWEGO Mikroprocesor komunikuje się przez szynę adresową i szynę danych z układami We-Wy i z pamięciami, w których jest zapisany program i dane. Informację zapisaną w pamięci pobiera się do jednostki centralnej mikroprocesora w porcjach" o określonej długości, zwanych słowami. Długość słowa wyrażona w bitach wynosi zwykle 4, 8, 16 bitów. Słowo 8-bitowe nazywa się bajtem. Słowo może reprezentować dane (słowo liczbowe) lub rozkaz (słowo rozkazowe). Rozpoznawanie typu słowa następuje w sposób automatyczny w układzie sterowania. Bardzo często są stosowane słowa liczbowe o podwójnej długości. Obliczenia na słowach o podwójnej długości określa się jako tzw. obliczenia podwójnej precyzji.
ZASADA DZIAŁANIA SYSTEMU MIKROPROCESOROWEGO Instrukcją nazywa się słowo zerojedynkowe określające rodzaj operacji, jaka ma zostać wykonana, oraz operand lub adres operandu, wymagany do jej wykonania. Rozkazem nazywa się instrukcje, których nie można rozłożyć na instrukcje cząstkowe. W językach maszynowych instrukcja i rozkaz mają prawie identyczne znaczenie, dlatego w tej książce będą używane jako pojęcia równoznaczne. Przez termin operand rozumie się w przetwarzaniu danych nie tylko wielkość potrzebną do wykonania operacji arytmetycznych, lecz również każdą wartość albo każdą inną informację, którą do wykonania rozkazu na podstawie adresu w nim zawartego należy sprowadzić z pamięci, znajdującej się w rejestrze albo też zawartą w samym rozkazie
ZASADA DZIAŁANIA SYSTEMU MIKROPROCESOROWEGO Uproszczoną zasadę działania systemu mikroprocesorowego można przedstawić w następujący sposób. Obiegiem i przetwarzaniem informacji w systemie mikroprocesorowym steruje mikroprocesor na podstawie instrukcji otrzymanych z pamięci programu. Instrukcje te są przekazywane do mikroprocesora przez szynę danych na podstawie adresów, generowanych w liczniku rozkazów oraz sygnału Czytaj" generowanego przez mikroprocesor. Tak więc licznik rozkazów generuje kolejno adresy instrukcji.
CYKLE PRACY MIKROPROCESORA pobranie rozkazu pobranie argumentui pobranie argumentuii zapis wyniku wysłanie adresu rozkazu dekodowanie rozkazu obliczenie adresu argumentui obliczenie adresu argumentuii wykonanie rozkazu obliczenie adresu przeznaczenia Rys 4.3. Cykle pracy mikroprocesora
Podstawowy cykl pracy procesora Dwie podstawowe operacje: pobranie i wykonanie rozkazu dzielą się na kilka kroków: Pobranie rozkazu: Odczytanie z pamięci operacyjnej rozkazu wskazanego przez licznik rozkazów i umieszczenie go w rejestrze rozkazów Zmiana zawartości licznika rozkazów tak, by wskazać następny rozkaz Dekodowanie rozkazu (określenie typu, liczby i adresów argumentów) Wykonanie rozkazu: Wyznaczenie adresów i pobranie argumentów Wykonanie czynności wskazanych rozkazem Zapamiętanie wyniku Przejście do pobrania następnego rozkazu
DZIAŁANIE MIKROPROCESORA W celu wykonania dowolnej instrukcji mikroprocesor wykonuje następujące czynności: licznik programu generuje kolejny adres rozkazu i przekazuje go na szynę adresową; adres rozkazów wybiera określoną instrukcję z pamięci; zawartość słowa pamięci wybranego adresem z licznika rozkazów zostaje przekazana do rejestru instrukcji; licznik rozkazów zwiększa swoją zawartość o l; nowa zawartość licznika rozkazów jest adresem następnej instrukcji, która będzie wykonywana, jeżeli nie będzie realizowana operacja skoku; zawartość rejestru instrukcji jest dekodowana przez dekoder instrukcji i następnie układ sterujący powoduje wygenerowanie mikroinstrukcji, powodujących wykonanie instrukcji (generowanie adresów układów wewnątrz mikroprocesora, określanie ich funkcji oraz generowanie impulsów taktujących); następuje wykonanie zdekodowanej instrukcji.
DZIAŁANIE MIKROPROCESORA Instrukcje. Sposoby adresowania Lista instrukcji jest ściśle związana z architekturą mikroprocesora. Zwykle mikroprocesory wykonują od 50 do nawet kilkuset instrukcji. Instrukcje mikroprocesorów można podzielić jak następuje: instrukcje przesyłania danych, instrukcje arytmetyczno-logiczne, instrukcje sterowania przebiegu programów (skoków), instrukcje systemowe. Z listą instrukcji jest związany system adresowania, również będący integralną częścią architektury mikroprocesora. Przykładowo, adresowanie indeksowe jest związane z obecnością rejestru indeksowego w mikroprocesorze. Podobnie adresowanie pośrednie rejestrowane może być stosowane tam, gdzie układ i długość logiczna rejestrów ogólnego przeznaczenia pozwala na to. Lista instrukcji i sposoby adresowania będą omówione szczegółowo w rozdz. 4.
DZIAŁANIE MIKROPROCESORA Wykonywanie instrukcji Każda instrukcja w mikroprocesorze jest wykonywana w następujących fazach: pobieranie instrukcji (ang. FETCH), dekodowanie instrukcji, wykonanie instrukcji.
DZIAŁANIE MIKROPROCESORA Wykonywanie instrukcji Faza pobierania instrukcji rozpoczyna się od podania zawartości licznika rozkazów na szynę adresową (rys. 3.18a). Jednocześnie z mikroprocesora jest generowany do pamięci programu sygnał Czytaj". Po czasie równym co najmniej czasowi dostępu do pamięci od wejść adresowych, informacja 8-bitowa z pamięci pojawia się na szynie danych. Informacja ta jest wpisywana do rejestru instrukcji. W ten sposób kończy się faza pobierania instrukcji. Teraz rozpoczyna się faza dekodowania i wykonywania instrukcji. Zawartość licznika rozkazów jest dekodowana (zwykle przez układy PLA (ang. programmable logic arrays) i odpowiednie sygnały sterujące są generowane przez układ sterowania inicjuje to wykonanie instrukcji. Licznik programu zwiększa zawartość o 1 przygotowując adres następnej instrukcji.
DZIAŁANIE MIKROPROCESORA Wykonywanie instrukcji - Pobieranie instrukcji - Dekodowanie - wykonywanie
Definicje: Struktura rozkazu Długość rozkazu słowo lub kilka słów; Kod rozkazu liczba binarna charakterystyczna dla rodzaju operacji (funkcji rozkazu); Pole rozkazu pole kodu operacji + pole argumentów. Rozkaz bez argumentów: Kod operacji Rozkaz z jednym argumentem: Kod operacji Argument Rozkaz z dwoma argumentami: Kod operacji Argument 1 Argument 2
Wykonywanie instrukcji Format instrukcji 1 - bajtowej Przykład instrukcji 2 i 3 - bajtowych Instrukcja 1-bajtowa określa kod instrukcji, tzn. rodzaj operacji wykonywanej przez mikroprocesor. Instrukcja ta składa się z dwóch części. Pierwsza określa niezbędne do wykonania operacje przez poszczególne podzespoły mikroprocesora, druga natomiast adres bloku mikroprocesora (np. akumulator, rejestr itp.) Zazwyczaj instrukcje mikroprocesora są 1-, 2- lub 3-bajtowe. Pierwszy bajt instrukcji określa zawsze kod operacyjny. drugi bajt stanowi operand albo adres operandu (adres strony zerowej pamięci), Podczas wykonywania instrukcji 2- lub 3- bajtowej urządzenie sterujące wykonuje rozkazy kolejnych odwołań do pamięci w celu odczytania drugiego i trzeciego bajtu instrukcji.
METODY STEROWANIA URZĄDZENIAMI WE-WY Najprostszy sposób komunikowania się z urządzeniami zewnętrznymi polega na sterowaniu ich obsługi przez mikroprocesor. Metoda ta określana jest jako programowa obsługa We-Wy (ang. polling). Odbywa się to przez wykonywanie typowych instrukcji We- Wy. Taki sposób może być stosowany tylko w określonych przypadkach, np. przesyłanie aktualnej informacji z mikroprocesora do wyświetlania z automatycznym kasowaniem poprzedniej informacji lub odczytywanie stanu wyjść przetwornika A/C w chwilach wyznaczanych przez mikroprocesor. Obsługa urządzeń we-wy przez mikroprocesor Procesor kontroluje wyróżniony rejestr stanów danego urządzenia We-Wy i w zależności od jego stanu podejmuje odpowiednie działanie. Zwykle jeden wyróżniony bit jest wskaźnikiem żądania obsługi We-Wy. Metoda ta zajmuje dużą część czasu działania procesora przeznaczoną na kolejne operacje przeglądania stanu rejestrów urządzeń, co stanowi jej podstawową wadę, a także uzyskuje się duże opóźnienia między czasem powstania stanów wymagających obsługi a rzeczywistym czasem obsługi urządzenia.
METODY STEROWANIA URZĄDZENIAMI WE-WY Dwie pozostałe metody to: sterowanie przerwaniami, oraz metoda wykorzystująca kanał bezpośredniego dostępu do pamięci DMA (ang. direct memory access). Pierwszy polega na generowaniu przez urządzenia We-Wy tzw. przerwań, w przypadku żądania obsługi. Mikroprocesor odbiera sygnał INT (żądania przerwania), identyfikuje urządzenie zgłaszające przerwanie i podejmuje realizację podprogramu obsługi przerwania. Drugi sposób polega na realizacji bezpośredniego przesyłania informacji między urządzeniami We-Wy a pamięcią. Urządzenie We-Wy przesyła sygnał żądania obsługi do układu sterującego kanał bezpośredniego dostępu, który wysyła do mikroprocesora sygnał HOLD. Mikroprocesor wprowadza wyjścia szyn w stan trzeci i umożliwia bezpośrednią wymianę informacji między pamięcią a urządzeniem We-Wy.
Programowa obsługa We-Wy W przypadku programowej obsługi We-Wy każde urządzenie ma w rejestrze sterującym bit, będący wskaźnikiem żądania obsługi. Identyfikacja urządzenia według metody badania obiegiem" przebiega wg następujących rozkazów : załaduj do akumulatora zawartość rejestru kontrolnego pierwszego urządzenia (A); jeżeli urządzenie żąda obsługi, to następuje skok do podprogramu obsługi urządzenia A; załaduj zawartość rejestru kontrolnego drugiego urządzenia (B) do akumulatora; jeżeli urządzenie żąda obsługi, to następuje skok do podprogramu obsługi urządzenia B itd. Procedura przesyłania informacji z obustronnym potwierdzeniem, polegająca na zawiadamianiu o gotowości przesyłania danych i potwierdzaniu ich przyjęcia (z mikroprocesora do urządzeń zewnętrznych i z urządzeń zewnętrznych do mikroprocesora) jest określona w literaturze angielskiej terminem handshaking. Przed przesłaniem informacji do urządzenia dokonuje się sprawdzenia bitu kontrolnego w celu upewnienia się, że urządzenie jest gotowe do przyjęcia informacji. Przed operacją odczytu informacji z rejestru urządzenia dokonuje się sprawdzenia bitu kontrolnego w celu upewnienia się, że rejestr zawiera rzeczywiście informację do przesiania. Jest to najtańszy sposób obsługi urządzenia We-Wy. Jego realizacja nie wymaga żadnych dodatkowych układów i umożliwia uwzględnienie priorytetu obsługi kontrolowanych urządzeń. Jego wadą jest zbyt długie oczekiwanie na obsługę w przypadku np. żądania obsługi przez ostatnie urządzenie kontrolowane przez program. Obsługę programową można nieco zmodyfikować. Stany linii wskażników mogą być wprowadzone do mikroprocesora równolegle i potem następuje identyfikacja programowa urządzenia żądającego obsługi. Jeżeli linie wskażników układów We-Wy zostaną przyłączone do kodera priorytetowego, to na szynę danych będzie podawany kod urządzenia o najwyższym priorytecie, żądającego obsługi. Przez programowe próbkowanie" stanu wyjścia kodera priorytetowego można realizować obsługę We-Wy z mniejszymi stratami czasu na identyfikację urządzenia, żądającego obsługi (rys. 4.13).
Programowa obsługa We-Wy Programowa obsługa We-Wy z układowo rozwiązaną identyfikacją urządzenia żądającego obsługi
PRZERWANIA Opisana uprzednio technika obsługi We-Wy ma dwie wady: straty czasu mikroprocesora na kontrolowanie stanu rejestrów urządzeń We-Wy, co powoduje długi czas identyfikacji urządzenia, zwłaszcza w metodzie czysto programowej; długi czas oczekiwania na obsługę urządzeń. Wady te usuwa częściowo metoda przerwań. Obsługa urządzeń We-Wy metodą przerwań odbywa się w sposób asynchroniczny. Każde z urządzeń We-Wy jest przyłączone do jednej wspólnej linii przerwań. Mikroprocesor pod koniec każdej instrukcji sprawdza, czy nie pojawił się sygnał żądający przerwania (INT). Jeżeli nie, mikroprocesor wykonuje następną instrukcję. Jeżeli tak, mikroprocesor musi podjąć wykonanie specjalnego podprogramu obsługi przerwania (jeżeli przerzutnik przerwania na to zezwala). W chwili odebrania sygnału przerwania mikroprocesor podejmuje działanie, mające na celu zawieszenie pracy aktualnie wykonywanego programu i zapamiętanie stanu mikroprocesora, umożliwiającego powrót do wykonania zawieszonego programu. Dlatego konieczne jest zapamiętanie wszystkich danych, niezbędnych do kontynuowania zawieszonego programu w chwili zakończenia obsług i przerwania. Pamiętane są m.in. przesłane do stosu zawartości licznika rozkazów oraz innych wybranych rejestrów. W różnych rozwiązaniach mikroprocesorów do stosu są przekazywane dane z różnych rejestrów; jako minimum do stosu zawsze musi być przeniesiona zawartość licznika rozkazów.
PRZERWANIA Inną metodą, dającą krótszy czas identyfikacji urządzenia, które zgłosiło przerwanie, jest metoda łańcuchowa (ang. daisy chain). Po akceptacji sygnału przerwania, mikroprocesor generuje sygnał potwierdzający przyjęcie przerwania (ACK). W opisywanej metodzie urządzenia są przyłączone do mikroprocesora w kolejności wagi priorytetu. Sygnał ACK jest bramkowany w pierwszym urządzeniu i jeżeli generowało ono przerwanie, podaje ono swój numer identyfikacyjny na szynę danych, który następnie jest czytany przez mikroprocesor. Jeżeli urządzenie nie generowało przerwania, sygnał ACK jest przenoszony do drugiego urządzenia itd.
PRZERWANIA Najszybszą metodą obsługi przerwania jest metoda przerwań wektorowych. Umożliwia ona natychmiastową identyfikację urządzenia zgłaszającego przerwanie z uwzględnieniem najwyższego priorytetu przez wygenerowanie adresu podprogramu obsługi przerwania (tzw. wektor). Większość specjalizowanych układów sterujących przerwania (ang. priority interrupt controller PIC) umożliwia realizację przerwań wektorowych. Koder priorytetowy generuje wektor (3 bity), określający numer linii zgłaszającej przerwanie o najwyższym priorytecie. Układ sumy logicznej generuje sygnał INT. Zwykle w układach PIC istnieje tzw, rejestr priorytetu globalnego (n), w którym może być określony tzw. globalny poziom maski. Zawartość tego rejestru jest podawana do komparatora, który decyduje, czy sygnał INT zostanie przekazany na linię IRQ (żądanie przerwania) mikroprocesora czy też nie. Bardziej rozbudowane układy sterujące przerwania zawierają osiem 16-bitowych rejestrów, zawierających wprost adresy podprogramów obsługi danego przerwania, a nie tylko część bitów adresu. Systemy z przerwaniami wektorowymi mogą pracować jako: jednopoziomowe, wielopoziomowe.
PRZERWANIA
PRZERWANIA Na rysunku przedstawiono sekwencje działania mikroprocesora w przypadku przyjęcia sygnału żądania przerwania (IRQ). Aktualnie realizowana instrukcja jest wykonywana do końca, pojawia się sygnał INTA (Tl), określający potwierdzenie przyjęcia przerwania, i następuje skok (T2) do niezbędnego adresu podprogramu obsługi przerwania. Potem (T3) następuje przeniesienie stanu wybranych rejestrów mikroprocesora do stosu i w chwili (T4) rozpoczyna się wykonanie ciągu instrukcji obsługi danego przerwania. Po zakończeniu wykonania podprogramu obsługi przerwania (T5) następuje przeniesienie stanów wybranych rejestrów ze stosu do mikroprocesora, a następnie (T6) jest wykonywana ostatnia instrukcja RET, która powoduje powrót do programu głównego. Jest to ostatnia instrukcja każdego rodzaju podprogramu. W chwili T7 rozpoczyna się wykonywanie podjętego na nowo programu głównego. Czas upływający od chwili T1 do T4 jest nazywany czasem odpowiedzi na przerwanie.
MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW Projektowanie urządzeń cyfrowych przy użyciu układów TTL polegało na opracowaniu algorytmu i odpowiednim doborze i zestawieniu układów realizujących różnorodne funkcje kombinacyjne i sekwencyjne. W systemach mikrokomputerowych funkcje te są głównie realizowane w sposób programowy. Podstawowe cechy programowe mikroprocesorów są wspólne i dlatego znajomość jednego systemu umożliwia szybkie poznanie innego. Do podstawowych części składowych mikroprocesorów uczestniczących w przetwarzaniu danych zalicza się: rejestr akumulatora (ewentualnie kilka rejestrów), rejestry ogólnego przeznaczenia, rejestr bitów warunków, jednostka arytmetyczno-logiczna.
MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW Akumulator pośredniczy zazwyczaj w przekazywaniu danych 2 lub do układów We-Wy oraz otrzymuje dane powstałe w wyniku operacji arytmetyczno-logicznych. Rejestry ogólnego przeznaczenia służą do przechowywania pośrednich wyników, stałych, a także do przechowywania pośrednich adresów. Rejestr bitów warunków zawiera bieżącą informację o stanie procesora oraz o stanie wyników przeprowadzonych operacji. Jednostka arytmetyczno-logiczna umożliwia prowadzenie operacji arytmetycznych i logicznych na danych znajdujących się w akumulatorach, rejestrach ogólnego przeznaczenia oraz w pamięciach. Układy funkcjonalne procesora związane ze sterowaniem to licznik rozkazów, który zawiera adres pamięci, pod którym znajduje się następna instrukcja programu, rejestr instrukcji zawierający kod aktualnie wykonywanej instrukcji, wskażnik stosu wskazujący aktualnie dostępną lokację stosu, jednostka dekodująca i sterująca oraz wzmacniacze adresów i danych. Poszczególne typy mikroprocesorów różnią się zbiorami wykonywanych instrukcji oraz sposobami adresowania (pobierania danych i operandów). Podstawowe struktury programów tworzone z poszczególnych instrukcji są identyczne dla wszystkich procesorów niezależnie od wielkości komputera (mikrokomputera).
DZIAŁANIE MIKROPROCESORA (PRZYPOMNIENIE) Wykonywanie instrukcji Każda instrukcja w mikroprocesorze jest wykonywana w następujących fazach: pobieranie instrukcji (ang. FETCH), dekodowanie instrukcji, wykonanie instrukcji.
DZIAŁANIE MIKROPROCESORA Wykonywanie instrukcji Faza pobierania instrukcji rozpoczyna się od podania zawartości licznika rozkazów na szynę adresową (rys. 3.18a). Jednocześnie z mikroprocesora jest generowany do pamięci programu sygnał Czytaj". Po czasie równym co najmniej czasowi dostępu do pamięci od wejść adresowych, informacja 8-bitowa z pamięci pojawia się na szynie danych. Informacja ta jest wpisywana do rejestru instrukcji. W ten sposób kończy się faza pobierania instrukcji. Teraz rozpoczyna się faza dekodowania i wykonywania instrukcji. Zawartość licznika rozkazów jest dekodowana (zwykle przez układy PLA (ang. programmable logic arrays) i odpowiednie sygnały sterujące są generowane przez układ sterowania inicjuje to wykonanie instrukcji. Licznik programu zwiększa zawartość o 1 przygotowując adres następnej instrukcji.
DZIAŁANIE MIKROPROCESORA Wykonywanie instrukcji - Pobieranie instrukcji - Dekodowanie - wykonywanie
Definicje: Struktura rozkazu Długość rozkazu słowo lub kilka słów; Kod rozkazu liczba binarna charakterystyczna dla rodzaju operacji (funkcji rozkazu); Pole rozkazu pole kodu operacji + pole argumentów. Rozkaz bez argumentów: Kod operacji Rozkaz z jednym argumentem: Kod operacji Argument Rozkaz z dwoma argumentami: Kod operacji Argument 1 Argument 2
Wykonywanie instrukcji Format instrukcji 1 - bajtowej Przykład instrukcji 2 i 3 - bajtowych Instrukcja 1-bajtowa określa kod instrukcji, tzn. rodzaj operacji wykonywanej przez mikroprocesor. Instrukcja ta składa się z dwóch części. Pierwsza określa niezbędne do wykonania operacje przez poszczególne podzespoły mikroprocesora, druga natomiast adres bloku mikroprocesora (np. akumulator, rejestr itp.) Zazwyczaj instrukcje mikroprocesora są 1-, 2- lub 3-bajtowe. Pierwszy bajt instrukcji określa zawsze kod operacyjny. drugi bajt stanowi operand albo adres operandu (adres strony zerowej pamięci), Podczas wykonywania instrukcji 2- lub 3- bajtowej urządzenie sterujące wykonuje rozkazy kolejnych odwołań do pamięci w celu odczytania drugiego i trzeciego bajtu instrukcji.
MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW Instrukcje Podstawowymi instrukcjami w różnych typach mikroprocesorów są: instrukcje przesuwania danych, instrukcje arytmetyczno-logiczne, instrukcje skoków, instrukcje systemowe. Instrukcje przesuwania danych powodują przesunięcie danych między rejestrami procesora a pamięcią, między rejestrami mikroprocesora itp. Instrukcje arytmetyczno-logiczne modyfikują dane zgodnie z sygnałami arytmetycznymi lub logicznymi: dodawania, odejmowania, mnożenia, dzielenia, zmniejszenia (zwiększenia) o stałą, operacji AND, OR, EXCLUSIVE OR, uzupełnienia, przesunięcia itp.
MOŻLIWOŚCI PROGRAMOWE MIKROPROCESORÓW Rys. Instrukcja dostępu do pamięci
INSTRUKCJE Rys. Wykonywanie instrukcji dodawania Rys. Instrukcja przesuwania
INSTRUKCJE Instrukcje skoków powinny umożliwiać realizację skoków bezwarunkowych w dowolne miejsce pamięci oraz skoków warunkowych. W skład tej grupy instrukcji zalicza się instrukcje bezwarunkowego i warunkowego wywołania i powrotu z podprogramu. Do instrukcji systemowych można zaliczyć instrukcje umożliwiające: realizację operacji przerwania programowego, powrotu z obsługi przerwania, maskowania i zezwalania na przerwanie oraz czekanie na przerwanie; - ustawianie lub zerowanie wskaźników (instrukcje testujące); - realizację operacji oczekiwania; - realizację operacji We-Wy.
INSTRUKCJE Sposoby adresowania Dużą część programu zajmują zwykle operacje przesuwania danych, do których można zaliczyć: przesuwanie danych do mikrokomputera z wejść i z mikrokomputera do wyjść (operacje We-Wy); przesuwanie danych w pamięci (operacje: pamięć -> pamięć); przesuwanie danych w rejestrach (operacje: rejestr-> rejestr); przesuwanie danych między pamięcią a rejestrami (operacje: rejestr pamięć). Operacja przesuwania danych wymaga określenia miejsca położenia źródła i miejsca przeznaczenia. Do określenia położenia źródła i miejsca przeznaczenia są stosowane różne sposoby adresowania. Umożliwiają one określenie położenia operandu występującego w instrukcji.
SPOSOBY ADRESOWANIA Wyróżnia się następujące podstawowe sposoby adresowania: natychmiastowe (ang. immediate), implikowane (ang. implied), bezpośrednie (ang. direct), pośrednie (ang. indirect), indeksowe (ang. indexed), względne (ang. relative), rejestrowe pośrednie (ang. register indirect). Są również możliwe kombinacje adresowania z wymienionych powyżej, a więc: pośrednie indeksowe (ang. indexed indirect), indeksowe pośrednie (ang. indirect indexed), implikowane bezpośrednio (ang. implied immediate).
SPOSOBY ADRESOWANIA Rys.1 Adresowanie bezpośrednie Rys.2 Adresowanie pośrednie Adresowanie implikowane odnosi się do instrukcji 1-bajtowych, w których informacja o źródle lub przeznaczeniu danych znajduje się w kodzie instrukcji. Przykładowo dla mikroprocesora 8080 instrukcja ADD H oznacza dodaj do akumulatora zawartość rejestru H i wynik umieść w akumulatorze". Adresowanie bezpośrednie odnosi się do instrukcji, w których adres operandu jest zawarty w bajcie rozkazowym lub następuje bezpośrednio po nim (rys. 1). Adresowanie bezpośrednie odnosi się zwykle do instrukcji 3-bajtowych, w których dwa ostatnie bajty zawierają adres operandu umieszczonego w pamięci. W niektórych mikroprocesorach jest możliwe określenie adresu jednym bajtem, odnoszącym się do zerowej strony pamięci. Adresowanie bezpośrednie jest stosowane przez programistę wówczas, gdy zna on położenie (adres) operandu. Adresowanie pośrednie dotyczy instrukcji, w których jest zawarty adres. pośredni, pod którym znajduje się adres operandu (rys. 2). Ta metoda adresowania może być stosowana w przypadku, gdy program nie ma przyporządkowanego na stałe obszaru pamięci, w którym działa, a adres. operandu jest obliczany w trakcie programu
SPOSOBY ADRESOWANIA Adresowanie natychmiastowe dotyczy instrukcji 2- lub 3-bajtowych, w których pierwszy bajt zawiera kod instrukcji, a bajty następne zawierają. operand (rys. 4.46). Adresowanie natychmiastowe jest stosowane przez programistę do ładowania danych stałych, znanych podczas pisania programu. Adresowanie indeksowe polega na wyznaczaniu adresu operandu przez sumowanie zawartości rejestru indeksowego (mikroprocesora) i adresu zawartego wewnątrz instrukcji (rys. 4.48); jest stosowane w tych mikroprocesorach, które zawierają rejestry indeksowe. Adresowanie indeksowe jest stosowane w tym przypadku, gdy konieczny jest dostęp do danych, umieszczonych kolejno w pamięci. Założono, że należy uzyskać sekwencyjny dostęp do danych w pamięci, zawartych między adresami N1 i N2. W tym przypadku instrukcja zawiera N1, a w rejestrze indeksowym umieszcza się wartość N2 N 1+1. Tworząc pętlę, ze zmniejszającą się wartością rejestru indeksowego i warunkiem na wyzerowanie rejestru, można uzyskać sekwencyjny dostęp do danych, umieszczonych w bloku pamięci.
Przesunięcie SPOSOBY ADRESOWANIA Rys.1 Adresowanie względne Rys.2 Adresowanie rejestrowe Adresowanie względne (rys. 1) jest stosowane w programach, które mogą pracować w dowolnym miejscu pamięci. Jest stosowane przy wykonywaniu instrukcji skoku. Adres operandu jest tworzony przez dodanie zawartości licznika rozkazów do wartości przesunięcia zawartego w instrukcji. Przesunięcie może być dodatnie lub ujemne. Adresowanie rejestrowe pośrednie polega na bezpośrednim wskazaniu w instrukcji numeru rejestru mikroprocesora, w którym znajduje się operand (rys. 2).
SPOSOBY ADRESOWANIA Rys.1. Adresowanie rejestrowe pośrednie Rys.2. Adresowanie pośrednie indeksowe Adresowanie rejestrowe pośrednie stanowi modyfikację adresowania indeksowego bez adresu bazowego (rys. 1). W tym sposobie adresowania adres operandu jest zawarty w rejestrze mikroprocesora, który jest wskazany w instrukcji. Sposób ten umożliwia dostęp do operandu w różnych miejscach pamięci bez zmiany programów. Adresowanie pośrednie indeksowe adres operandu jest sumą zawartości rejestru indeksowego i adresu bazowego zawartego w pamięci i wskazanego w instrukcji (rys. 2).
SPOSOBY ADRESOWANIA Rys. 1. Adresowanie indeksowe pośrednie Adresowanie indeksowe pośrednie adres operandu jest zawarty w miejscu pamięci określonym przez sumowanie zawartości rejestru indeksowego i adresu bazowego z instrukcji (rys. 1).
Podstawowe struktury programów Programy systemów mikroprocesorowych są realizowane z kilku podstawowych struktur, a mianowicie: 1. prostego, sekwencyjnego ciągu instrukcji; 2. rozgałęzień warunkowych programu; 3. pętli programu; 4. podprogramów które mogą zawierać wcześniej wymienione struktury. Prosta sekwencja ciągu instrukcji składa się z instrukcji umieszczonych kolejno w pamięci i wykonywanych kolejno jedna po drugiej. Na rysunku 42 przedstawiono przykładową prostą sekwencję ciągu instrukcji mikroprocesora 8080. Rozgałęzienia warunkowe programu powstają w wyniku badania zawartości rejestru wskaźników i wykonania zmiany zawartości licznika rozkazów. Skokowa zmiana zawartości licznika rozkazów jest uwarunkowana określonym stanem wskaźników: zero, przeniesienia; znaku, parzystości i innych.
Podstawowe struktury programów Rys. Prosta sekwencja instrukcji: a) lista instrukcji; b) tablica zawartości pamięci; c) schemat czynnościowy. Prosta sekwencja ciągu instrukcji składa się z instrukcji umieszczonych kolejno w pamięci i wykonywanych kolejno jedna po drugiej. Na rysunku przedstawiono przykładową prostą sekwencję ciągu instrukcji mikroprocesora 8080. Rozgałęzienia warunkowe programu powstają w wyniku badania zawartości rejestru wskaźników i wykonania zmiany zawartości licznika rozkazów. Skokowa zmiana zawartości licznika rozkazów jest uwarunkowana określonym stanem wskaźników: zero, przeniesienia; znaku, parzystości i innych. W wyniku powstania określonego stanu tych wskaźników następuje wpisanie do licznika rozkazów adresu skoku i wykonanie programu według nowej sekwencji.
Podstawowe struktury programów Rozgałęzienia warunkowe są realizowane na podstawie instrukcji skoków warunkowych. Przykładowo, w mikroprocesorach korzysta się z następujących instrukcji skoków warunkowych: skocz, jeśli bit zero jest równy 1, skocz, jeśli bit przeniesień jest równy 1, skocz, jeśli wartość akumulatora jest dodatnia itp. Przykład programu napisanego w języku Assembler 8080, ilustrujący rozgałęzienie warunkowe, przedstawiono na rys. obok. Rys. Rozgałęzienie warunkowe programu: a) lista instrukcji; b) tablica zawartości pamięci; c) schemat czynnościowy.
Podstawowe struktury programów Rys. Pętla warunkowa programu: a) lista instrukcji; b) tablica zawartości pamięci; c) schemat czynnościowy Pętla warunkowa programu polega na wielokrotnym wykonywaniu pewnego fragmentu programu aż do wystąpienia zmiany badanego wskaźnika. Na rysunku przedstawiono przykład pętli programowej. Wyjście z tej pętli jest uwarunkowane wyzerowaniem akumulatora
Podstawowe struktury programów Rys. Przykłady pętli warunkowych programu: a) badanie warunku poprzedza wykonanie funkcji; b) wykonanie funkcji poprzedza badanie warunku; c) badanie warunku następuje po wykonaniu funkcji 1 a przed wykonaniem funkcji 2. Na rysunku przedstawiono trzy podstawowe typy pętli warunkowych. W przypadku gdy funkcja występuje przed badaniem warunku, należy zwrócić uwagę na prawidłowe ustawienie wartości wskaźników. Należy też skontrolować, które operacje i w jaki sposób zmieniają wskaźniki.
Podstawowe struktury programów Rys. Metoda korzystania z podprogramu. W wielu przypadkach pewne sekwencje programowe powtarzają się w programie wielokrotnie. Wielokrotny ich zapis w pamięci jest nieekonomiczny i dlatego stosuje się w głównym ciągu programu instrukcje wywoływanie ich jako określonych podprogramów. Podczas wywoływania podprogramu automatycznie jest chroniona w stosie zawartość niektórych rejestrów procesora (licznik rozkazów itp.). Pozostałą część rejestrów można chronić programowo. Na końcu każdego podprogramu jest umieszczona instrukcja lub grupa instrukcji powrotu do programu głównego, które wyprowadzają ze stosu przechowywaną zawartość licznika rozkazów i pozostałych rejestrów. Na rysunku przedstawiono przykład korzystania przez główny ciąg programu z podprogramu mnożenia. W programie tym ustawia się wstępnie w rejestrach B, C dane, na których dokonuje się operacji mnożenia. W przypadku mikroprocesora 8080 wywołanie podprogramu jest determinowane instrukcją CALL, po której zostaje wprowadzony adres wywoływanego podprogramu.
Podstawowe struktury programów (obsługa podprogramów cd) Przykładowo, wywołanie podprogramu umieszczonego pod adresem 14 5FH wymaga następującego ciągu danych: CALL CD instrukcja wywołania 5F 14 adres podprogramu Po instrukcji CALL zostaje automatycznie wysłana do stosu zawartość licznika rozkazów. Zawartość pozostałych rejestrów jest wysyłana do stosu na podstawie następujących instrukcji: PUSH B przesłanie zawartości pary rejestrów BC do stosu, PUSH D przesłanie zawartości pary rejestrów DE do stosu, PUSH H przesłanie zawartości pary rejestrów HL do stosu, PUSH PSW przesłanie zawartości pary rejestrów akumulatora i rejestru wskaźników. Powrót do programu głównego jest określony instrukcją RET (Powrót). W wyniku tej instrukcji do licznika rozkazów jest ładowana zawartość umieszczona na szczycie stosu. Jest to zazwyczaj adres instrukcji w głównym ciągu programu następujący po instrukcji CALL. Przed powrotem do głównego ciągu instrukcji należy załadować rejestry procesora wartościami, które były w nich w chwili wywołania programu obsługi. W celu prawidłowego załadowania rejestrów należy ładować rejestry w odwrotnej kolejności, niż były one uprzednio chronione.
Podstawowe struktury programów (obsługa podprogramów cd) W mikroprocesorach Intela x86 do ładowania rejestrów mikroprocesora zawartością stosu służy grupa instrukcji POP. Na rysunku przedstawiono przykład podprogramu (PP1), który chroni zawartość wszystkich rejestrów mikroprocesora na czas wykonywania żądanych operacji (właściwego podprogramu). Rys. Przykład podprogramu PP1 zawierającego grupę instrukcji ochrony zawartości rejestrów mikroprocesora i grupę instrukcji załadowania rejestrów procesora przechowywaną w stosie informacją. Przed powrotem do głównego programu podprogram PP1 ładuje rejestry mikroprocesora przechowywaną w stosie informacją. Przechowywanie zawartości rejestrów mikroprocesora w stosie w czasie wykonywania podprogramu PP1 stwarza możliwości łatwego programowania głównego programu.
Podstawowe struktury programów (obsługa podprogramów cd) Rys. Stany stosu w kolejnych fazach wykonywania i wywoływania podprogramów PP1 SP-wskaźnik stosu; PC-licznik rozkazów; PSW,A,B,C,D,E,H,L rejestry mikroprocesora. Diagram przedstawia stan stosu w poszczególnych fazach wywoływania podprogramu oraz ochronę zawartości rejestrów i powrotu do głównego programu. Z tego rysunku wynika, że nieprawidłowa kolejność wyprowadzania zawartości rejestrów ze stosu spowoduje zmianę zawartości rejestrów. Korzystanie z podprogramów może być wielopoziomowe, tzn. każdy program może korzystać z innego podprogramu. Jedynym ograniczeniem dla liczby poziomów jest pojemność stosu,