Technika mikroprocesorowa I Wykład 1
Układy mikroprocesorowe. Przykłady rozwiązań Autor: Bartłomiej Zieliński Układy mikroprocesorowe Ryszard Krzyżanowski Mikroprocesor Z80 Jerzy Karczmarczuk "Układy mikroprocesorowe Z80" Fedyna, Mizeracki pl.wikipedia.org Literatura do bieżącego wykładu:
Mikroprocesor- definicje!!! Mikroprocesor to synchroniczny automat sekwencyjny wykonujący dołączony z zewnątrz program. Definicja Wikipedia: Mikroprocesor układ cyfrowy wykonany jako pojedynczy układ scalony o wielkim stopniu integracji (LSI) zdolny do wykonywania operacji cyfrowych według dostarczonego ciągu instrukcji.
Do działania mikroprocesora niezbędny jest sygnał zegarowy, który wyznacza szybkości jego pracy. Program wykonywany przez mikroprocesor składa się z rozkazów (instrukcji). Lista instrukcji jest stała, charakterystyczna dla danego mikroprocesora, uniwersalna lub zorientowana (np. na przetwarzanie obrazu, obliczenia numeryczne itp.)
Budowa mikroprocesora Jednostka sterująca PROGRAM IR Dek Układ sterowania SYGNAŁY STERUJĄCE WEWNĘTRZNE SYG. STER. A F DANE B D C E ALU DANE-WYNIKI Jednostka wykonawcza
Budowa mikroprocesora Podstawowymi podzespołami mikroprocesora są: - Jednostka wykonawcza EU (Execution Unit), która przetwarza informacje wykonując wszelkie operacje arytmetyczne i logiczne. -Jednostka sterująca CU (Control Unit), która określa rodzaj wykonywanych operacji. W skład jednostki wykonawczej EU wchodzą: -jednostka arytmetyczno-logiczna ALU, -zestaw współpracujących z nią rejestrów. Informacją wejściową części wykonawczej są dane, zaś wyjściową wyniki.
W skład jednostki sterującej CU wchodzą: - rejestr rozkazów IR, - dekoder rozkazów, - układ sterowania. W rejestrze rozkazów przechowywany jest kod aktualnie wykonywanego rozkazu. Kody rozkazów pobierane są do rejestru rozkazów z pamięci. Po pobraniu z pamięci kod rozkazu jest dekodowany w dekoderze rozkazów, czyli jest określane, jaką operację będzie wykonywał mikroprocesor. Na tej podstawie układ sterowania wytwarza odpowiedni sygnał sterujący.
Jednostka Arytmetyczno-Logiczna (ang. Arithmetic Logic Unit, ALU) układ kombinacyjny, wykonujący na danych w rejestrach operacje arytmetyczne (np. suma, różnica) oraz logiczne (np. OR, AND). Rejestry w procesorze: Akumulator A, ACC - rejestr bezpośrednio współpracujący z ALU (stanowi źródło i rejestr wynikowy dla operacji arytmetycznych i logicznych) Wskaźnik stosu SP - wskazuje koniec tzw. stosu. Licznik rozkazów PC wskazuje adres komórki pamięci programu z następnym rozkazem do wykonania Rejestr flag - zawiera flagi (znaczniki bitowe) ustawiane w zależności od wyniku wykonanej operacji (np. nadmiar, zero, bit parzystości) Rejestry ogólnego przeznaczenia tzw. robocze (służą do przechowywani argumentów, adresów itp.)
Rejestr znaczników W technice mikroprocesorowej liczby zapisywane są zasadniczo w dwóch kodach: -Naturalnym binarnym (NB)- liczby bez znaku. -Uzupełnień do 2 (U2)- liczby ze znakiem. Dla potrzeb działań na liczbach dziesiętnych nie ma wydzielonych rozkazów arytmetycznych, ale wprowadzono rozkazy korekcji dziesiętnej. Na podstawie efektów obliczeń układ ALU ustawia lub kasuje określone bity warunkowe w rejestrze znaczników.
Rozróżnia się następujące bity warunkowe: C Przeniesienie lub pożyczka, bit dynamiczny, kod NB Z- Zerowość, bit statyczny, kod NB i U2 N- Ujemność, bit statyczny, kod U2 V- Przepełnienie, bit dynamiczny, kod U2 Ponadto spotyka się jeszcze: H- Przeniesienie połówkowe, kod NB P- Parzystość (ilość jedynek). Bity statyczne są ustawione bez konieczności przeprowadzania obliczeń.
Efektami działania rozkazu mogą być: -brak zmiany bitu, -ustawienie lub skasowanie bitu w zależności od wyniku operacji, -przyjęcie stałej wartości 0 lub 1, -nieustalony stan bitu.
NB 1111 15 1110 14 1101 13 1100 12 1011 11 1010 10 1001 9 1000 8 0111 7 0110 6 0101 5 0100 4 0011 3 0010 2 0001 1 0000 0 U2 0111 7 0110 6 0101 5 0100 4 0011 3 0010 2 0001 1 0000 0 1111-1 1110-2 1101-3 1100-4 1011-5 1010-6 1001-7 1000-8 Kod Naturalny Binarny i Kod U2
Zamiana liczb dodatnich na liczby ujemne w kodzie U2 0101 5 Negacja wszystkich 1010 bitów 0001 Dodanie 1 1011-5 0111 7 Negacja wszystkich 1000 bitów 0001 Dodanie 1 1001-7
Zamiana liczb ujemnych na liczby dodatnie w kodzie U2 1001-7 Negacja wszystkich 0110 bitów 0001 Dodanie 1 0111 7 Nie da się!!! 1000-8 Negacja wszystkich 0111 bitów 0001 Dodanie 1 1000-8
Działanie bitów warunkowych KOD NB Dodawanie 0110 6 0011 3 1001 9 C=0, Z=0 1011 11 1100 12 0111 7 C=1, Z=0 0101 5 1011 11 0000 0 C=1, Z=1
Działanie bitów warunkowych KOD NB Odejmowanie W przypadku odejmowania niezależnie od kodu odjemnik jest negowany i zwiększany o1 po czym następuje dodawanie. 1100 12 0110 6 0101 5 1110 14 1100 1010 0101 0010 1 0110 6 0 0111 7 C=0, Z=0 C=1, Z=0
UWAGA w odejmowaniu bit C jest tzw. pożyczką, w związku z czym jest ustawiany wg negacji przeniesienia z najstarszego bitu
0011 3 0100 4 0111 7 Działanie bitów warunkowych KOD U2 Dodawanie 1101-3 1100-4 1001-7 0110 6 0100 4 1010-6 C=0, N=0, V=0 C=1, N=1, V=0 C=0, N=1, V=1 Wynik niepoprawny
Działanie bitów warunkowych KOD U2 1101-3 1100-4 1101 0100 0001 1 Odejmowanie 0011 3 1100-4 0101 0100 0111 7 0110 6 1001-7 0110 0111 1101-3 C=0, N=0, V=0 C=1, N=0, V=0 C=1, N=1, V=1 Wynik niepoprawny
Pamięć programu i danych Pamięć programu to element systemu mikroprocesorowego, w którym przechowywane są rozkazy wykonywane przez mikroprocesor i dane stałe. Najczęściej są to pamięci nieulotne typu ROM, EPROM, EEPROM. Pamięć danych to element systemu mikroprocesorowego, w którym przechowywane są dane i wyniki w trakcie działania mikroprocesora. Najczęściej są to pamięci RAM, EEPROM, rzadziej DRAM. Do adresowania kolejnych komórek pamięci służy magistrala adresowa mikroprocesora, do przesyłania danych, magistrala danych, do zapisu i odczytu pamięci- magistrala sterująca.
Ważne pojęcia Techniki Mikroprocesorwej Stos: wydzielony obszar pamięci służący do przechowywania danych, adresów powrotów z procedur, adresów powrotów z przerwań. Działa jak kolejka typu FI-LO (First Input-Last Output). Adres wierzchołka stosu pokazuje wskaźnik stosu. Przerwanie: sygnał zewnętrzny, wewnętrzny lub rozkaz, powodujący zarzucenie wykonywania programu po dokończeniu bieżącej instrukcji, zapamiętanie adresu powrotu do programu i przejście do wykonania tzw. procedury obsługi zakończonej odpowiednim rozkazem, powodującym powrót do programu właściwego. -sprzętowe: Ze względu na źródło, przerwania dzielimy na: -wewnętrzne (znaczniki), -zewnętrzne (sygnały), -programowe (rozkaz,).
Ze względu na sposób przyjęcia: -maskowalne (aby zostały przyjęty odpowiedni bit maski musi to umożliwić), -niemaskowalne (przyjmowane zawsze i bezwarunkowo). Cykl maszynowy- pojedynczy cykl dostępu do pamięci lub urządzenia we-wy lub akceptacji przerwania. Składa się z kilku cykli zegarowych. Cykl instrukcji- czas potrzebny do wykonani instrukcji od jej pobrania do wykonanie. Składa się z jednego lub kilku cykli maszynowych.
Instrukcja: najmniejszy element języka programowania. Po napisaniu w języku najniższego rzędu (asemblerze) i po przetłumaczeniu na kod binarny może być wykonana przez mikroprocesor. W skład instrukcji wchodzi zawsze kod operacyjny instrukcji. Mogą wejść także dodatkowe informacje typu: -dana natychmiastowa, -adres, -dalsza część kodu instrukcji, itp.. Program: jest to ciąg instrukcji wykonywanych przez mikroprocesor.
Wykonywanie programu przez procesor Zerowanie mikroprocesora Licznik rozkazów- PC=0000 0000 0001 KOD1 DANA pobranie Licznik rozkazów PC=0002 0002 0003 0004 0005 KOD2 KOD3 ADRES1 ADRES2 pobranie pobranie Licznik rozkazów PC=0003 Licznik rozkazów PC=0006 0006 0007 KOD4A KOD4B pobranie Licznik rozkazów PC=0008 0008
Wykorzystanie stosu- obsługa przerwania Licznik rozkazów PC=0000 0000 0001 KOD1 DANA Licznik rozkazów PC=0002 Wskaźnik stosu SP=1004 Przerwanie 0002 0003 KOD2 KOD3 Licznik rozkazów PC=0003 Wskaźnik stosu SP=1004 0004 0005 DANA KOD4 Licznik rozkazów PC=0005 Licznik rozkazów PC=0100 Wskaźnik stosu SP=1002 0100 0101 0102 00 05 Obszar stosu 1000 1001 1002 1003 0103 RETI Instrukcja powrotu z przerwania Licznik rozkazów PC=0005 Wskaźnik stosu SP=1004
Tryby adresacji w systemach mikroprocesorowych adresowanie natychmiastowe- argument jest pobierany bezpośrednio z rozkazu, adresowanie rejestrowe- operandy znajdują się w rejestrach wewnętrznych mikroprocesora, adresowanie bezpośrednie- adres operandu znajduje się bezpośrednio w rozkazie, adresowanie pośrednie- adres operandu znajduje się w rejestrze mikroprocesora, adresowanie bazowe- adres rozkazu wskazuje rejestr bazowy, adresowanie indeksowe- adres efektywny jest sumą zawartości adresu bazowego zawartego w rejestrze indeksowym i przesunięcia zawartego w kodzie rozkazu.
System mikroprocesorowy System mikroprocesorowy: Układ elektroniczny złożony z mikroprocesora wraz z niezbędnymi układami pamięci programu i danych, układami wejścia-wyjścia (zapewniającymi kontakt z użytkownikiem) oraz niezbędnymi układami sterującymi nosi nazwę systemu mikroprocesorowego. Mikrokontroler scalony system mikroprocesorowy, zrealizowany w postaci pojedynczego układu scalonego, który zawiera: -jednostkę centralną (CPU), -pamięć danych oraz na ogół pamięć programu, -układy wejścia-wyjścia.
System mikroprocesorowy Pamęć programu Magistrala danych DO-Di RD WR DO-Di clk Magistrala adresowa Mikroprocesor AO-Ak Schemat blokowy Pamięć danych Dekoder adresowy WR RD Magistrala sterująca Urządzenia wejściawyjścia
Magistrale systemu mikroprocesorowego Magistrala danych- służy do przesyłania danych, wyników oraz kodów instrukcji. Jest to magistrala dwukierunkowa, tzn. informacje zarówno wpływają do mikroprocesora, jak i są przez niego wysyłane do innych układów. Magistrala adresowa- służy do adresowania komórek pamięci lub układów wejścia/wyjścia, z którymi chce się komunikować mikroprocesor. Jest to magistrala jednokierunkowa, tzn. adresy są generowane tylko przez mikroprocesor. Magistrala sterująca- służy do sterowania pracą układów współpracujących z mikroprocesorem, sygnalizowania kierunku przesyłu danych oraz sygnalizowanie pewnych określonych stanów układów współpracujących.
Architektury mikroprocesorów Architektura CISC ang. Complex Instruction Set Computers Architektura RISC ang. Reduced Instruction Set Computers Architektury: Von Neumanna Harvardzka Harvardzka zmodyfikowana
Cechy architektury RISC: -zredukowana liczba rozkazów do niezbędnego minimum, -redukcja trybów adresowania, dzięki czemu kody rozkazów są prostsze, bardziej zunifikowane, (upraszcza dekoder rozkazów), -ograniczenie komunikacji pomiędzy pamięcią, a procesorem, -przetwarzanie potokowe- równoległe wykonywanie rozkazów. Obecnie popularne procesory z punktu widzenia programisty są widziane jako CISC, ale ich rdzeń jest RISC-owy. Rozkazy CISC są rozbijane na mikrorozkazy, które są następnie wykonywane przez RISC-owy blok wykonawczy.
Cechy architektury CISC: -występowanie złożonych, specjalistycznych rozkazów (instrukcji), które wymagają od kilku do kilkunastu cykli maszynowych (zmienna liczba cykli), -szeroka gama trybów adresowania (skomplikowana konstrukcja dekoderów adresu), -stosunkowo długa listy rozkazów procesora. Wady architektury CISC: - zbyt długa lista rozkazów - część z nich jest rzadko używana, -zbyt dużo czasu traci się na operacje przepisania z pamięci do rejestrów i odwrotnie, -ogólnie mała efektywność w obliczeniach numerycznych.
Architektura Von Neumanna RD WR Mikroprocesor Magistrala danych Magistrala adresowa Wspólna przestrzeń adresowa dla pamięci kodu i danych. Wspólne magistrale: -danych, -adresowa, -sterująca. Pamięć danych Pamięć programu
Architektura Harvardzka Mikroprocesor Osobne magistrale adresowe i danych dla programu i danych. Magistrala danych danych Magistrala danych programu Magistrala adresowa programu Magistrala adresowa danych Pamięć danych Pamięć programu
Architektura Harvardzka, zmodyfikowana PSEN RD WR Mikroprocesor Magistrala danych Wspólna magistrala danych i adresowa, ale pamięci rozdzielone dzięki osobnym sygnałom sterującym. Magistrala adresowa Pamięć danych Pamięć programu
Intel 4004 Wprowadzony na rynek 15 listopada 1971 Cechny: -zegar 740 khz, -szyna danych: 4-bitowa, -pamięć adresowalna danych 640 bajtów, -pamięć programu 4 kilobajty. Historia Mikroprocesorów Pierwszy mikroprocesor na świecie używany w kalkulatorach Busicom
Intel 4004 Dane techniczne: -osobna pamięć dla programu i danych (tzw. architektura harwardzka"), -dostępne 46 instrukcji, -16 czterobitowych rejestrów, -stos 3-poziomowy.
Intel 8080 Został wyprodukowany w kwietniu 1974. Cechy mikroprocesora: -zegar 2 MHz, -szyna danych 8-bitowa, -liczba tranzystorów 6000, -pamięć jest adresowana 16-bitową szyną adresową, -jest on uniwersalną jednostką centralną złożoną z jednostki arytmetyczno-logicznej, rejestrów roboczych i układu sterowania, -słowo 8-bitowe, -realizuje 72 instrukcje,
-8 rejestrów programowych dostępnych dla programisty, -wymagał 3-ech napięć zasilające: +5V, +12V, -5V (włączanych w określonej kolejności), -posiadał ubogi zestaw trybów adresowania, -istniała konieczność stosowania dodatkowych układów: zegar i sterownik magistrali.
Mikroprocesor Z80 Firma Zilog została założona przez byłych pracowników firmy Intel. Opracowali oni projekt mikroprocesora opartego na Intel 8080. Nowy układ o nazwie Z80 wszedł do sprzedaży w lipcu 1976 roku. Dużą zasługę w sukcesie nowego mikroprocesora odegrała w Z80 zgodność programowa z 8080 systemy oparte na Z80 bez większych problemów mogły korzystać istniejącej już bazy oprogramowania dla 8080. Zaletami Z80 w porównaniu do 8080 były: -pojedyncze napięcie zasilające, -jednofazowy zegar, -brak konieczności stosowania dodatkowych kontrolerów magistrali, -rozszerzona lista rozkazów (m.in. rozkazy arytmetyczne 16-to bitowe),
-8-bitowa magistrala danych, Cechy mikroprocesora Z80-16-bitowa magistrala adresowa możliwość zaadresowania 64kB pamięci RAM i obszaru 256B przestrzeni in/out, -zasilanie i poziomy logiczne zgodne ze standardem TTL (za wyłączeniem zegara taktującego), -dodatkowe rozkazy (w porównaniu z 8080, m.in. adresacja indeksowa), -wszystkie sygnały sterujące i obie magistrale dostępne wprost (brak multipleksowania), -wbudowany układ odświeżania pamięci dynamicznej; -158 rozkazów, w tym 78 zgodnych z mikroprocesorem Intel 8080 (pełna wsteczna kompatybilność z 8080);
-zestaw rozkazów operujących na 16-bitowych danych (rejestry można sklejać parami); -zegar od 2MHz do 8 MHz (produkowana w NRD (Republika Demokratyczna Niemiec)- wersja 1MHz, - duży jak dla procesora 8-bitowego zestaw rejestrów wewnętrznych ogólnego przeznaczenia wraz z zestawem alternatywnych rejestrów.
Mikroprocesor Z80 (ZILOG) Schemat blokowy [www.zilog.com]
Zestaw rejestrów [www.zilog.com]
A- akumulator, rejestr współpracujący z jednostką arytmetycznologiczną ALU. Jest źródłem argumentów oraz rejestrem wynikowym przy operacjach arytmetycznych 8-mio bitowych i logicznych. Jest rejestrem uprzywilejowanym pod względem trybu ilości trybów adresacji. F- rejestr znaczników, zawiera bity warunkowe ustawiane lub kasowane w czasie działania programu. [www.zilog.com]
C- przeniesienie lub pożyczka, N- ostatnio wykonywaną instrukcją było odejmowanie lub dodawanie (informacja ta jest potrzebna do korekcji dziesiętnej po tych operacjach) P/V- parzystość/przepełnienie Po operacjach arytmetycznych wskazuje czy nastąpiło przepełnienie w przypadku działania na kodzie U2. Po operacjach logicznych wskazuje na parzystą ilość jedynek w akumulatorze. H- przeniesienie połówkowe, informuje o wystąpieniu przeniesienia pomiędzy 3 i 4 bitem bajta (do korekcji dziesiętnej). Z- zerowość, jest ustawiany na jeden jeśli w wyniku operacji arytmetycznej logicznej lub porównania wynik w akumulatorze jest równy 0 S- znak, jest kopią 7 bitu akumulatora, oznacza liczbę ujemną w kodzie U2
Rejestry B i C. Można połączyć je w parę 16-to bitową BC. Są to rejestry ogólnego przeznaczenia wykorzystywane również jako liczniki operacji blokowych i do tworzenia pętli liczących. Rejestr C służy do adresacji przestrzeni we-wy. Rejestry D i E. Można połączyć je w parę 16-to bitową DE. Są to rejestry ogólnego przeznaczenia. Rejestry H i L. Można połączyć je w parę 16-to bitową HL. Są to rejestry ogólnego przeznaczenia. Ponadto para rejestrów HL jest używana jako rejestr adresowy przestrzeni pamięci oraz jako akumulator przy operacjach arytmetycznych 16-to bitowych. Rejestry A i F rejestry lustrzane do A i F. Istnieje możliwość wymiany zawartości tych rejestrów np. na czas wykonywania obsługi przerwania. Rejestry B, C, D, E H,L - rejestry lustrzane do B,C,D,E,H,L. Istnieje możliwość wymiany zawartości tych rejestrów np. na czas wykonywania obsługi przerwania.
Rejestry IX, IY- rejestry 16-to bitowe indeksowe, służące do adresacji obszaru pamięci. W rejestrach tych znajduje się adres bazowy. Przy adresacji indeksowej, adres efektywny jest sumą adresu bazowego zawartego w Ix lub IY i 8-mio bitowego przesunięcia w kodzie U2, podanego za kodem rozkazu przesłania. Kody operacyjne instrukcji wykorzystujących rejestry indeksowe są dwubajtowe. Rejestr SP- 16-to bitowy wskaźnik stosu. Przy składaniu na stos wskaźnik jest zmniejszany a następnie następuje zapis na stos. Po rozpoczęciu programu należy go ustawić w zależności od dysponowanej pamięci. Rejestr PC- 16 bitowy licznik rozkazów, po RESET ustawiany na 0000. Wskazuje adres następnego rozkazu do odczytu. Rejestr R- rejestr odświeżania zawiera cyklicznie zwiększany adres (osiem młodszych bitów magistrali adresowej) do odświeżania pamięci dynamicznych. Rejestr I- rejestr adresu tablicy przerwań
Wyprowadzenia mikroprocesora Z80 [www.zilog.com]
Wyprowadzenia mikroprocesora Z80 A0-A15 (wy)- 16-to bitowa magistrala adresowa umożliwiająca zaadresowanie 64-kB pamięci oraz 256B urządzeń we-wy. D0-D7 (we-wy)- 8-mio bitowa magistrala danych. RD (wy)- strob odczytu pamięci lub urządzenia wejścia-wyjścia (aktywny stan niski) WR (wy)- strob zapisu do pamięci lub urządzenia wejścia-wyjścia (aktywny stan niski) MREQ (wy)- informacja iż bieżący cykl jest związany z dostępem do pamięci (aktywny stan niski) IORQ (wy)- informacja iż bieżący cykl jest związany z dostępem do urządzenia we-wy (aktywny stan niski) M1 (wy)- informacja, że bieżący cykl jest pierwszym cyklem maszynowym cyklu rozkazowego (pobranie pierwszego bajtu KO z pamięci) (aktywny stan niski)
Wyprowadzenia mikroprocesora Z80 IORQ + M1 (wy)- cykl akceptacji przerwania (informuje o przyjęciu przerwania maskowalnego) WAIT (we)- sygnał niegotowości, wykorzystywany do wydłużania cyklu magistrali przy dostępie do pamięci lub urządzenia we-wy (aktywny stanem niskim). Sygnał jest testowany opadającym zboczem w takcie T2 zegara w czasie każdego cyklu maszynowego. HALT (wy)- sygnał informujący iż mikroprocesor jest w trakcie wykonywania instrukcji HALT (aktywny stan niskim) RFSH (wy)- sygnał informujący iż wystawiony adres dotyczy odświeżania pamięci dynamicznej (aktywny stanem niskim) RESET (we)- wejście zerowania mikroprocesora, powoduje wyzerowanie licznika rozkazów i przygotowanie do pracy (aktywny stanem niskim).
Wyprowadzenia mikroprocesora Z80 CLK (we)- wejście sygnału zegarowego BUSRQ (we)- wejście żądania zwolnienia magistrali (aktywne stanem niskim). Testowane w każdym cyklu maszynowym. Jeżeli pod koniec bieżącego cyklu maszynowego mikroprocesor wykryje stan niski na tym wejściu, kończy cykl (nie kończy rozkazu) na liniach danych, adresowych i sterujących pojawia się stan wysokiej impedancji. Wysterowuje linię BUSACK. Po wycofaniu sygnału procesor dokańcza bieżący cykl rozkazowy. BUSACK (wy)- informuje iż procesor oddał magistralę.
Technika mikroprocesorowa I Wykład 2
Literatura: www.zilog.com Z80 Family, CPU User Manual
Cykle magistrali w mikroprocesorze Z80 -odczyt kodu rozkazu, -odczyt-zapis pamięci, -odczyt-zapis urządzenia we-wy, -cykl oddania magistrali, -cykl przyjęcia przerwania maskowalnego, -cykl przyjęcia przerwania niemaskowalnego, -wyjście z rozkazu HALT.
Pobranie kodu rozkazu z pamięci
Cykl odczytu i zapisu pamięci
Cykl odczytu i zapisu urządzeń we-wy
Cykl oddania magistrali
Cykl przyjęcia przerwania maskowalnego
Cykl przyjęcia przerwania niemaskowalnego
INT Wyjście z rozkazu HALT
System przerwań mikroprocesora Z80 Z80 posiada dwa wejścia zgłaszania przerwań: NMI- przerwanie niemaskowalne, INT- przerwanie maskowalne (odmaskowanie rozkazem EI (enable Ibterrupt), zamaskowanie rozkazem DI (Disable Interrupt). Przerwanie NMI Przerwanie jest aktywne opadającym zboczem na wejściu NMI. Pojawienie się ujemnego zbocza (przejście z 1 na 0 ), powoduje: -złożenie na stosie adresu powrotu do programu głównego, -załadowanie do PC adresu 0066h (stały adres obsługi przerwania niemaskowalnego).
Tryby przyjęcia przerwania maskowalnego: W mikroprocesorze Z80 są 3 tryby przyjmowania przerwania maskowalnego, przełączane rozkazem IMx (Interrupt Mode x-numer modu). W architekturze wewnętrznej mikroprocesora Z80 istnieją dwa przerzutniki flip-flop odpowiedzialne za aktywację obsługi przerwań maskowalnych. Noszą nazwę odpowiednio: IFF1 i IFF2. IFF1- włącza i wyłącza obsługę przerwań maskowalnych (jest maską przerwań maskowalnych, po RESET- zerowany), IFF2 -stanowi tymczasowe miejsce przechowywania stanu maski przerwań (stanu przerzutnika- IFF1 jest przepisywany do IFF2), po RESET IFF1 i IFF2 są zerowane. Gdy pojawi się przerwanie niemaskowalne (wyższy priorytet), stan maski przerwań IFF1 jest zapamiętywany w rejestrze bitowym IFF2. Zdekodowanie rozkazu powrotu z przerwania niemaskowalnego NMI (RETN) powoduje odtworzenie stanu IFF1 na podstawie IFF2.
Tryb 0- odpowiada reakcji na przerwania mikroprocesora 8080. W tym trybie urządzenie przerywające, w cyklu akceptacji przerwania, umieszcza na magistrali danych dowolną instrukcję, a mikroprocesor ją wykonuje. Dedykowaną instrukcją jest rozkaz restartu RST n (n:0-7). Instrukcja ta powoduje złożenie na stosie adresu powrotu i skok do procedury obsługi zależny od numeru restartu: n=0 adres 0000h n=1 adres 0008h n=2 adres 0010h n=3 adres 0018h n=4 adres 0020h n=5 adres 0028h n=6 adres 0030h n=7 adres 0038h
Tryb 1- w tym trybie mikroprocesor reaguje na przerwanie przez wykonanie procedury obsługi od adresu 0038H (po złożeniu na stosie. Zatem reakcja jest identyczna jak reakcja na przerwanie niemaskowalne, w którym adresem wywoływanym jest adres 0066H. Tryb 2- jest najbardziej elastycznym trybem reakcji na przerwanie. W tym trybie programista tworzy tablicę 16-bitowych adresów startowych dla każdej procedury obsługi przerwania. Tablica ta może być umieszczona w dowolnym miejscu w pamięci (decyduje o tym zawartość rejestru I). Gdy przerwanie zostanie przyjęte, urządzenie zgłaszające wystawia na magistrali danych 8-mio bitową, mniej znaczącą, zawsze parzystą część 16-bitowego wskaźnika, w celu pobrania z tablicy adresu startowego obsługi przerwania. W związku z powyższym tryb 2 dopuszcza tylko 128 rozróżnialnych źródeł przerwania.
Tryby adresacji w mikroprocesorze Z80 Mikroprocesor Z80 realizuje następujące tryby adresowania: -natychmiastowy argument bezpośrednio za kodem operacji (LD A,0F załaduj do akumulatora liczbę 0F), -bezpośredni dwubajtowy adres argumentu znajduje się w pamięci bezpośrednio za kodem operacji (LD A,(700) załaduj do akumulatora zawartość komórki pamięci o adresie 0700), -pośredni erejstrowy dwubajtowy adres argumentu znajduje się w parze rejestrów BC, DE, HL lub SP (LD A,(BC) załaduj do akumulatora zawartość komórki pamięci o adresie zawartym w parze rejestrów BC), -indeksowy dwubajtowy adres argumentu tworzony jest jako suma zawartości jednego z rejestrów indeksowych IX lub IY i jednobajtowego przesunięcia w kodzie U2 zapisanego za kodem operacji; np. LD A,(IX+8) załaduj do akumulatora zawartość komórki pamięci o adresie zawartym w rejestrze IX zwiększonym o 8;
-względny tryb wykorzystywany tylko przez rozkaz skoku względnego JR zawartość rejestru PC jest modyfikowana przez dodanie jednobajtowego przesunięcia w kodzie U2 umieszczonego w pamięci za kodem operacji skoku;, -rejestrowy argument znajduje się w jednym z rejestrów lub w parze rejestrów (w przypadku argumentu 16-bitowego); np. ADD IX,SP dodaj do zawartości rej. IX wartość rej SP; -strony zerowej, pojedynczych bitów i implikowany dotyczą małej liczby rozkazów sterujących (np. RST 8 wywołanie podprogramu pod adresem 8), logicznych-operacje na pojedynczych bitach (np. RES 0,A skasowanie bitu 0 w akumulatorze) oraz rozkazów dla których jednoznacznie określone jest położenie argumentu (np. DAA korekcja dziesiętna akumulatora po operacjach arytmetycznych).
Lista rozkazów mikroprocesora Z80
Instrukcje przesyłania danych (8-mio bitowych) Prześlij zawartość rejestru r do rejestru r
Wpisz do rejestru r liczbę 8-mio bitową n
Załaduj do rejestru r zawartość komórki pamięci o adresie zawartym w HL
Załaduj do r zawartość komórki o adresie zawartej w IX+ offset d
Załaduj do r zawartość komórki o adresie zawartej w IX+ offset d
Zapisz zawartość komórki o adresie zawartym w HL do rejestru r
Zapisz zawartość rejestru r do komórki pamięci o adresie zawartym w IX z offsetem d
Zapisz zawartość rejestru r do komórki pamięci o adresie zawartym w IY z offsetem d
Zapisz do komórki o adresie zawartym w HL liczbę 8-mio bitową n
Zapisz do komórki o adresie zawartym w IX+ offset d, liczbę 8-mio bitową n
Zapisz do komórki o adresie zawartym w IY+ offset d, liczbę 8-mio bitową n
Załaduj do akumulatora A zawartość komórki pamięci o adresie zawartym w parze rejestrów BC
Załaduj do akumulatora A zawartość komórki pamięci o adresie zawartym w parze rejestrów DE
Załaduj do akumulatora A zawartość komórki pamięci o adresie nn
Załaduj zawartość akumulatora do komórki pamięci o adresie zawartym w parze rejestrów BC
Załaduj zawartość akumulatora do komórki pamięci o adresie zawartym w parze rejestrów DE
Załaduj zawartość akumulatora A do komórki pamięci o adresie nn
Przepisz zawartość rejestru adresu tablicy przerwań do rejestru A
Przepisz zawartość rejestru odświeżania do rejestru A
Zapisz zawartość akumulatora do rejestru adresu tablicy przerwań
Zapisz zawartość akumulatora do rejestru odświeżania
Instrukcje przesyłania danych (16-to bitowych) Zapisz do pary rejestrów dd daną 16-to bitową nn
Zapisz do rejestru indeksowego IX liczbę 16-to bitową nn
Zapisz do rejestru indeksowego IY liczbę 16-to bitową nn
Załadowanie zawartość dwóch kolejnych komórek pamięci spod adresu nn do pary rejestrów HL
Załadowanie do pary rejestrów dd zawartości komórek pamięci spod adresu nn
Załadowanie do IX zawartości komórek pamięci spod adresu nn
Załadowanie do IY zawartości komórek pamięci spod adresu nn
Załaduj do komórek pod adresem nn zawartość rejestru HL
Załaduj zawartość pary rejestrów dd do komórek pamięci od adresu nn
Załaduj zawartość rejestru IX do komórek pamięci od adresu nn
Załaduj zawartość rejestru IY do komórek pamięci od adresu nn
Zapisz zawartość rejestru HL do rejestru SP
Przepisz zawartość rejestru IX do rejestru SP
Przepisz zawartość rejestru IY do rejestru SP
Złóż na stosie parę rejestrów qq
Złóż na stosie rejestr IX
Złóż na stosie rejestr IY
Ściągnij ze stosu dane do pary rejestrów qq
Ściągnij ze stosu daną do rejestru IX
Ściągnij ze stosu daną do rejestru IY
Wymień zawartość pary rejestrów DE z HL
Wymień zawartość pary rejestrów AF z A F
Wymień zawartość pary rejestrów BC z B C, DE z D E, HL z H,L,
Wymień zawartość komórek pamięci o adresie wskazywanym przez wskaźnik stosu z zawartością HL
Wymień zawartość komórek pamięci o adresie wskazywanym prze wskaźnik stosu z zawartością IX
Wymień zawartość komórek pamięci o adresie wskazywanym prze wskaźnik stosu z zawartością IY
Instrukcje arytmetyczne 8-mio bitowe Dodaj do zawartości A zawartość innego rejestru, wynik umieść w A
Dodaj do zawartości A liczbę 8-mio bitową, wynik umieść w A
Dodaj do zawartości A zawartość komórki pamięci o adresie zawartym w HL, wynik umieść w A
Dodaj do zawartości A zawartość komórki pamięci o adresie zawartym w IX z offsetem d, wynik umieść w A
Dodaj do zawartości A zawartość komórki pamięci o adresie zawartym w IY z offsetem d, wynik umieść w A
Dodaj do zawartości A zawartość: rejestru, liczbę n, zawartość komórki pamięci adresowanej przez HL, IX, IY oraz znacznika C, wynik w A
Odejmij od zawartości A zawartość: rejestru, liczbę n, zawartość komórki pamięci adresowanej przez HL, IX, IY, wynik w A
Odejmij od zawartości A zawartość: rejestru, liczbę n, zawartość komórki pamięci adresowanej przez HL, IX, IY oraz znacznika C, wynik w A
Wymnóż logicznie zawartość A z zawartością: rejestru, liczbą n, zawartością komórki pamięci adresowanej przez HL, IX, IY, wynik w A
Dodaj logicznie zawartość A z zawartością: rejestru, liczbą n, zawartością komórki pamięci adresowanej przez HL, IX, IY, wynik w A
Wykonaj operację XOR zawartości A z zawartością: rejestru, liczbą n, zawartością komórki pamięci adresowanej przez HL, IX, IY, wynik w A
Porównaj zawartość A z zawartością: rejestru, liczbą n, zawartością komórki pamięci adresowanej przez HL, IX, IY, wyniku nie zapisuj
Zwiększ o 1 zawartość rejestru r
Zwiększ o 1 zawartość komórki pamięci o adresie zawartym w parze rejestrów HL
Zwiększ o 1 zawartość komórki pamięci o adresie zawartym IX z offsetem d
Zwiększ o 1 zawartość komórki pamięci o adresie zawartym IY z offsetem d
Zmniejsz o 1 zwartość rejestru r, komórki pamięci o adresie zawartym w HL, o adresie zwartym w IX lub IY z offsetem d
Rozkazy arytmetyczne ogólnego przeznaczenia oraz sterujące CPU Korekcja dziesiętna po dodawaniu i odejmowaniu
Przykłady korekcji dziesiętnej
Zanegowanie zawartości akumulatora
Negacja zawartości akumulatora
Negacja bitu przeniesienia
Ustawienie bitu przeniesienia
Operacja pusta (No operating) nic nie rób
Rozkaz zatrzymania (oczekiwania na przerwanie)
Zamaskowanie przerwań maskowalnych
Odmaskowanie przerwań maskowalnych
Aktywacja modu 0 przyjęcia przerwań maskowalnych
Aktywacja modu 1 przyjęcia przerwań maskowalnych
Aktywacja modu 2 przyjęcia przerwań maskowalnych
Rozkazy arytmetyczne 16-to bitowe Do zawartośći HL dodaj zawartości pary rejestrów ss, wynik w HL
Do zawartośći HL dodaj zawartości pary rejestrów ss oraz biu C, wynik w HL
Przesłania blokowe
Zawartość akumulatora jest porównywana z zawartością komórki o adresie zawartym w HL, w przypadku pozytywnego porównania odpowiedni bit warunkowy jest ustawiany.
Porównanie zawartości akumulatora i komórki pamięci zawartej w HL. Adres HL jest dekrementowany. Licznik pętli jest dekrementowany. Gdy A=(HL) lub BC=0000 instrukcja jest przerwana.
Rozkazy arytmetyczne 8-mio bitowe