Rozdział 1 - Elementy Cyfrowe i Mikroprocesory PDF

Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...

Summary

Podręcznik przedstawia podstawowe układy cyfrowe jak bramki logiczne, multipleksery, dekodery, rejestry, i pamięć RAM. Są prezentowane ich funkcje i schematy. Opis zawiera podstawowe pojęcia z zakresu elektroniki cyfrowej, odpowiednie dla studiów wyższych.

Full Transcript

1. Elementy cyfrowe i mikroprocesory 8-bitowe 7 1.1. Podstawowe układy cfrowe ___________________________________________________________ Układy bramkujące Układy cyfrowe są zbudowane z elementarnych układów, zwanych bramkami logicz- nymi,...

1. Elementy cyfrowe i mikroprocesory 8-bitowe 7 1.1. Podstawowe układy cfrowe ___________________________________________________________ Układy bramkujące Układy cyfrowe są zbudowane z elementarnych układów, zwanych bramkami logicz- nymi, realizujących podstawowe operacje logiczne. Zestawienie symboli podstawowych bramek logicznych przedstawiono w tablicy 1.1. H to poziom wysoki oraz L poziom niski. Niektóre z tablic operacji opisano za pomocą po- ziomów logicznych 0 i 1, dla dodatniej konwencji poziomów: 1 odpowiada wysokiemu po- ziomowi napięcia (H) oraz 0 odpowiada poziomowi niskiemu (L). Cyfrą 3 oznaczono trzeci stan logiczny, wysokiej impedancji zmiennej wyjściowej. Bramki logiczne umożliwiają realizację bardziej złożonych układów cyfrowych, których przeznaczeniem jest: - krótkotrwałe przechowywanie wektorów binarnych, - przekazywanie wektorów binarnych między różnymi układami, - przetwarzanie wektorów informacji, - sterowanie procesem przetwarzania informacji. Przykład prostego układu bramkującego pokazano na rys. 1.1, gdzie na wyjściu ukła- du (WY) jest powtarzana informacja wejściowa (WE) wtedy, gdy sygnał bramkujący B = 1. Tego typu blok wykorzystuje się we wszystkich układach synchronizacji pisania i czytania danych. 8 Tablica 1.1 Symbole podstawowych bramek logicznych Nazwa bramki Symbol Tabela operacji x y Wtórnik x y=x L L H H x y Invertor - negacja x y=x L H H L x 1 x2 y Alternatywa - OR x1 y = x1+x2 x2 LL L LH H HL H HH H NOR x 1 x2 y x1 y = x1+x2 x2 0 0 1 0 1 0 1 0 0 1 1 0 x 1 x2 y Iloczyn - AND x1 y = x1x2 x2 0 0 0 0 1 0 1 0 0 1 1 1 x 1 x2 y NAND x1 y = x1x2 0 0 1 x2 0 1 1 1 0 1 1 1 0 Bramka trójstanowa x 1 x2 y x1 y LL 3 LH L x2 HL 3 HH H 9 WE WY B - sygnał bramkujący ( ) Rys. 1.1. Przykład układu bramkującego Multipleksery i demultipleksery Do przełączania źródeł informacji stosowane są układy zwane multiplekserami. Na jedno wyjście przepisywana jest informacja z jednego wybranego wejścia. Schemat takiego układu pokazano na rys. 1.2. Dekoder przełącza na wyjście układu jedną z czterech linii wejściowych (od 0 do 3). O tym która z linii wejściowych jest czynna decydują wartości zmiennych adresowych a0,a1 dekodera..Liczba adresowanych linii wejściowych jest potęgą liczby zmiennych adresowych. Jeśli liczba zmiennych adresowych jest równa n, to liczba adresowanych linii wejściowych jest równa k = 2n. a) X0 X1 Y X2 X3 b) a0 X0 X1 a1 MUX Y X2 X3 dekoder a0 a1 Rys. 1.2. Schemat multipleksera (MUX) o czterech wejściach informacyjnych a) schemat ideowy, b) symbol multipleksera 10 Równoległe połączenie multiplekserów 1-bitowych daje multiplekser wielobitowy, którego przykład pokazano na rys. 1.3. a) b) 0 1 2 3 (A0 - A3) (A0 - A3) MUX Y0 - Y3 B B C Y0 - Y3 D C a0 D a1 Rys. 1.3. Przykład multipleksera czterobitowego a) schemat ideowy, b) symbol zastępczy Dwie linie adresowe a0 a1 przełączają odpowiednie linie A0-A3 czterech 1-bitowych multiplekserów (0,1,2,3), na odpowiadające im wyjścia Y. Gdy a0 a1 = 00, na wyjścia Y0-Y3 podłączone zostają przewody grupy (portu) A każdego z multiplekserów. Analogicznie prze- łącza się pozostałe wejścia portów B, C i D; zgodnie z przyporządkowanymi im wartościami zmiennych adresowych. Operację przełączania w drugą stronę, z magistrali na porty wyjściowe, realizuje układ zwany demultiplekserem. Zasadę działania demultipleksera ilustruje układ pokazany na rys. 1.4. Linie adresowe a0 a1 przełączają magistralę X na odpowiednie porty wyjściowe A, B, C i D. A = X dla a0 a1 = 00 , B = X dla a0 a1 = 01 , C = 10 dla a0a1 = 10 , D = X dla a0 a1 = 11. Multiplekser i demultiplekser należą do grupy układów cyfrowych zwanych selek- torami. X0 A X1 X2 Y0 B koder X DMX X3 1z8 Y1 C X4 X5 Y2 D X6 X7 a0 a1 Rys. 1.4. Oznaczenia demultipleksera Rys. 1.5. Oznaczenia kodera 1 z 8 Kodery i dekodery Koderem nazywamy układ realizującym operacje kodowania informacji, tzn. przypo- rządkowania zbiorowi elementów informacji określonych wektorów binarnych. Na rys. 1.5 podano przykład kodera stanów zadziałania jednego z ośmiu sygnałów wejściowych (szyfra- tora 1 z 8) za pomocą 3-bitowych wektorów binarnych, zgodnie z zasadą kodowania 2n = 23 = 8, gdzie n oznacza liczbę bitów wektora kodującego. Dekoder wykonuje operacje odwrotne do operacji kodera, tzn. zamienia wartości wejściowych wektorów binarnych na odpowiada- jący im aktywny sygnał wyjściowy. Elementy i układy pamięci Zapis/Odczyt - RAM Podstawowym układem pamięci półprzewodnikowej jest przerzutnik, którego schemat ideowy przedstawiono na rys. 1.6. a) b) s s Q Q Q r Rys. 1.6. Schemat ideowy (a) i symbol (b) jednobitowej komórki pamięci Zapis/Odczyt Jest to 1-bitowa komórka pamięci statycznej typu zapis/odczyt. W tym elemencie pamięci aktywny jest niski poziom sygnałów wejściowych - s i r. Wartość s = 0 (s - set) usta- wia wartość 1 na wyjściu Q natomiast r = 0 (r - reset) zeruje zmienną wyjściową Q. Zespół przerzutników przeznaczonych do krótkotrwałego przechowywania wektora informacji cyfrowej nazywamy rejestrem (rys. 1.7). 12 WY (OUT) LE 0 1 2 3 czytaj (RD) Serial IN Stb/Clock 0 1 2 3 pisz (WR) WE (IN) Rys. 1.7. Symbol czterobitowego rejestru równnoległego Rejestr przyjmuje dane wprowadzane równolegle na przewodach wejściowych WE/IN (0, 1, 2, 3) lub wprowadzane szeregowo, na przewodzie Serial IN. Przełączanie trybu wpro- wadzania danych szeregowo lub równolegle odbywa się za pomocą linii sterującej LE. Sygnał WR - pisz (write). Dane można wprowadzać szeregowo (Serial IN) w takt impulsu zegaro- wego - Clock. Sygnał zegarowy jest też nazywany sygnałem synchronizującym. Dane są czytane na przewodach WY/OUT synchronicznie w takt sygnału RD - odczy- tu. Rejestry z równoległym wprowadzaniem danych i równoległym odczytem są elementem składowym układów zwanych pamięcią operacyjną systemu cyfrowego (Rys. 1.8). W pamięci operacyjnej przechowywane są ciągi wielobitowych wektorów binarnych reprezentujące dane lub kody sterujące programu. Możliwość natychmiastowego zapisu i odczytu została nazwana dostępem swobodnym lub dostępem natychmiastowym (RAM - Random Access Memory). Na wejścia adresowe pamięci (Adr) zadawane są wektory binarne, które dekoder zamienia na 1 z n aktywnych sygnałów selekcji rejestrów pamięciowych, po- numerowanych od 0 do n - 1. Zadziałanie dekodera jest uwarunkowane poziomem aktyw- nym dodatkowego sygnału bramkującego CS (chip select) selekcji bloku RAM. Zaadresowa- ny rejestr pamięciowy zostaje podłączony do linii DANE WE/WY. Kierunek transmisji danych do lub z rejestru pamięciowego określają poziomy sygna- łów zapisu WR/Write i odczytu RD/Read. Układ Z/O (zapis/odczyt) zawiera elementy przełą- czania kierunku transmisji, zwane zwrotnicami, wzmacniacze sterujące liniami danych oraz wzmacniacze separujące linie danych od bloku rejestrów pamięciowych. Jest to stan linii różny od 0 lub 1, zwany stanem wysokiej impedancji lub trzecim stanem (porównaj tabl. 1.1). Stos 13 Pamięcią typu zapis odczyt przyjmującą dane w określonym porządku (od adresu wyższego do niższego) jest również stos. Na rys 1.8 b przedstawiono zasadę wprowadzania (Push) danych do pamięci typu STOS. Odczyt danych ze stosu (Pop) odbywa się w kolejno- ści odwrotnej. Jako stos wykorzystywana jest pamięć RAM. Komórki pamięci są adresowane specjalnym rejestrem liczący, zwanym wskaźnikiem stosu, którego zawartość można zwięk- szać lub zmniejszać programowo (Pop, Push) oraz automatycznie w trakcie obsługi żądań przerwania (omówionych w dalszej części książki). a) 0 CS 1 2 Adr dekoder n-1 pisz (WR) bufor Z/O czytaj (RD) Dane WE/WY b) D2 D1 D0 D1 D0 D0 Rys 1.8. Blok pamięci RAM a) schemat ideowy pamięci typu zapis/odczyt; b) Zasada wpisywania danych do stosu. Zwrotnica Schemat ideowy 1-bitowej zwrotnicy 3-stanowej pokazano na rys.1.9. Przełącza ona kierunek transmisji danych z punktu A do B lub z punktu B do A. Odpowiednio do wartości sygnału bramkującego (E) jest aktywny jeden lub drugi ze wzmacniaczy 3-stanowych układu. Moduły zintegrowane wzmacniaczy 3-stanowych zawierają kilka równolegle połączonych układów 1-bitowych podłączonych do wspólnej szyny transmisyjnej zwanej magistralą. 14 3 A B 3 E Rys 1.9. Schemat ideowy zwrotnicy 3-stanowej Pamięci stałe - ROM Elementy pamięci RAM cechuje ulotność zapisanych danych, co oznacza, że po wyłączeniu napięcia zasilania i ponownym jego załączeniu zapisane wcześniej w pamięci wektory informacji binarnej nie zostają zachowane. Na rys.1.10 przedstawiono schemat ideowy fragmentu matrycy tranzystorowej, która funkcjonuje podobnie jak pamięć. Na wyjściach WY są odbierane dane odpowiadające stanowi zainstalowania tranzy- storów. Funkcję sygnałów adresowych (ADR 0, 1,...) spełniają linie sterowania bramek. Aktywny poziom sygnału sterującego bramkami tranzystorów matrycy odpowiada warto- ściom 0 na wyjściach z zamontowanym tranzystorem. Brak tranzystora w polu adresacji odpowiada wartości 1 na tym wyjściu (zakładając, że 1 = UDD). Zapis informacji do pamięci polega na wykonaniu określonych operacji na etapie produkcji takich pamięci lub zniszczeniu połączeń dla tranzystorów zbędnych. Oznacza to jedynie możliwość odczytu informacji uprzednio zapisanej (Read Only Memory). 15 a) WY0 WY1 U DD U DD 0 ADR 1 2 b) WY0 WY1 ADR 0 1 2 Rys 1.10 Komórka pamięci ROM a) schemat ideowy b) uproszczony schemat zastępczy Istotną cechą tych układów jest niezmienność ich zawartości po wyłączeniu i ponow- nym załączeniu napięcia zasilania. Liczniki Liczniki są układami, w których zapisana informacja, czy odpowiadająca jej wartość dziesiętna, może zostać zwiększona lub zmniejszona o jeden, czasem o zadaną wartość więk- szą od jeden. Na rys. 1.11 pokazano oznaczenia licznika binarnego taktowanego sygnałem „clock”. Zadana na wejściach WE wartość początkowa jest powiększana, gdy aktywny jest sygnał INC (Increment) lub pomniejszana dla aktywnego sygnału DEC (Decrement). 16 WY Clock licznik binarny INC DEC WE Rys.1.11. Oznaczenia podstawowego licznika binarnego Jednostka Arytmetyczno-Logiczna (ALU) Systemy obliczeniowe realizują operacje arytmetyczne lub operacje logiczne (polega- jące na badaniu spełnienia założonego warunku). Wymienione operacje wykonuje układ zwany jednostką arytmetyczno-logiczną (ALU - Arithmetic Logic Unit). Operacje są wyko- nywane na dwóch wektorach binarnych zwanych operandami (rys. 1.12). wskaźniki (RF) A ALU Y B C Rys 1.12. Oznaczenia sygnałów jednostki Arytmetyczno-Logicznej (ALU) Na wejściach programujących C zadawany jest rodzaj operacji, której poddane zostają operandy A i B. Wynik operacji przedstawia wartość wektora Y oraz wartości wskaźników RF - rejestru flagowego (rejestru wskaźników). Bity flagowe przyjmują charakterystyczne dla określonych operacji wartości, na przykład bit Z = 1 (wskaźnik zera) dla spełnienia operacji porównania A = B, czy S = 1 (znak) gdy spełniona jest nierówność A > B. Skala integracji Układy cyfrowe o typowej funkcji (jak: liczniki, rejestry, pamięci czy układy arytme- tyczno-logiczne) produkuje się w postaci jednego układu elektronicznego zwanego układem scalonym lub zintegrowanym. W latach siedemdziesiątych stosowano formalną klasyfikację układów scalonych o tzw. małej (SSI), średniej (MSI) lub dużej (LSI) skali integracji, w 17 której kryterium podziału stanowiła liczba tranzystorów we wspólnej strukturze elektronicz- nej. Nieustanny wzrost stopnia upakowania elementów scalonych spowodował, że wprowa- dzone liczbowe wagi podziału układów zintegrowanych nie odpowiadają realiom technolo- gicznym. Wiadomo na pewno, że mała skala integracji oznacza kilkadziesiąt tranzystorów w układzie a bardzo duża skala integracji (VLSI) to kilkadziesiąt lub kilkaset milionów tranzy- storów w układzie scalonym. 1.2. Podstawowe moduły komputera ___________________________________________________________ 18 Mikroprogramowane sterowanie Operacje arytmetyczne realizowane w zapisie dwójkowym są wykonywane jako sekwencja operacji składowych (dodawanie, przesunięcia i dopełnienie - negacja). Zadania wykonywane w jednym takcie zegarowym zwane są mikrooperacjami. Sekwencja takich mikrooperacji zwana jest mikroprogramem zadanej operacji arytmetycznej. Na rys. 1.13 przedstawiono schemat blokowy mikroprogramowanego układu sterującego. Na liniach wejściowych kod rozkazu podany zostaje wektor binarny będący adresem początku mikro- programu odpowiadającego temu rozkazowi. Kod rozkazu zostaje wprowadzony do Rejestru Adresu mikrorozkazów (RA), którego zawartość adresuje odpowiednią komórkę pamięci ROM, gdzie rezydują wektory sterujące układami wykonawczymi procesora i komputera. Zawartość wskazanej przez RA komórki pamięci zostaje wprowadzona do Rejestru Mikro- rozkazu (RM). Jego zawartość zadaje jednostce arytmetyczno-logicznej kod mikrooperacji oraz steruje pracą wszystkich elementów składowych układu cyfrowego –sygnałami P1 - Pk-1. Ostatni z tych sygnałów (Pk ) steruje przebiegiem sekwencji mikroprogramu. Gdy Pk = 0, wówczas do RA w ciągu mikroprogramu dla zadanego kodu rozkazu jest wprowadzany wek- tor adresowy następnego mikrorozkazu (i+1). W przedostatnim kroku mikroprogramu zostaje odczytany następny kod rozkazu, a w ostatnim kroku mikroprogram, sygnałem Pk = 1, otwar- ta zostaje droga transmisji dla pierwszego wektora drugiego rozkazu. Układ sterowania, opisany w poprzednim rozdziale, generuje ciągi wektorów binarnych zapisane w pamięci mikroprogramu. 19 RM kod mikrooperacji } P1 - Pk-1 pamięć mikroprogra- mu (ROM) adres Pk i+1 RA kod rozkazu Rys 1.13. Schemat ideowy układu mikroprogramowanego sterowania RA - Rejestr Adresu, RM - Rejestr Mikrorozkazu Po dodaniu do bloku pamięci modułu RAM (rys.1.14) możliwe jest modyfikowanie mikroprogramów, dzięki wektorom binarnym wprowadzanym za pomocą linii wejściowych WE/WY. Są to bieżące dane dla elementów mikroprogramu rezydującego w pamięci programu ROM. Ponadto można łączyć ze sobą rezydujące w pamięci ROM sekwencje sterowania w mikroprogramy wielomodułowe, za pomocą danych czytanych z komórek pamięci RAM. Pokazany na rys. 1.14 układ jest sterownikiem binarnym, w którego program pracy może ingerować jego użytkownik. W ten sposób działają niektóre sterowniki przemysłowe o programach pracy uzależnionych od wartości wektorów zadanych na liniach WE lub od wyników operacji z poprzednich kroków. Obliczenia arytmetyczne można wykonać w zapisie binarnym a bieżący wynik może warunkować realizację kroku następnego w sekwencji sterowania, tzn. alternatywnie wzglę- dem wartości badanej. Alternatywa należy do grupy operacji logicznych, stąd urządzenie cyfrowe wykonające operacje obliczeniowe - arytmetyczne i operacje badania warunków nazywamy układem lub jednostką arytmetyczno - logiczną (ALU - rys. 1.12). Jednostkę arytmetyczno-logiczna wraz ze współpracującym z nią układem sterowania nazwano proce- sorem. 20 WE/WY RAM RMR ALU - kod mikrooperacji } P1 - Pk-1 pamięć mikroprogra- mu (ROM) Pk adres i+1 RAMR kod rozkazu Rys 1.14. Schemat ideowy sterownika mikroprogramowanego Na rys. 1.15 przedstawiono mikroprogramowany układ zawierający podstawowe elementy urządzenia przetwarzającego zwanego komputerem. Procesor jest elementem składowym komputera. magistraly adresów i danych blok rejestrów układy ROM sprzęgające RAM i ALU dekodery sterowanie adresów WE/WY Rys. 1.15. Schemat blokowy komputera ALU (Arithmetic Logic Unit) jest jednostką arytmetyczno-logiczną komputera, która realizuje podstawowe operacje arytmetyczne: binarne dodawanie i odejmowanie oraz ope- racje logiczne: AND, OR i EXCLUSIVE-OR. Sterowanie (CU - Control Unit) jest jednostką sterującą realizacją mikroprogramów za pomocą ALU i układów z nią współpracujących. Procesor zawiera ALU oraz jednostkę sterującą. Zwany jest centralnym układ przetwarza- jący - CPU (Central Processing Unit) komputera. Procesor wykonuje program zapisany w 21 pamięci operacyjnej w formie wektorów (wielobitowych słów) binarnych. Wektory binar- ne są wprowadzane do procesora za pośrednictwem magistral - do ALU i jednostki steru- jącej oraz pomocniczych rejestrów wewnętrznych procesora. Układy sprzęgające zwane układami wejściowo/wyjściowymi (WE/WY, IN/OUT, interfa- ce) pośredniczą w operacjach transmisji danych do centralnego układu przetwarzającego z urządzeń wejściowych lub odwrotnie; z CPU do urządzenia wyjściowego. Układy WE/WY zwalniają procesor z realizacji wielu czasochłonnych funkcji polegających głów- nie na dopasowaniu szybkości i formatu transmitowanych danych, pomiędzy procesorem a pamięciami lub urządzeniami do wprowadzania i wyprowadzania danych. Te i inne wzglę- dy sprawiły, że współczesne procesory zostały "obudowane" różnymi układami wspoma- gającymi ich pracę. Cykl pracy procesora - oznacza powtarzające się cyklicznie działania związane z prze- twarzaniem zapisanego w pamięci programu.. Praca procesora rozpoczyna się od fazy po- brania (fetch) kodu rozkazu (operacji), który zostaje zamieniony na ciąg mikrooperacji procesora, tworzących fazę wykonawczą rozkazu (execute). Mikroprocesor - jest procesorem wykonanym w technikach wysokiej skali integracji (VLSI, USI). Historycznie pierwszym (powszechnie stosowanym) układem mikroproceso- rowym był element 8-bitowy firmy Intel 8080/85, którego dalszy rozwój dał opracowania 16- 32- i 64-bitowe stanowiące podstawę rozwoju komputerów firmy IBM. 22 1.3. Zasady działania mikroprocesora 8-bitowego ___________________________________________________________ Na rys. 1.16 pokazano schemat blokowy magistralowego mikroprocesora 8-bitowego, na którym zaznaczono podstawowe elementy składowe oraz magistrale zewnętrzne i we- wnętrzne typowe dla mikroprocesorów I8080/85-firmy Intel, M6500/6800-firmy Motorola i Z80-firmy Zilog. Mikroprocesor 8-bitowy składa się z następujących bloków: jednostki arytmetyczno-logicznej (ALU), układu sterowania (CU - Control Unit), rejestrów operacyjnych, jak: A - akumulator, RP - rejestr pomocniczy, RF - rejestr wskaźników flagowych (flag register) PC - licznik rozkazów, lub licznik programu (pogram counter), SP - wskaźnik stosu (stack pointer) RR - rejestr rozkazów. bloku BR - rejestrów programisty (inaczej, rejestrów ogólnego przeznaczenia), buforów szyn zewnętrznych: BMD - bufor magistrali danych, BMA - bufor magistrali adresowej. Mikroprocesor komunikuje się z otoczeniem za pomocą trzech magistral zewnętrz- nych (Z): 23 - magistrali danych ZMD (data bus), - magistrali adresowej ZMA (address bus), - magistrali sygnałów sterujących MS (control bus). ZMD BMD WMD A RP RF BR RR SP ALU PC sterowanie BMA MS ZMA Rys.1.16. Schemat blokowy mikroprocesora 8-bitowego Mikroprocesor jest centralną jednostką przetwarzającą komputera wykonującą opera- cje na wielobitowych operandach. Rozkazy i dane są przekazywane do procesora za pomocą magistrali danych. Magistrala adresowa służy do określenia lokacji źródła rozkazów lub danych oraz miejsca przeznaczenia wyników operacji. Mikroprocesor współpracuje z urzą- dzeniami zewnętrznymi za pośrednictwem sygnałów sterujących, które tworzą magistralę sygnałów sterujących, MS. W pracy mikroprocesora, tak jak w każdym układzie mikropro- gramowanym, wyróżniamy dwie fazy realizacji programu: pobrania rozkazu i jego wykona- nia. Jednym z podstawowych sygnałów sterujących procesora jest zerowanie (Reset), które ustawia elementy mikroprocesora w stan początkowy. Następuje odczyt rozkazu z pamięci komórki operacyjnej wskazanej adresem warunku początkowego i jego wykonanie. Lokacja rozkazu lub operandów jest wskazywana każdorazowo zawartością licznika rozkazów (PC). Odczytany rozkaz zostaje przekazany do jednostki sterującej mikroprocesora, która analizuje kod rozkazu definiując rodzaj operacji i adresy operandów. Na zakończenie ciągu operacji ustalona jest nowa zawartość licznika rozkazów, będąca adresem kolejnego rozkazu. 24 Jednostka arytmetyczno-logiczna wykonuje operacje na operandach zawartych w rejestrach A i RP. Wyniki operacji zostają przekazane do określonego rejestru wewnętrznego procesora, do zewnętrznej komórki pamięci lub do rejestru buforowego urządzenia zewnętrz- nego. Z tych samych miejsc mogą być pobrane dane. Wyniki operacji określonej grupy rozkazów są reprezentowane charakterystycznymi wartościami bitów flagowych (warunków) rejestru wskaźników, jak: wynik operacji równy zeru, wtedy Z = 1, występuje przeniesienie na najstarszym bicie, CY = 1, przeniesienie wewnętrzne na bicie czwartym, AC = 1, parzysta liczba znaków wyniku operacji (zero lub jeden), P = 1, znak wyniku operacji, S = 1 dla wartości 1 na najstarszym bicie wyniku operacji. Do wartości wskaźników odnoszą się rozkazy warunkowe, których wykonanie zależy od spełnienia założonego warunku. Interpretację wskaźników dokładniej omówiono w roz- dziale opisującym autokod procesorów 8-bitowych firmy Intel. Mikroprocesor współpracuje z elementami zewnętrznymi gromadzącymi kody steru- jące i dane, czyta z pamięci kody programu, interpretuje je, pobiera dane z pamięci lub ukła- dów sprzęgających (ze źródła informacji), wykonuje określone operacje i przekazuje wyniki do rejestrów przeznaczenia procesora: wewnętrznych lub zewnętrznych. Źródło i miejsce przeznaczenia informacji są wskazywane za pomocą wielobitowych wektorów adresowych o wartościach z przedziału 000...0 do 111...1. Współpracą procesora z urządzeniami zewnętrznymi kierują sygnały sterujące magi- strali MS: wejścia i wyjścia jednostki sterującej mikroprocesora. Do najważniejszych z nich zaliczamy: sygnał gotowości danych na magistrali (Ready), sygnały obsługi przerwań (Interrupt - żądanie i potwierdzenie gotowości), sygnały obsługi bezpośredniego dostępu do pamięci (DMA- Direct Memory Access). Sygnałem gotowości danych jest Ready (gotów). Transmisja danych za pośrednic- twem magistrali równoległej odbywa się partiami 8-bitowymi, bajt po bajcie. Ponieważ szyb- kość pracy procesora znacznie przewyższa szybkość pracy urządzenia zewnętrznego, dlatego szybkość transmisji danych musi być dostosowana do parametrów pracy urządzenia najwol- niejszego w systemie. Za synchronizację operacji transmisji danych jest odpowiedzialna linia gotowości danych (Ready), informująca procesor o gotowości danych na magistrali. 25 Na rys. 1.17 przedstawiono schemat blokowy systemu transmisji danych z potwier- dzeniem ich gotowości na magistrali. Dwa urządzenia (A i B) przekazują sobie dane w takt zmian poziomów logicznych czterech sygnałów sterujących: Start, Gotów, Pełny i Takt. Na przykład urządzenie A załaduje dane do bufora układu sprzęgającego sygnałem Start, o ile bufor jest Gotów przyjąć dane, tzn. o ile poprzednia porcja danych została już przekazana do urządzenia B. Urządzenie B zostaje poinformowane o stanie zapełnienia aktywnym pozio- mem sygnału Pełny, co oznacza, że układ sprzęgający otrzymał nowe dane dla urządzenia B. Odbiornik B dokonuje odczytu danych za pomocą sygnału Takt. Gdy sygnał Gotów jest ak- tywny oznacza to dla urządzenia A zezwolenie na przesłanie następnej porcji danych sygna- łem Start. Gotów Takt układ urządzenie A urządzenie B sprzęgający Start Pełny Rys.1.17. Schemat blokowy układu transmisji z potwierdzeniem gotowości danych Podobnie przebiega proces transmisji danych w drugą stronę. Urządzenie A czyta dane z bufora układu sprzęgającego sygnałem Start, o ile sygnał Gotów sygnalizuje stan zapełnienia układu sprzęgającego aktualnymi danymi. Po ich odczycie urządzenie B jest informowane (nieaktywny poziomem logicznym sygnału Pełny) o możliwości załadowania kolejnej porcji danych do układu sprzęgającego sygnałem Takt. INT (Interrupt) oznacza żądanie przerwania realizacji jednego programu w celu pod- jęcia realizacji innego programu. Podobnie do transmisji sterowanej stanem gotowości magi- strali (Ready) przebiega przekazywanie danych w trybie obsługi żądania przerwania (rys. 1.18). Różnica polega jedynie na kolejności zgłoszeń poziomów aktywnych sygnałów steru- jących. Na przykład, urządzenie A podejmuje proces czytania zawartości rejestrów układu sprzęgającego po otrzymaniu informacji o pojawieniu się nowych danych w układzie sprzęga- jącym. Żądanie czytania danych jest sygnalizowane poziomem aktywnym sygnału INT. Urządzenie A czyta dane sygnałem Start. Do urządzenia B zostaje przekazany sygnał goto- wości (Pełny = nieaktywny) oznaczający wykonanie operacji odczytu i możliwości wpisania nowej porcji danych do układu sprzęgającego, sygnałem Takt. 26 INT Takt układ urządzenie A urządzenie B sprzęgający Start Pełny Rys.1.18. Schemat blokowy układu transmisji w trybie obsługi żądania przerwania Omówiony tu sposób przekazywania danych, między dwoma układami, nazywany jest trybem obsługi żądania przerwania. Dane wolno gromadzone w urządzeniu B są przekazywa- ne do urządzenia A w określonym czasie. 27 1.4. Realizacja rozkazów w mikroprocesorze 8 – bitowym ___________________________________________________________ W celu wyjaśnienia zasad realizacji rozkazów w typowym mikroprocesorze 8- bitowym posłużono się prostym schematem (rys. 1.19), zawierającym pięć podstawowych układów: jednostka arytmetyczno-logiczna, ALU, jednostka sterująca, CU, licznik programu, PC, pamięć operacyjna, PAO, akumulator, A. Praca procesora rozpoczyna się z chwilą włączenia napięcia zasilania. Wszystkie elementy składowe komputera są wtedy ustawione w stan początkowy. Licznik rozkazów (zwany również licznikiem programu) adresuje komórki pamięci operacyjnej zawierającej wektory binarne, będące zakodowana formą programu. Gdy PC zawiera same zera wskazana zostaje zawartość zerowej komórki pamięci operacyjnej (faza 1) i pobrany zostaje pierwszy rozkaz programu - faza pobrania rozkazu (fetch). Kod rozkazu zostaje przekazany do jednost- ki sterującej procesora (faza 2). W jednostce sterującej następuje rozszyfrowanie znaczenia rozkazu i określenie kolejności kroków fazy wykonawczej (3, 4). Pokazany na rys. 1.19 przykład ilustruje wykonanie prostego rozkazu, polegającego na pobraniu (3) z PAO jednego operandu i przekazaniu go do ALU (4). 28 (1) (2) PAO PAO adres adres rozkaz rozkaz operand operand PC JS (3) (4) PAO PAO rozkaz adres rozkaz A operand operand JS ALU PC Rys 1.19. Schemat realizacji rozkazów w mikroprocesorze (1) - operacja pobrania rozkazu, (2),(3),(4) - fazy wykonania rozkazu W pamięci operacyjnej są przechowywane wektory binarne, których znaczenie jest interpretowane w jednostce sterującej. Część z tych wektorów reprezentuje kod rozkazu, a część dane na których wykonywane są kolejne operacje. W pamięci operacyjnej zapisywane są również wyniki operacji wykonywanych przez procesor. Adresy kolejnych komórek pa- mięci określa zawartość licznika programu. Faza pobrania rozpoczynająca każdy rozkaz, wykonywana jest zawsze w taki sam sposób. Faza wykonawcza jest inna dla każdego rozka- zu. Rozgałęzienia i podprogramy Realizacja wielu zadań przebiega według jednego stałego schematu. Program jest ciągiem wektorów binarnych zapisanych w kolejnych komórkach pamięci. Jednak sposób realizacji niektórych segmentów programu zależy od spełnienia określonych warunków. Rozkazy warunkowe sprawiają, że realizacja programu może przebiegać w innej 29 kolejności niż jego zapis. Następuje rozgałęzienie programu, a więc licznik programu wska- zuje komórki pamięci o adresie innym od kolejnego. Szczególnym przypadkiem rozwidlenia jest wywołanie podprogramu. Uproszczony schemat takiego rozwidlenia pokazano na rys 1.20. Przed podjęciem podprogramu ma miejsce zapamiętanie adresu komórki, na której została zatrzymana realizacja programu zasadniczego polegająca na przeniesieniu do specjal- nego obszaru pamięci (3), zwanego stosem, ostatniej zawartości licznika rozkazów, a na jej miejsce zostaje wprowadzony (4) adres pierwszej komórki pamięci zawierającej podprogram. Po wykonaniu podprogramu do licznika rozkazów wraca (ze stosu) ostatni adres komórki programu zasadniczego i zostaje podjęta dalsza jego realizacja. rozkaz operand (1) PAO adres podprogram rozkaz rozkaz operand (4) PC PC n-2 (3) n-1 STOS n Rys 1.20. Uproszczony schemat realizacji skoku do podprogramu (1) - faza pobrania, (2) - jak na rys 1.19, (3) - odłożenie na stos adresu powrotu, (4) - skok do podprogramu. Przerwania Każdy z procesorów przyjmuje sygnały zewnętrzne ingerujące w realizację jego bie- żącego programu. Przerwaniem nazywamy zawieszenie realizacji programu zasadniczego spowodowane sygnałem przerywającym. Może to być sygnał wewnętrzny generowany rozka- zem zawartym w programie lub (i tak bywa najczęściej) sygnał zewnętrzny wywołujący rozwidlenie programu. Powyżej (rys. 1.20) omówiono zasady realizacji rozkazu warunkowe- go, w którym badanie warunku zostaje zainicjowane w jednostce sterującej kodem rozkazu. 30 Jednostka sterująca procesora jest wyposażona w układ inicjacji rozwidleń programu za pośrednictwem zewnętrznych sygnałów sterujących. Aktywny poziom logiczny takiego sy- gnału powoduje uruchomienie procedury przejścia do podprogramu o adresie przypisanym sygnałowi przerywającemu. Uruchomienie podprogramu nazywamy wywołaniem procedury obsługi przerwania. Budowa procesora 8 - bitowego Na rys. 1.21 przedstawiono uproszczony schemat przykładowego mikroprocesora 8- bitowego 8080, opracowanego przez firmę Intel. Na nim oparta została architektura proceso- rów 8-bitowych wszystkich firm. Jego mechanizmy działania są podstawą pracy wszystkich magistralowych procesorów 8-bitowych, różnych firm. W dalszej cześci książki omówiono jego szczególną wersję, układ 8051 zintegrowaną z elementami otoczenia procesorów, zwaną sterownikiem lub komputerem jednoukładowym. Układ 8080 jest zasilany dwoma napięcia- mi dodatnimi + 5V, +12 V oraz napięciem ujemnym -5V. Mikroprocesor składa się z czterech bloków: bloku rejestrów i układu adresacji, bloku arytmetyczno-logicznego, bloku sterowania, bufora magistrali danych. Blok rejestrów Blok rejestrów wewnętrznych mikroprocesora, to: licznika programu (PC), wskaźnika stosu (SP), bloku rejestrów ogólnego przeznaczenia (B,C, D,E i H,L). Licznik programu wskazuje komórkę pamięci zawierającą adres następnego rozkazu. Jego zawartość zwiększana się automatycznie (Inc - inkrementowana) w trakcie realizacji operacji pobrania rozkazu. Wskaźnik stosu pokazuje lokację kolejnej wolnej komórki pamięci stosu. Wskaźnik automatycznie zmniejsza (Dec) zawartość po każdej operacji zapisu (Push) danych do stosu, zwiększa zawartość (Inc) po każdej operacji odczytu (Pop) wektorów danych ze stosu. Blok rejestrów zawiera trzy pary 8-bitowych rejestrów programisty, które można wykorzystywać jako rejestry pojedyncze lub łączyć je parami (BC, DE i HL) w rejestry 16- 31 bitowe. Komunikacja z rejestrami pojedynczymi lub parami rejestrów odbywa się za pośred- nictwem układu selekcji (MUX). W rejestrach ogólnego przeznaczenia przechowywane są dane dla bieżących operacji programu. Do rejestru zatrzaskowego (Latch) przekazywane są 16-bitowe dane adresujące pamięć operacyjną komputera. Układy procesora Każdy procesor składa się z dwóch układów: jednostki arytmetyczno-logicznej (ALU) oraz ze sterowania (CU). ALU wykonuje operacje arytmetyczne, logiczne i przesunięcia. W skład zintegrowanego układu procesora wchodzą: jednostka arytmetyczno-logiczna, zwana centralnym elementem przetwarzającym, 8-bitowy rejestr akumulatorowy (A), 8-bitowy rejestr przejściowy (RP), rejestr wskaźników flagowych (RF). dane (D 0-D7 ) BMD A RP RF MUX B C RR/DR D E ALU H L SP PC sterowanie INC/DEC LATCH/BMA SYNC (RD) WR INT (INTA) INTE HOLD HOLDA READY RESET f 1 f 2 adres (A0 -A15 ) Rys. 1.21. Schemat blokowy przykładowego mikroprocesora 8-bitowego 32 W czasie operacji pobrania rozkazu pierwszy jego bajt zawiera kod rozkazu. Jest on przekazywany z pamięci operacyjnej, poprzez magistralę danych do rejestru rozkazów (RR), do dekodera rozkazów (DR) i jednostki sterującej (sterowania). Sterowanie procesora określa wartości wszystkich sygnałów sterujących elementów procesora biorących udział w realizacji operacji odpowiadającej kodowi rozkazu oraz wzajemne zależności czasowe tych sygnałów. Bufor magistrali danych Jest to 8-bitowy (D0 - D7), 3-stanowy bufor izolujący wewnętrzną magistralę proceso- ra od magistrali zewnętrznej - magistrali komputera. W trybie wyprowadzania danych zawar- tość wewnętrznej magistrali danych jest zapisywana w 8-bitowym rejestrze zatrzaskowym (Latch), który na przewodach wyjściowych wyposażono we wzmacniacze trójstanowe. W trybie wprowadzania danych wzmacniacze pełnią rolę układu przełączającego dla linii magi- strali zewnętrznej. W fazie nieaktywnej bufora przewody WE/WY (D0 - D7) są ustawiane w stan wysokiej impedancji (trzeci stan). Cykl pracy procesora Cykl rozkazu procesora składa się z operacji pobrania (Fetch) i wykonania (Execute) rozkazu. W czasie pobrania do rejestru rozkazowego procesora przenoszone są z pamięci operacyjnej jeden, dwa lub trzy bajty kodu rozkazu. W fazie wykonawczej rozkaz jest deko- dowany i zamieniany na odpowiadający mu ciąg operacji. Każdy cykl rozkazowy przykładowego procesora 8-bitowego zawiera od jednego do pięciu cykli maszynowych. Faza pobrania składa się z tylu cykli maszynowych, ile bajtów musi być przesłanych z pamięci operacyjnej do procesora w ramach jednego rozkazu. Czas trwania cyklu wykonawczego zależy od rodzaju pobranego rozkazu. Każdy z cykli maszynowych (Mk ) obejmuje trzy, cztery lub pięć cykli zegarowych (Ti) procesora. Zintegrowane układy mikroprocesorowe są synchronizowane kilkoma fazami zegarowymi. Definicję dwufazowego cyklu zegara synchroninzującecgo pokazano na rys. 1.22a. Dwa przesunięte względem siebie impulsy zegarowe (φ1,φ2) określają jeden cykl zega- rowy procesora - zwany również dwufazowym cyklem taktowania procesora. Na początku każdego cyklu maszynowego generowany jest impuls synchronizujący (SYNC) procesora. Czas trwania cyklu zegarowego nie jest zgodny z podaną definicją w trzech przypad- kach wyjątkowych: w stanie oczekiwania (WAIT), w stanie trzymania (HOLD) i w stanie zatrzymania (HALT) pracy procesora, które opisano w dalszej części. 33 Liczba odwołań procesora do pamięci lub portu WE/WY określa minimalną liczbę cykli maszynowych rozkazu (wyjątkiem jest rozkaz DAD). Każdy rozkaz odwołuje się co najmniej raz do pamięci w celu pobrania jego kodu. Na przykład jednobajtowy rozkaz dodania zawarto- ści rejestrów wewnętrznych procesora (ADD r) jest realizowany w jednym cyklu maszynowym. Pobrany rozkaz w pojedynczym słowie 8-bitowym zawiera kod rozkazu oraz adres rejestru, którego zawartość jest dodawana do bieżącej zawartości rejestru akumulatorowego (A). W trzech cyklach zegarowych odbywa się pobranie rozkazu, a w czwartym jego wykonanie. a) T1 T2 f1 f2 SYNC b) T1 T2 TW T3 T4 T5 f1 f2 A15 -0 D 7- 0 zapis odczyt SYNC READY WAIT DBIN dane WR informacja statusowa dane A15 -0 dla HALT faza dodatkowa sprawdzenie zapis pamięci lub WE/WY READY,HOLD faza lub wykonanie D 7-0STATUS HALT dodatkowa odczyt rozkazu Rys. 1.22. Przebiegi czasowe podstawowych sygnałów przykładowego procesora a) faza początkowa każdego cyklu maszynowego b) wybrane sygnały zewnętrzne i wewnętrzne w jednym cyklu maszynowym. Dodatkowe odwołanie do pamięci (dodatkowy cykl maszynowy) ma miejsce w przy- padku rozkazu ADD M dla rejestru pamięciowego M. Rejestr pamięciowy (M) jest wskazy- wany w pamięci operacyjnej (ROM lub RAM) zawartościami rejestrów H i L. Do najdłuż- 34 szych rozkazów procesora 8080 można zaliczyć zapis zawartości rejestrów H i L do pamięci operacyjnej (rozkazem SHLD). Zawiera on pięć cykli maszynowych, w tym szesnaście cykli zegarowych. W rozkazach mikroprocesora można zanotować dziesięć różnych cykli maszynowych: (1) Pobranie - M1 (Fetch), (2) Czytaj pamięć (Memory Read), (3) Pisz do pamięci (Memory Write), (4) Czytaj stos (Stack Read), (5) Pisz do stosu (Stack Write), (6) Czytaj wejście (Input), (7) Pisz na wyjście (Otput), (8) Przerwij (Interrupt), (9) Zatrzymaj (Halt), (10) Zatrzymaj i Przerwij (Halt and Interrupt). Zaleznie od wykonywanego rozkazu wykonywana zostaję odpowiednia sekwencja cykli maszynowych. O stanie wewnętrznym procesora informuje słowo statusowe, które w opisywanym przykładzie jest generowane na magistrali danych, w cyklach zegarowych T1, T2 każdego cyklu maszynowego. Na rys. 1.22b pokazano przebiegi czasowe podstawowych sygnałów zewnętrznych i wewnętrznych w jednym cyklu maszynowym procesora. W cyklu T1 procesor wystawia na linie adresowe wektor lokacji źródła lub miejsca przeznaczenia informacji w pamięci lub w portach WE/WY. Na magistralę danych (D0 - D7) jest przekazywana informacja statusowa o aktualnie wykonywanym cyklu maszynowym. W cyklu T2 badane są wartości sygnałów sterujących: zewnętrzny sygnał Ready - gotowość źródła lub odbiornika informacji, zewnętrzny sygnał HOLD - żądania trzymanie, tzn. odłą- czenia procesora od magistral komputera oraz wewnętrzny sygnał HALT - zatrzymania pracy procesora odpowiadający rozkazowi HLT. Gdy dane nie są gotowe do odczytu, procesor zawiesza operację transmisji, a kolejne takty zegarowe nie są numerowane (na rysunku ozna- czone przez Tw - stan oczekiwania (wait)). Jednocześnie w takt impulsu φ2 badana jest war- tość sygnału gotowości danych (Ready); gdy Ready = H cykl maszynowy jest kontynuowany (pokazane także na rys. 1.17). Na rys. 1.22b pokazano również fazę wyprowadzania danych na przewody D0 - D7 opadającym zboczem sygnału WR. Ustalona wartość danych może zostać odczytana w cyklu 35 zegarowym T3. Przebieg dalszej część cyklu maszynowego (T4 ,T5) zależy od rodzaju rozka- zu. Ważnym sygnałem sterującym pracą procesora jest INT, czyli sygnał żądania prze- rwania bieżącej pracy procesora w celu podjęcia realizacji zadania ważniejszego. Na rys.1.23 pokazano przebiegi czasowe podstawowych sygnałów procesora przed podjęciem realizacji programu o wyższym priorytecie. Na rysunku wyróżniono trzy cykle maszynowe (M1 - M3) procedury obsługi żąda- nia przerwania oraz ostatni cykl zegarowy (T3) w rozkazie, po którym przerwanie programu zostanie wykonane. Ponieważ program przerywający może zawierać takie same rozkazy, jak program przerwany, musimy założyć, że wszystkie układy wewnętrzne procesora zostaną zapełnione nowymi danymi. Jak już wiadomo, cykl rozkazowy rozpoczyna operacja pobrania rozkazu, potem następuje jego zdekodowanie, i wykonanie. Nie jest zatem możliwe zawieszenie reali- zacji cyklu rozkazowego przed jego zakończeniem, w przypadku, gdy program przerywający może ingerować w zawartości wszystkich rejestrów wewnętrznych. Z tego względu procesor został wyposażony w mechanizm zabezpieczenia miejsca przerwania, umożliwiający konty- nuację programu przerwanego po wykonaniu procedur związanych z obsługą żądania prze- rwania. Dyskusję obsługi żądania przerwania ilustruje rys.1.23, którą rozpoczyna analiza poziomu sygnału INTE (INTerrupt Enable - przerwanie dozwolone). Wartość wysoka tego sygnału pojawia się w czasie jednego cyklu zegarowego w określonych okolicznościach, które warunkowane są kilkoma elementami: 1. Procesor ustawia INTE = H po zakończeniu rozkazu poprzedniego, a przed podję- ciem rozkazu następnego. 2. INTE = L (nieaktywne), jeśli zakończony został rozkaz poprzedni występujący w programie przerywającym. Innymi słowy INTE = H po zakończeniu rozkazu jest ustawiane tylko w programie głównym. 3. Przerzutnik warunku INTE = H zostaje wyzerowany (INTE = L) po uruchomieniu programu przerywającego. Można go odblokować programowo rozkazem EI (Enable Inter- rupt - przerwanie dozwolone). Po takim rozkazie INTE = H jest ustawiane tak samo jak w programie głównym. 4. INTE = H zostaje wyzerowane i zablokowane programowo rozkazem DI (Disable Interrupt - przerwanie zakazane, nieaktywne). 36 Jeśli mechanizm wystawiania INTE = H jest aktywny, zewnętrzne żądanie przerwania INT = H oczekuje zezwolenia na przerwanie. Zgodność poziomów wysokich na liniach: żądania przerwania INT i zezwolenia na przerwanie INTE ustawia wartość wysoką na we- wnętrznym przerzutniku przerwań - INT F/F = H, który steruje dalszym przebiegiem obsługi przerwania. W trakcie realizacji programu zawartość licznika rozkazów podlega modyfikacji i wpisywane są do niego kolejne adresy sekwencji rozkazów. Podjęcie żądania przerwania uruchamia procedurę przerywającą, opisaną przebiegami czasowymi na rys.1.23. Zostaje ona wtrącona pomiędzy program główny a program przerywający. M1 M2 M3 T3 T1 T2 T3 T4 T5 T1 T2 T3 T1 T2 T3 f1 f2 A1 5- 0 PC1 PC SP 1 SP 2 D 7- 0 D0 RST PC H PC L (INTA) SYNC DBIN WR RM1 INTE INT INT F/F NIPC STATUS 8 5 5 Rys. 1.23. Przebiegi czasowe podstawowych sygnałów przykładowego procesora dla obsługi INT=H W takcie T2 cyklu maszynowego M1 zostaje zablokowany licznik rozkazów, którego zawartość ma być odłożona na stos. Jest to cecha programu, wykorzystywana do jego restartu po zakończeniu obsługi żądania przerwania. Na rys.1.21 pokazano sygnał INTA wyróżniony linią przerywaną i nawiasami, co oznacza, że nie jest on bezpośrednio dostępny na wyprowa- dzeniach procesora. Natomiast zaznaczony na rys.1.23 status 8 oznacza zezwolenie procesora na przerwanie, które jest reprezentowane bitem D0 = INTA w słowie statusowym (D0 - D7). 37 Sygnały słowa statusowego wraz z sygnałami jednostki sterującej procesora określają zasady jego współdziałania z otoczeniem. W tab.1.2 przedstawiono opis wektorów statuso- wych dla dziesięciu, wyróżnionych w pracy przykładowego procesora (8080), cykli maszy- nowych. Tablica 1.2 Wektory statusowe przykładowego procesora SŁOWO STATUSOWE D0 D1 D2 D3 D4 D5 D6 D7 CYKL MASZYNOWY INTA WO STACK HLTA OUT M1 INP MEMR (1) Pobranie - M1 0 1 0 0 0 1 0 1 (2) Czytaj pamięć 0 1 0 0 0 0 0 1 (3) Pisz do pamięci 0 0 0 0 0 0 0 0 (4) Czytaj stos 0 1 1 0 0 0 0 1 (5) Pisz do stosu 0 0 1 0 0 0 0 0 (6) Czytaj wejście 0 1 0 0 0 0 1 0 (7) Pisz na wyjście 0 0 0 0 1 0 0 0 (8) Przerwij 1 1 0 0 0 1 0 0 (9) Zatrzymaj 0 1 0 1 0 0 0 1 (10) Zatrzymaj 1 1 0 1 0 1 0 0 i Przerwij Większość sygnałów dostępnych w słowie statusowym ma oczywiste znaczenie. Co najmniej dwa z nich (WO i INP) są definiowane pośrednio. Niska wartość zmiennej WO oznacza wyprowadzanie danych z procesora do pamięci lub portu urządzenia zewnętrznego komputera. Wartość wysoka sygnalizuje operacje przesyłania danych w drugim kierunku. INP = H oznacza, że magistrala adresowa zawiera adres portu danych urządzenia wejściowe- go. Jeśli do urządzenia wystawiającego sygnał INT = H, zostanie przekazana informacja D0 = H (INTA aktywne), do procesora musi być podany wektor danych umożliwiający zlokalizo- wanie programu obsługi tego żądania. W cyklu zegarowym T3 zaznaczono kod rozkazu restartu RST, który czyta procesor za pomocą magistrali danych (DBIN = H - Data Bus In). Odłożenie zawartości 16-bitowego licznika programu (PC) na stos odbywa się poprzez 8-bitową magistralę danych w dwóch 38 krokach: starszy bajt adresowy (PCH) a następnie młodszy bajt (PCL). Zapis odbywa się opa- dającym zboczem sygnału WR - pisz. Kolejne lokacje komórek stosu wskazuje zawartość rejestru wskaźnika stosu: odpowiednio SP-1 i SP-2. Jednocześnie z impulsem synchronizu- jącym SYNC na magistrali danych wystawiane jest słowo statusowe. Przekazywanie zawarto- ści licznika programu na stos sygnalizowane jest statusem nr 5 - pisz do stosu. Na szczególną uwagę zasługuje sygnał INTE, który nie przyjmuje wysokiej wartości mimo zakończenia cyklu rozkazowego (M3). Powrót do cyklu pobrania sygnalizowany przez wysoką wartość wewnętrznego sygnału RM1 (odpowiednik D6 = M1 w słowie statusowym). Sygnał INTE zostaje zablokowany na wartości niskiej przez cały czas trwania obsługi prze- rwania (INTE = L), umożliwiając w ten sposób zakończenie procedur przerywających. Można również spowodować, że w trakcie obsługi żądania przerywania sygnał zezwo- lenia na przerwanie będzie wystawiany (INTE = H). W tym celu należy użyć rozkaz EI - zezwolenia na przerwanie. W dowolnym miejscu programu można również użyć rozkazu DI - przerwanie nieaktywne, co jest równoznaczne z programowym ustawieniem wartości INTE = L. Omówione zasady obsługi żądania przerwania obowiązują również w innych procesorach 8-bitowych oraz w większości procesorów 16-bitowych. Sekwencja operacji zilustrowanych przebiegami czasowymi na rys. 1.23 jest realizowana automatycznie przez procesor przed podjęciem programu związanego z wykonaniem procedur przerywających. Zamiast rozkazu RST - restart po sygnale INT można zastosować rozkaz wywołania CALL. Kod tego rozkazu wystawia urządzenie żądające przerwanie, a wtedy procesor zapyta o adres lokacji pamięci zawierającej program jego obsługi, do którego odwołuje się kod rozkazu CALL. Jest to metoda wywołania procedur przerywających z pełną adresacją restar- tu, która została szczegółowo omówiona w dalszej części podręcznika przy okazji opisu zasad działania sterownika priorytetów przerwań. Innym sposobem wywołania adresu restartu po przerwaniu jest stała jego lokacja. Jeśli na takim przewodzie żądania przerwania pojawi się sygnał aktywny, to obsługa programu dla tego przerwania rozpoczyna się zawsze od tej samej lokacji pamięci (stały adres). Współczesne mikroprocesory są również wyposażone w mechanizmy przesyłu danych do pamięci i ich odczytu z pamięci operacyjnej z pominięciem procesora. Jest to tzw. bezpo- średni dostęp do pamięci (DMA - Direct Memory Access). Do jednostki sterującej omawiane- go procesora podłączono dwie linie sterujące: HOLD i HOLDA. Jeśli linia wejściowa HOLD = H, do procesora zostaje przekazane żądanie trzymania. Jest ono równoznaczne z ustawie- niem linii adresowych procesora, linii danych oraz linii pisz/czytaj w trzeci stan, czyli stan 39 wysokiej impedancji. Na rys. 1.24 pokazano przebiegi czasowe wybranych sygnałów proce- sora ilustrujące zasady pracy procesora w trybie DMA. Procedurę przejścia do stanu trzymania rozpoczyna żądanie trzymania sygnałem HOLD Request. Ponieważ elementy wewnętrzne procesora nie biorą udziału w procesie transmisji danych w trybie DMA, trzymanie może być podjęte w trakcie realizacji cyklu rozkazowego - przed jego zakończeniem. Odłączenie procesora od magistral zostaje poprze- dzone badaniem gotowości danych do transmisji sprawdzeniem, czy READY = H. Jeśli ten warunek jest spełniony procesor wystawia HLDA = H, potwierdzając tym samym przejście do stanu trzymania. Mn Mn +1 T1 T2 Tw T3 (T4)* (T5)* T T1 T2 lub f1 f2 A1 5- 0 zmienne D 7- 0 żądanie HOLD HOLD READY HOLD F/F HLDA Rys 1.24. Przebiegi czasowe podstawowych sygnałów przykładowego procesora dla obsługi HOLD=H Linie adresowe i linie danych są sterowane za pośrednictwem specjalizowanego ele- mentu przepisującego dane ze źródła informacji do jej odbiornika (sterownik DMA). Proces bezpośredniej transmisji kończy poziom niski na linii HOLD żądania trybu DMA. Wzajemne zależności opisanych wyżej zasad realizacji cyklu rozkazowego mikropro- cesora ilustruje sieć działań na rys. 1.25, na którym pokazano jeden cykl maszynowy proceso- ra, zawierający od trzech do pięciu taktów zegarowych. Cykl maszynowy rozpoczęto stanem wyzerowania procesora - RESET = H. W cyklu T2 jest badany stan dwóch sygnałów: ze- wnętrznego READY i wewnętrznego HLTA. Sygnał READY = L oznacza zatrzymanie pracy procesora w oczekiwaniu na dane do transmisji. 40 Zatrzymanie pracy procesora może również spowodować rozkaz HLT (HALT - za- trzymanie). Jeśli procesor rozpozna rozkaz HLT ustawia wewnętrzny przerzutnik zatrzymania w stan HLTA = H. Jeśli jest aktywne READY lub HLTA, procesor ustanawia stan oczekiwa- nia, Tw (czekaj) lub TwH (czekaj w stanie HLT). Jeśli zostanie zakończone oczekiwanie (Tw) badany jest stan sygnału HOLD. Jeśli HOLD = H, następuje przejście do stanu trzymania i transmisji danych poza tą siecią działań. Gdy HOLD zmieni wartość na nieaktywną, rozkaz zostanie dokończony. W zakończeniu cyklu maszynowego badany jest stan realizacji cyklu rozkazowego - czy rozkaz został zakończony. Jeśli nie został wykonany ostatni krok w cyklu rozkazowym jest realizowany następny cykl maszynowy. Gdy procesor wykonał ostatni cykl maszynowy w cyklu rozkazowym, wystawiony zostaje INTE = H i badany jest stan jego jednoczesności z INT = H. Zgodność tych dwóch sygnałów oznacza podjęcie nowego cyklu rozkazowego w programie obsługi żądania prze- rwania. Przy aktywnym HLTA procesor wchodzi w stan zawieszenia (TwH), z którego można wyjść tylko przez przerwanie. W ten sposób działa większość programów zawierających szereg opcji wybieranych alternatywnie z MENU użytkownika. Zakończenie jednego z pro- gramów kończy przejście do stanu oczekiwania na kolejne wywołanie (przerwanie) z pulpitu operatora. W stanie HALT można oczywiście przejść do trybu DMA, a po jego zamknięciu nastąpi powrót do zatrzymania - HALT. Omówione zasady współdziałania bloków mikroprocesora oraz relacje czasów wyko- nania podstawowych procedur nie wyjaśniają wszystkich mechanizmów działania systemów mikroprocesorowych. Jest to jedynie opis reakcji procesora na stany aktywne trzech podsta- wowych sygnałów: żądania przerwania (INT), żądania trzymania (DMA) oraz badania stanu gotowości danych (Ready) do transmisji. Zasady wykorzystania mechanizmów przerwań w procesorach można zaliczyć do elementów kluczowych metod projektowania oprogramowa- nia użytkowego i oprogramowania systemowego. Użytkownik oprogramowania często korzysta z przerwań procesora, nie zdając sobie sprawy z tego faktu. Miarą jakości procesora jest zwykle poziom rozbudowania systemu przerwań. 41 T1 RESET READY+HLTA T2 TAK HLTA READY HLTA HOLD INTA NIE READY READY INT INTE Tw Tw H HOLD TAK SET SET HOLD HOLD F/F HOLD F/F T3 T4 HOLD faza HOLD HOLD T5 RESET HOLD F/F HOLD F/F TAK SET NIE RESET HLTA NIE ROZKAZ WYKONANY TAK HOLD NIE INT INTE RESET HOLD F/F TAK SET INT F/F Rys. 1.25. Sieć działań przykładowego mikroprocesora 8-bitowego. 42 1.5. Techniki adresacji ___________________________________________________________ Program pracy komputera jest zapisany w postaci ciągu wektorów binarnych zapisa- nych („ulokowanych”) w pamięci wewnętrznej lub zewnętrznej procesora, czy komputera. Jest to ciąg wektorów binarnych, zwanych rozkazami, kodujących operacje na danych binar- nych. Zasady uporządkowania programu regulują formaty rozkazów oraz mechanizmy proce- sora realizacji rozkazów, określające zasady dostępu do wektorów zapisanych w pamięci operacyjnej. Dla bardziej komunikatywnego zapisu kodów binarnych programu maszynowego stosuje się zapis szesnastkowy, zwany również heksadecymalnym (hexadecimal). Heksade- cymalne odpowiedniki kodu binarnego przedstawiono w tab. 1. 3. Tablica 1.3 Zapis szesnastkowy kodu binarnego Kod Kod Kod Kod binarny szesnastkowy binarny szesnastkowy 0000 0 1000 8 0001 1 1001 9 0010 2 1010 A 0011 3 1011 B 0100 4 1100 C 0101 5 1101 D 0110 6 1110 E 0111 7 1111 F Dane do operacji są zawarte w pamięci operacyjnej, w rejestrach otaczających proce- sor lub buforach pośredniczących (sprzęgających) usytuowanych między procesorem i urzą- 43 dzeniami WE/WY. Lokację wektorów binarnych definiuje się za pomocą określonych kombi- nacji wartości zmiennych adresowych, a długość słowa adresowego określa liczbę adresowa- nych komórek informacji. Najprostsza deklaracja bieżącego adresu polega na podaniu w programie wartości wszystkich bitów adresu. Jest to jednak sposób najkosztowniejszy ponie- waż zajmuje najwięcej pamięci operacyjnej a czas realizacji takiego programu jest najdłuż- szy. W celu skrócenia zapisu procedur adresacji wprowadzono metody pośredniego określa- nia adresu bieżącego operandu. W procesorach 8-bitowych zastosowano kilka metod określa- nia adresów, z których korzystają również procesory bardziej zaawansowane (16-, 32- i 64- bitowe). Niemniej każda nowa generacja procesorów wnosi nowe sposoby określania adre- sów. Są to celowe zabiegi producentów układów elektronicznych i producentów oprogramo- wania czynione w celu przyspieszenia realizacji procedur przetwarzających komputera. W procesorach 8-bitowych można wyróżnić następujące metody adresacji wektorów binarnych (komórek pamięci lub rejestrów): adresacja bezpośrednia, adresacja natychmiastowa, adresacja pośrednia, adresacja indeksowana, Adresacja bezpośrednia Adresacja bezpośrednia (direct addressinig) polega na podaniu pełnego adresu ope- randu bezpośrednio w programie. Jest on bezpośrednim identyfikatorem lokacji komórki pamięci lub rejestru komputera. Na rys 1.26 pokazano przesunięcie danych między rejestrami wewnętrznymi procesora. BC 1 11 10 0 00 11 11 00 00 D E 1 01 01 0 10 10 10 10 10 1 01 01 01 0 A M O V A ,D H L 0 00 01 1 11 00 00 11 11 przesu n ię cie do A za w a rtości D Rys. 1.26. Przykład adresacji bezpośredniej, przesunięcia danych z rejestru D do rejestru A. Rozkaz MOV (przesuń) oznacza przesunięcie danych z jednej lokacji pamięci do drugiej; z rejestru D do rejestru akumulatorowego A. Podobnie jest realizowane przesunięcie 44 danych między dowolnymi rejestrami wewnętrznymi. Na rys. 1.27 pokazany został inny przykład adresacji bezpośredniej przesyłu danych z pamięci do rejestru akumulatorowego. PAO 0041 H 01010101 kopiowanie 00001111 A 0042 H 00001111 0043 H 11110000 LDA 0042H ; 16-bitowy adres wskazuje 0044 H 11001100 komórkę pamięci: 0042H 0045 H 11111111 adresy Rys. 1.27. Przykład adresacji bezpośredniej komórki pamięci. Adresacja natychmiastowa Umieszczenie danych w komórce pamięci następującej po kodzie operacji jest nazy- wane adresacją natychmiastową (immediate addressing). To znaczy, w polu operandu wystę- pującym po kodzie operacji zapisane są dane dla tej operacji. Jest to najprostszy sposób adre- sacji operandów polegający na ich zapisie bezpośrednio w ciągu wektorów binarnych pro- gramu. Rozkaz MVI r dokonuje przesunięcia bajtu danych z pamięci do wskazanego rejestru r. Zasadę realizacji tego trybu adresacji ilustruje przykład na rys. 1.28. PAO MVI A,D2H; 0042 H 00111110 A 0043 H 11000010 11000010 przesunięcie 0044 H do rejestru A adresy Rys. 1.28. Przykład operacji przesunięcia drugiego bajtu do akumulatora Adresacja pośrednia Adresacja pośrednia (indirect addressing) dla procesorów 8-bitowych, polega na wskazywaniu lokacji operandu za pomocą zawartości określonego rejestru wewnętrznego 45 procesora (rys. 1.29). Szczególnym przypadkiem rozkazu przesunięć jest MOV M. Dotyczy on przesunięcia zawartości dowolnego rejestru wewnętrznego procesora do rejestru (M) w pamięci operacyjnej, lokalizowanego zawartością pary rejestrów H, L. Rejestry H i L po uprzednim załadowaniu spełniają funkcję wskaźnika adresu pośredniego komórki pamięci, do której przesuwamy zawartość wskazanego rejestru. zawartość rejestru A po wykonaniu operacji PAO 00001111 A 0042 H 00001111 00000000 01000010 H,L 0043 H 11110000 MOV A,[HL] ; adresy Rys. 1.29. Przykład adresacji pośredniej zawartością HL wskazanego rejestru procesora. Adresacja indeksowana Adres indeksowany lub indeksowy (indexed addressing) obliczamy jako sumę poda- nego w rozkazie adresu (adr) i zawartości rejestru indeksowego RI, np: MOV r, adr[RI] ; oznacza wpisanie do rejestru r zawartości komórki pamięci adresowanej sumą adresu adr i [RI]. Na rys. 1.30 podano przykład adresacji indeksowanej z indeksem [RI]=3 dla transferu danych z komórki pamięci o adresie 44H do rejestru wewnętrznego r. 46 PAO adr 0041H 01010101 11001100 r 0042H 00001111 0043H 11110000 0044H 11001100 00000011 RI 0045H 11111111 MOV r, adr[RI] ; adr=0041H+[RI]=44H adresy [RI] = 3H Rys. 1.30. Przykład adresacji indeksowanej dla transmisji danych z pamięci do rejestru procesora. Ten tryb adresacji zaprojektowano tylko w jednym procesorze 8-bitowym Z80 firmy Zilog. Oprócz wymienionych czterech podstawowych trybów adresacji spotykamy różne kombinacje tych technik. Na przykład w mikroprocesorach firmy Intel można spotkać kombi- nację adresacji pośredniej z indeksowaną. W tym celu procesor wyposażono w specjalny rejestr bazowy BP (Base Pointer) - wskaźnik bazy. Różnorodność użytych trybów adresacji poprawia efektywność obliczeń komputera i zmniejsza zajętość pamięci operacyjnej. Przykładem 8-bitowego procesora bardziej sprawne- go jest Z80. Dzięki bogatej liście rozkazów i dziesięciu różnych trybów adresacji wprawny programista może uzyskać program zajmujący o 40% pamięci mniej niż program opracowany dla procesorów 8080 czy 8085 firmy Intel. 47 1.6. Autokod procesorów 8-bitowych ___________________________________________________________ Pisanie programu na poziomie wektorów binarnych nazywamy kodowaniem progra- mu. Program realizowany binarnie w takt zegara mikroprocesora jest nazywany mikropro- gramem albo ciągiem mikrooperacji. Program zapisany w formie binarnej (kod maszynowy programu) jest budowany w oparciu o listę rozkazów procesora. Kody binarne programu zostają przetworzone na ciąg mikrooperacji procesora. Każdy z procesorów ma własną listą kodów operacji zwaną autokodem, stąd zapis programu w formie binarnej będzie inny dla każdego procesora. Większość procesorów 8-bitowych operuje 16-bitowym słowem adreso- wym (A0-A15) i 8-bitową magistralą danych (D0-D7). Informacja binarna jest umieszczona w zewnętrznej pamięci operacyjnej lub w rejestrach wewnętrznych mikroprocesora. Listę rozkazów mikroprocesorów 8080/85 można podzieli na cztery zasadnicze grupy: rozkazy przesyłań danych, rozkazy arytmetyczno - logiczne, rozkazy rozwidleń i wywołań, rozkazy wejściowo-wyjściowe i sterujące. Oznaczenia: rl, r2, r - rejestry A, B, C,..., L; DDD - bity kodu rejestru przeznaczenia (D - destination), 48 S S S - bity rejestru źródłowego (S - source). Kody binarne rejestrów D i S przedstawiono w tab. 1.4 a). Rejestr M (memory) jest lokalizowany w pamięci operacyjnej pod adresem wskazywanym przez zawartość pary reje- strów HL. Rozkazy dla operandów 16-bitowych wykorzystują pary rejestrów, kodowanych zgodnie z zapisem tabl. 1.4 b). Tablica 1.4 Kody rejestrów wewnętrznych procesora a). DDD b). lub Rejestr RP Rejestr SSS 111 A 00 B, C 000 B 01 D, E 001 C 10 H,L 010 D 11 S, P 011 E 100 H 101 L 110 (M) Przez RP oznaczono kody pary rejestrów wewnętrznych procesora. Każdy rozkaz składa się z kodu oraz operandów, na których operacja jest wykonywany. Jest on kodowany pierwszymi bitami bajtu. Bajty następne, związane z rozkazem, definiują adres operandu. Zapis binarny programu, jest formą czytaną bezpośrednio przez procesor, jednak kod tak zapisanego programu pozostaje nieczytelny dla programisty. Aby ułatwić zapisu i analizę programu, wprowadzono formy symboliczne rozkazów. Kod heksadecymalny był pierwszym etapem formalizacji zapisu. Dalszym ułatwieniem dla programisty było wprowadzenie zapi- sów symbolicznych używających pewnych znaków mnemonicznych, jak MOV r1,r2 - ozna- czające przesunięcie zawartości rejestru r2 do rejestru r1, LDA adr jest operacją załadowania zawartości akumulatora do komórki pamięci pod wskazanym adresem (adr). Język progra- mowania na poziomie adresów symbolicznych nazwano językiem asemblera lub językiem kodów mnemonicznych procesora. Pisanie programów na tym poziomie nazywamy kodowa- niem programu lub programowaniem w autokodzie maszyny. W trakcie objaśniania funkcji i zasad realizacji rozkazów maszynowych można spotkać pewne formy zapisu umownego (symbolicznego), w którym używa się następujących skrótów: A - rejestr akumulatora, adr - 16-bitowy adres, dane - 8-bitowe dane, dane 16 - 16-bitowe dane, 49 bajt 2, bajt 3 - drugi, trzeci bajt rozkazu, port - 8-bitowy adres rejestru WE/WY, rh - rejestr przyjmujący lub zawierający starszy bajt informacji, rl - rejestr przyjmujący lub zawierający młodszy bajt informacji, SP - wskaźnik stosu, PC - licznik programu, CY - przeniesienie, pożyczka, ← - przesłanie, rp/RP - oznaczenie stwierdzające, że rozkaz dotyczy pary rejestrów mikroprocesora, (R) - zawartość rejestru R, [R] - zawartość komórki pamięci wskazywana zawartością R. Formaty rozkazów W zapisie rozkazów mikroprocesorów posłużono się pewnymi regułami, których poznanie znacznie ułatwia operowanie autokodem. A. Przesył danych MOV dotyczy przesyłu danych między dwoma wskazanymi rejestrami. Zapis: MOV r1, r2 Działanie: r1: r1←(r2) - jest zapisem przesyłania zawartości rejestru r2 do rejestru r1. Format: 01 DDD SSS Kod: W miejsce bitów D i S podstawiamy wartości kodujące odpowiednie rejestry źródła i przeznaczenia danych (tabl.1.4a)) i na tej podstawie wyznaczamy wartość binarną lub heksadecymalną kodu rozkazu. Np.: przesłanie A←(B) zapiszemy binarnie: 01111000 lub heksadecymalnie 78H. MVI Dotyczy przesłania danych zawartych w drugim bajcie instrukcji do wskazanego rejestru. Zapis: MVI r, dane Działanie: r←dane - oznacza przesłanie drugiego bajtu rozkazu do, wskazanego kodem rozkazu, rejestru. 50 Format: 00 DDD 110 dane Kod: W miejsce D wstawiamy kod rejestrów przeznaczenia i na tej podsta- wie wyznaczamy wartość binarną lub heksadecymalną kodu rozkazu. Np. przesłanie bajtu danych do rejestru B można zapisać binarnie: 00 000 110 lub heksadecymalnie: 06H. LXI Dotyczy przesyłu danych zawartych w drugim i trzecim bajcie do pary rejestrów wskazanych rozkazem. Zapis: LXI rp, dane 16 Działanie: RP ← dane 16 oznacza przesył dwóch, następujących po bajcie kodu rozkazu, bajtów danych do zadanej pary rejestrów. Format: 00 RP 0001 dane - młodszy bajt dane - starszy bajt Kod: W miejsce RP wstawiamy kod pary rejestrów przeznaczenia danych (tabl.1.4 b). Np. przesył B, C ←dane 16 zapisujemy binarnie: 00000001 lub heksadecymalnie: 01H. LDA Dotyczy przesył danych do akumulatora, zawartych w komórce pamięci lokalizowanej drugim i trzecim bajtem Zapis: LDA adr Działanie: A←((bajt 3), (bajt 2)), Format: 00111010 Kod: Jest to rozkaz o stałym kodzie 3AH. Operacje przesyłu danych do komórki pamięci lokalizowanej adresem zadanym za- wartością pary rejestrów ((RP)) wyrażają rozkazy przedstawione w tabl. 1.5. Zawartości rejestrów wyszczególnionych z prawej strony są wpisywane do komórek pamięci wskazywa- nych zawartościami rejestrów umieszczonych w kwadratowych nawiasach [ ]. Załadowanie rejestrów zawartością komórek pamięci wskazywanych zawartościami wskazywanych rejestrów odbywa się za pośrednictwem grupy rozkazów przedstawionych w tabl. 1.6. Tablica 1.5. Adresacja parą rejestrów, transmisja do pamięci 51 Rozkaz Kod H Operacje STAXB 02 [B, C]←(A) STAD 12 [D, E]←(A) SHLD adr 22 [bajt 3, bajt 2 ]←(L) [(bajt 3, bajt 2)+1]←(H) STA adr 32 [bajt 3, bajt 2]←(A) Tablica 1.6. Adresacja parą rejestrów, transmisja do rejestru Rozkaz Kod H Operacje LDAXB 0A A ←[B, C] LDAXD 1A A ←[D, E] L ←[bajt 3, bajt 2] LHLD adr 2A H ←[(bajt 3, bajt 2)+1] LDA adr 3A A ←[bajt 3, bajt 2] XCHG Dotyczy wymiany zawartości między rejestrami H, L i D, E (odpowiednio) Zapis: XCHG Działanie (HL) ↔ (DE), wymiana informacji, Format: 11101011 Kod: Rozkaz o stałym kodzie - EBH B. Rozkazy arytmetyczne Większość mikroprocesorów 8-bitowych wykonuje tylko cztery operacje arytmetycz- ne: - dodawanie (ADD, ADC, DAD), - odejmowanie (SUB, SBB), - zwiększenie zawartości rejestru (INR, INX), - zmniejszenie zawartości rejestru (DCR, DCX). ADD Oznacza dodanie do zawartości akumulatora zawartości wskazanego rejestru (r), gdzie r jest lokalizowany kodem bitów S. Zapis: ADD r Działanie: A ←(A) + (r), akumulacja danych. Format: 10000 SSS 52 Kod: W miejsce S wstawiamy wartości odpowiadające odpowiednim rejestrom źródła informacji, wtedy: r B C D E H L M A kod H 80 81 82 83 84 85 86 87 ADC Oznacza dodanie do zawartości akumulatora (A) zawartości wskaza- nego rejestru (r) i bitu przeniesienia (CY). Rejestr r jest lokalizowany kodem bitów S. Zapis: ADC r Działanie: A ←(A) + (r)+ (CY) Format: 10001 SSS Kod: W miejsce S wstawiamy wartości odpowiadające odpowiednim rejestrom źródła informacji r B C D E H L M A kod H 88 89 8A 8B 8C 8D 8E 8F ACI Oznacza dodanie do zawartości akumulatora zawartości drugiego bajtu następującego po kodzie rozkazu. Do pozycji najmłodszej doda- wany jest bit przeniesienia (CY). Zapis: ACI dane Działanie: A ← (A) + (bajt 2) + (CY), gdzie dane = bajt 2 Format: 11001110 dane Kod: Jest to rozkaz o stałym kodzie - CEH DAD Oznacza dodanie do rejestrów H i L zawartości wskazanej pary rejestrów Zapis: DAD rp Działanie: H, L ← (H,L) + (rp) Format: 00 RP 1001 Kod: Para rejestrów jest lokalizowana kodem bitów RP. RP B D H SP kod H 09 19 29 39 SUB Oznacza odejmowanie od zawartości akumulatora zawartości wskazanego rejestru Zapis: SUB r 53 Działanie: A ← (A) - (r). Format: 10010 SSS Kod: Rejestr r lokalizowany jest bitami S: r B C D E H L M A kod H 90 91 92 93 94 95 96 97 Lokalizacja M w rozkazie SUB M jest taka sama jak w rozkazach INR M czy DCR M. SBB Oznacza odejmowanie od zawartości akumulatora zawartości wskaza- nego rejestru z uwzględnieniem pożyczki Zapis: SBB r Działanie: A ← (A) - (r) - (CY) Format: 10011 SSS Kod: Rejestr r jest lokalizowany bitami S: r B C D E H L M A kod H 98 99 9A 9B 9C 9D 9E 9F INR Oznacza zwiększenie zawartości wskazanego rejestru r o 1 Zapis: INR r Działanie: r ← (r) + 1. Format: 00 DDD 100 Kod: Rejestr r jest lokalizowany kodem bitów rejestrów przeznaczenia D: r B C D E H L M A kod H 04 0C 14 1C 24 2C 34 3C Na uwagę zasługuje rozkaz INRM o kodzie 34H, w którym M jest rejestrem pamięci lokalizowanym zawartością pary rejestrów H i L. Operację tę zapisujemy: ((H, L))←((H, L))+1; co oznacza rozkaz zwiększenia o 1 zawartości komórki pamięci wskazywanej zawar- tością rejestrów HL. DCR Oznacza zmniejszenie zawartości wskazanego rejestru o 1 Zapis: DCR r Działanie: r ←(r)-1 Format: 00 DDD 101 Kod: Rejestr r jest lokalizowany przez bity rejestrów przeznaczenia D: r B C D E H L M A kod H 05 CD 15 1D 25 2D 35 3D 54 INX Oznacza zwiększenie zawartości pary rejestrów o 1 Zapis: INX rp Działanie: rp ← (rp) + 1 Format: 00 RP 1011 Kod: Para rejestrów lokalizowana jest kodem RP: RP BC DE HL SP kod H 03 13 23 33 DCX Oznacza zmniejszenie zawartości pary rejestrów lokalizowanej bitami RP rozkazu o 1. Zapis: DCX rp Działanie: rp ← (rp) - 1 Format: 00 RP 1011 Kod: RP B D H SP kod H 0B 1B 2B 3B Oprócz wymienionych operacji arytmetycznych dokonywanych na zawartościach akumulatora i wskazanych rejestrów r lub rp istnieje możliwość wykonania tych samych operacji na zawartościach akumulatora i bezpośrednio następującym po kodzie rozkazu bajcie danych. ADI Oznacza dodawanie do zawartości akumulatora drugiego bajtu rozkazu Zapis: ADI dane Działanie: A ← (A) + (bajt2) Format: 11000110 Kod: Jest to rozkaz o stałym kodzie: C6H. Podobnie działają trzy inne rozkazy arytmetyczne, jak: ACI dane - A ← (A) + (bajt 2) + (CY). Kod rozkazu: CEH. SUI dane - A ← (A) - (bajt 2). Kod rozkazu: 06H. SBI dane - A ← (A) - (bajt 2) - (CY). Kod rozkazu: DEH. C. Rozkazy dla operacji logicznych Omówione wyżej rozkazy oraz zasady ich tworzenia ilustrują zasady kodowania mikrooperacji przesyłu danych i wykonywania obliczeń arytmetycznych w procesorach 8- bitowych. Te same reguły obowiązują przy kodowaniu operacji dla procesorów 16- czy 32- 55 bitowych. Różnica dotyczy możliwości ilościowych tych procesorów, o czym będzie mowa w kolejnych rozdziałach podręcznika. Jeśli przeanalizujemy zasady działania algorytmów obli- czeń stwierdzimy obecność ogniw decyzyjnych. Następny krok będzie uzależniony od wyni- ków przetwarzania w kroku poprzednim. Poniżej omówiono cztery podstawowe operacje logiczne i odpowiadające im rozkazy dla procesorów 8-bitowych, tj.: ANA, XRA, ORA i CMP, bardzo często współpracujących z rozkazami dla rozwidleń i wywołań warunkowych podprogramów. ANA Oznacza iloczyn logiczny zawartości akumulatora z zawartością wskazanego rejestru Zapis: ANA r Działanie: A ← (A) ∧ (r). Format: 10100 SSS Kod: r B C... M A kod H A0 A1... A6 A7 XRA Oznacza sumę logiczną zawartości rejestru akumulatorowego i zawartości wskazanego rejestru Zapis: XRA r Działanie: A ← (A) ⊕ (r). Format: 10101 SSS Kod: r B C... M A kod H A8 A9... AE AF ORA Oznacza sumę logiczną zawartości rejestru akumulatorowego i zawartości wskazanego rejestru: Zapis: ORA r Działanie: A ← (A) ∨ (r). Format: 10110 SSS Kod: r B C... M A kod H B0 B1... B6 B7 CMP Oznacza odjęcie zawartości wskazanego rejestru od zawartości akumulatora Zapis: CMP r 56 Działanie: (A) - (r) przy nie zmienionej zawartości akumulatora. Równość porównywanych operandów sygnalizowana jest wartością 1 na bicie C rejestru flagowego. C = 1, gdy (A)

Use Quizgecko on...
Browser
Browser