Architektura mikroprocesorów Z80
Transkrypt
Architektura mikroprocesorów Z80
Gaweł Architektura mikroprocesorów Z80 zagadnienia oprogramowania Białystok, luty 2006 W ręcz kultowy mikroprocesor Z80 jest mikroprocesorem 8-bitowym zbudowanym w oparciu o architekturę Von Neumanna. Główną cechą charakterystyczną procesorów w architekturze Von Neumanna jest wspólna pamięć danych i kodu programu. Łatwo z tego wysnuć wniosek, że wczytanie kodu programu z dowolnego źródła, umieszczenie go w pamięci (oczywiście jedynie w przypadku, gdy technicznie możliwy jest zapis do pamięci) i uruchomienie jest czynnością jak najbardziej naturalną. Do innych procesorów o tym samym typie architektury można zaliczyć procesory MC6800 (firmy Motorola), I8080 z późniejszą mutacją w postaci procesora I8085 (firmy Intel) i obecnie najbardziej rozpowszechniony I8086 wraz z wszystkimi mutacjami aż do Pentium włącznie. Fot. 1: Mikroprocesory Z80 różnych producentów Mikroprocesor Z80 jest mocno ulepszoną wersją procesora I8080 (kompatybilność z procesorem Intela na poziomie kodów instrukcji). Patrząc na historię rozwoju niektórych mikroprocesorów, nie da się ukryć, że współczesne komputery zbudowane w oparciu o procesory pentium zawierają w sobie pewne cechy odziedziczone po procesorze I8080. Niejako metodą indukcji można wnioskować, że w żyłach procesorów pentium (a może należałoby powiedzieć w szynach systemowych) znajdziemy geny zawarte w Z80. Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -2/27- Program binarny stworzony dla procesora I8080 miał być bez problemów akceptowalny przez procesor Z80. Jednak wybrane instrukcje arytmetyczne dawały inny rezultat w rejestrze wskaźników, toteż istnieje metoda programowego wykrycia, czy program jest uruchomiony w systemie zbudowanym w oparciu o mikroprocesor Zilog'a czy Inte'a. Oprócz wprowadzenia wielu użytecznych instrukcji, procesor Z80 odróżniał się od procesora Intel'a wprowadzeniem rejestrów indeksowych pozwalających na rozbudowane sposoby adresowania. Nie bez znaczenia pozostaje fakt, że Z80 jako pierwszy procesor miał zrealizowane sprzętowe odświeżanie pamięci dynamicznych. Po wykonaniu każdej instrukcji następowała realizacja sprzętowego cyklu odświeżenia kolejnego wiersza w pamięciach dynamicznych (numery odświeżanych wierszy są zliczane w specjalnym rejestrze R). Rozwiązywało to wiele problemów konstrukcyjnych w przypadku stosowania pamięci dynamicznych. Obecnie to z pewnością traci na znaczeniu, ponieważ pojemności pamięci statycznych są znacznie większe niż przed wielu laty. W czasach, gdy ten procesor zdobywał rynek dostępne były pamięci statyczne o pojemności do kilku kilobitów (przykładowo rozpowszechnioną pamięcią była 2114, pamięć statyczna 1 kilo x 4 bity), natomiast pamięci dynamiczne 16 kilo x 1 bit nie były niczym niezwykłym. Zasoby mikroprocesora Z80 (czyli, co ten procek miał do dyspozycji) są następujące: ● akumulator do 8-bitowych operacji arytmetycznych i logicznych [A], ● rejestr wskaźników [F], ● 8-bitowy rejestr B ogólnego przeznaczenia, ● 8-bitowy rejestr C ogólnego przeznaczenia, ● 8-bitowy rejestr D ogólnego przeznaczenia, ● 8-bitowy rejestr E ogólnego przeznaczenia, ● 8-bitowy rejestr H ogólnego przeznaczenia, ● 8-bitowy rejestr L ogólnego przeznaczenia, ● 8-bitowy rejestr I związany z obsługą przerwań maskowalnych, ● 8-bitowy rejestr R związany z odświeżaniem pamięci dynamicznych, ● 16-bitowy rejestr indeksowy IX, ● 16-bitowy rejestr indeksowy IY, ● 16-bitowy rejestr wskaźnika stosu SP, ● 16-bitowy rejestr licznika rozkazów PC (ten rejestr jest rejestrem ukrytym i niedostępnym do używania w programie). Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -3/27- Pewną innowacją, która pojawiła się w procesorze Z80 jest zdublowany zespół podstawowych rejestrów (to jest rejestrów A, F, B, C, D, E, H oraz L), mający duże znaczenie w obsłudze przerwań. Procesor posiadał dwa zestawy tych rejestrów, z czego tylko jeden z nich był aktywny. Obsługa przerwania (szczególnie w przypadku gdy nie jest możliwa obsługa przerwań w przerwaniach) używając dwóch instrukcji (EX AF,AF' oraz EXX) mogła przełączyć się na alternatywny zespół rejestrów, dowolnie je używać i przed zakończeniem obsługi przerwania powrócić do poprzedniego, nienaruszonego zestawu rejestrów (bez odkładania rejestrów na stosie). Wybrane rejestry 8-bitowe mogą być łączone w pary tworząc rejestry 16bitowe. Możliwe do uzyskania pary rejestrów są następujące: ● rejestr BC jako połączenie rejestru B i C, ● rejestr DE jako połączenie rejestru D i E, ● rejestr HL jako połączenie rejestru H i L. Tak utworzone pary rejestrów generalnie służą do adresowania pamięci, a w szczególności rejestr HL. Warto tu zauważyć, że mikroprocesor Z80 posiadał instrukcje 16-bitowego dodawania, co jest bardzo pomocne przy obliczaniu adresów w pamięci. Rolę 16-bitowego akumulatora spełniał rejestr HL. Inną ciekawą cechą procesora Z80 są instrukcje blokowe. Wpisując do odpowiednich rejestrów wymagane dane, można było operować na całym bloku. Jako przykład niech posłuży instrukcja LDIR służąca do przepisania bloku danych z jednego miejsca w drugie. Wymagała ona wpisania do rejestru HL adresu miejsca źródłowego, do rejestru DE adresu miejsca docelowego, do rejestru BC wielkości bloku. LD HL,<adres z> LD DE,<adres do> LD BC,1000 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -4/27- LDIR 4 instrukcje zilogowe i mamy przepisane 1000 bajtów z jednego miejsca do drugiego. Na bazie tej instrukcji możne było uzyskać inne wartościowe cechy. Przykładowo poniższy ciąg instrukcji LD HL,<adres> LD DE,<adres>+1 LD BC,1000 LDIR powodował replikację zawartości bajtu pamięci o adresie określonym w rejestrze HL w całym obszarze. Taki chwyt powszechnie był używany do zerowania obszarów w pamięci RAM. Ciekawą cechą mikroprocesora Z80 jest sposób rozwiązania obsługi przerwań. Za pomocą instrukcji IM można było wybrać programowo jeden z trzech możliwych trybów obsługi przerwań. Są to: ● tryb 0 (po wykonaniu instrukcji IM 0), ● tryb 1 (po wykonaniu instrukcji IM 1), ● tryb 2 (po wykonaniu instrukcji IM 2). Tryb 0 W tym trybie sposób obsługi jest zgodny ze sposobem oferowanym przez procesory I8080. Urządzenie przerywające umieszcza na magistrali danych rozkaz RST <numer>. Przy realizacji tej instrukcji na stosie jest zachowany aktualny stan rejestru licznika instrukcji i następuje skok do odpowiedniego stałego miejsca w pamięci. Tryb 1 Podobnie jak w dla przerwań niemaskowalnych, procesor odkłada na stosie zawartość licznika rozkazów i realizuje skok do komórki o adresie 38 hex. Tryb 2 Jest to wektoryzowany i najbardziej efektywny sposób obsługi przerwań. W tym trybie adres procedury obsługi przerwania (jako 16-bitowy adres w pamięci) składa się w części starszej z zawartości rejestru I (związanego z przerwaniami i wcześniej odpowiednio zainicjowanego) oraz w części młodszej z danych dostarczonych poprzez magistralę danych z urządzenia przerywającego (również odpowiednio wcześniej zainicjowanego). Tak ustalony adres jest wskazaniem w pamięci na procedurę obsługi przerwania. Należy tu jednocześnie zauważyć, że w tym trybie obsługi przerwań mikroprocesor mógł współpracować jedynie ze “swoimi” układami (zaprojektowanymi dla Z80). W pewnym sensie obsługa przerwań w tym trybie jest “sprzętowo rozproszona” i sam mikroprocesor musiał umieć “dogadać się” z urządzeniami generującymi przerwanie. Po sygnale zerowania, mikroprocesor z zablokowanymi przerwaniami maskowalnymi (w trybie IM 0) rozpoczyna pracę od wykonania instrukcji spod Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -5/27- adresu 0 w pamięci (co nie jest regułą, bo przykładowo 8086 rusza praktycznie od końca pamięci /dokładniej 16 bajtów przed fizycznym końcem przestrzeni adresowej/). W pierwszej kolejności należy zadbać o właściwie ustawienie wskaźnika stosu SP. Stos ma typową organizację, to znaczy “rośnie w dół”. Każde odłożenie na stos zawartości rejestrów zmniejsza zawartość rejestru SP o 2 (każda instrukcja push i pop dotyczy pary rejestrów [BC, DE, HL, AF – jako złożenie do 16bitowego rejestru akumulatora A i rejestru wskaźników F]). Język assemblera Z80 nie odbiega od jakiegokolwiek assemblera innych procesorów. Tak jak wszędzie występują typowe dyrektywy tego języka, jak przykładowo: ● ORG ● EQU ● DEFS ● DEFB ● DEFW Postać wiesza programu źródłowego również ma identyczną postać. Każdy wiersza zawiera zapis instrukcji języka, która może być poprzedzona etykietą, identycznie znak średnika jest używany jako początek komentarza w programie. Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -6/27- Postać instrukcji I. grupa rozkazów przesłań informacji 8-bitowych Zapis instrukcji Znaczenie LD reg1,reg2 prześlij zawartość rejestru reg2 do reg1 [reg1] <--- [reg2] LD reg,data8 wpisz do rejestru reg wartość data8 [reg] <--- data8 LD reg,(HL) prześlij zawartość bajtu adresowanego przez zawartość pary rejestrów HL do rejestru reg [reg] <--- [[HL]] LD reg,(IX+disp) LD reg,(IX-disp) prześlij zawartość bajtu adresowanego przez wartość wyrażenia IX+disp lub IX-disp do rejestru reg [reg] <--- [[IX]+disp] lub [reg] <--- [[IX]-disp] LD reg,(IY+disp) LD reg,(IY-disp) prześlij zawartość bajtu adresowanego przez wartość wyrażenia IY+disp lub IY-disp do rejestru reg [reg] <--- [[IY]+disp] lub [reg] <--- [[IY]-disp] LD (HL),reg prześlij zawartość rejestru reg do pamięci pod adres określony zawartością pary rejestrów HL [[HL]] <--- [reg] LD (IX+disp),reg LD (IX-disp),reg prześlij zawartość rejestru reg do pamięci pod adres określony przez wartość wyrażenia IX+disp lub IX-disp [[IX]+disp] <--- [reg] lub [[IX]-disp] <--- [reg] LD (IY+disp),reg LD (IY-disp),reg prześlij zawartość rejestru reg do pamięci pod adres określony przez wartość wyrażenia IY+disp lub IY-disp [[IY]+disp] <--- [reg] lub [[IY]-disp] <--- [reg] LD (HL),data8 wpisz wartość data8 do pamięci operacyjnej pod adres określony przez zawartość pary rejestrów HL [[HL]] <--- data8 LD (IX+disp),data8 LD (IX-disp),data8 wpisz wartość data8 do pamięci operacyjnej pod adres określony wartością wyrażenia IX+disp lub IX-disp [[IX]+disp] <--- data8 lub [[IX]-disp] <--- data8 LD (IY+disp),data8 LD (IY-disp),data8 wpisz wartość data8 do pamięci operacyjnej pod adres określony wartością wyrażenia IY+disp lub IY-disp [[IY]+disp] <-- data8 lub [[IY]-disp] <-- data8 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -7/27- Zapis instrukcji Znaczenie LD A,(BC) prześlij zawartość bajtu z pamięci operacyjnej adresowanej zawartością pary rejestrów BC do akumulatora A [A] <--- [BC] LD A,(DE) prześlij zawartość bajtu z pamięci operacyjnej adresowanej zawartością pary rejestrów DE do akumulatora A [A] <--- [DE] LD A,(adr16) prześlij zawartość bajtu z pamięci operacyjnej o adresie adr16 do akumulatora A [A] <--- [adr16] LD (BC),A prześlij zawartość akumulatora A do pamięci operacyjnej pod adres określony przez zawartość pary rejestrów BC [BC] <--- [A] LD (DE),A prześlij zawartość akumulatora A do pamięci operacyjnej pod adres określony przez zawartość pary rejestrów DE [DE] <-- [A] LD (adr16),A prześlij zawartość akumulatora A do pamięci operacyjnej o adresie adr16 [adr16] <-- [A] LD A,I prześlij zawartość rejestru I do akumulatora A [A] <--- [I] LD A,R prześlij zawartość rejestru R do akumulatora A [A] <--- [R] LD I,A prześlij zawartość akumulatora A do rejestru I [I] <--- [A] LD R,A prześlij zawartość akumulatora A do rejestru R [R] <--- [A] II. grupa rozkazów przesłań informacji 16-bitowych Zapis instrukcji Znaczenie LD BC,data16 wpisz do pary rejestrów BC wartość data16 [BC] <--- data16 LD DE,data16 wpisz do pary rejestrów DE wartość data16 [DE] <--- data16 LD HL,data16 wpisz do pary rejestrów HL wartość data16 [HL] <--- data16 LD SP,data16 wpisz do rejestru SP wartość data16 [SP] <--- data16 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -8/27- Zapis instrukcji Znaczenie LD IX,data16 wpisz do rejestru IX wartość data16 [IX] <--- data16 LD IY,data16 wpisz do rejestru IY wartość data16 [IY] <--- data16 LD HL,(adr16) wpisz do pary rejestrów HL zawartość dwóch bajtów pamięci operacyjnej o adresie adr16 [HL] <--- [adr16] LD BC,(adr16) wpisz do pary rejestrów BC zawartość dwóch bajtów pamięci operacyjnej o adresie adr16 [BC] <--- [adr16] LD DE,(adr16) wpisz do pary rejestrów DE zawartość dwóch bajtów pamięci operacyjnej o adresie adr16 [DE] <--- [adr16] LD SP,(adr16) wpisz do rejestru SP zawartość dwóch bajtów pamięci operacyjnej o adresie adr16 [SP] <--- [adr16] LD IX,(adr16) wpisz do rejestru IX zawartość dwóch bajtów pamięci operacyjnej o adresie adr16 [IX] <--- [adr16] LD IY,(adr16) wpisz do rejestru IY zawartość dwóch bajtów pamięci operacyjnej o adresie adr16 [IY] <--- [adr16] LD (adr16),HL składuj zawartość pary rejestrów HL w pamięci operacyjnej o adresie adr16 [adr16] <--- [HL] LD (adr16),BC składuj zawartość pary rejestrów BC w pamięci operacyjnej o adresie adr16 [adr16] <--- [BC] LD (adr16),DE składuj zawartość pary rejestrów DE w pamięci operacyjnej o adresie adr16 [adr16] <--- [DE] LD (adr16),SP składuj zawartość rejestru SP w pamięci operacyjnej o adresie adr16 [adr16] <--- [SP] LD (adr16),IX składuj zawartość rejestru IX w pamięci operacyjnej o adresie adr16 [adr16] <--- [IX] LD (adr16),IY składuj zawartość rejestru IY w pamięci operacyjnej o adresie adr16 [adr16] <--- [IY] LD SP,HL prześlij zawartość pary rejestrów HL do rejestru SP [SP] <--- [HL] LD SP,IX prześlij zawartość rejestru IX do rejestru SP [SP] <--- [IX] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -9/27- Zapis instrukcji Znaczenie LD SP,IY prześlij zawartość rejestru IY do rejestru SP [SP] <--- [IY] PUSH BC składuj zawartość pary rejestrów BC na szczycie stosu [[SP]-1] <--- [B] [[SP]-2] <--- [C] [SP] <--- [SP]-2 PUSH DE składuj zawartość pary rejestrów DE na szczycie stosu [[SP]-1] <--- [D] [[SP]-2] <--- [E] [SP] <--- [SP]-2 PUSH HL składuj zawartość pary rejestrów HL na szczycie stosu [[SP]-1] <--- [H] [[SP]-2] <--- [L] [SP] <--- [SP]-2 PUSH AF składuj zawartość akumulatora A i wskaźników F na szczycie stosu [[SP]-1] <--- [A] [[SP]-2] <--- [F] [SP] <--- [SP]-2 PUSH IX składuj zawartość rejestru IX na szczycie stosu [[SP]-1] <--- [hi(IX)] [[SP]-2] <--- [lo(IX)] [SP] <--- [SP]-2 PUSH IY składuj zawartość rejestru IY na szczycie stosu [[SP]-1] <--- [hi(IY)] [[SP]-2] <--- [lo(IY)] [SP] <--- [SP]-2 POP BC odtwórz ze szczytu stosu zawartość pary rejestrów BC [C] <--- [[SP]] [B] <--- [[SP]+1] [SP] <--- [SP]+2 POP DE odtwórz ze szczytu stosu zawartość pary rejestrów DE [E] <--- [[SP]] [D] <--- [[SP]+1] [SP] <--- [SP]+2 POP HL odtwórz ze szczytu stosu zawartość pary rejestrów HL [L] <--- [[SP]] [H] <--- [[SP]+1] [SP] <--- [SP]+2 POP AF odtwórz ze szczytu stosu zawartość rejestru A i wskaźników F [F] <--- [[SP]] [A] <--- [[SP]+1] [SP] <--- [SP]+2 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -10/27- Zapis instrukcji Znaczenie POP IX odtwórz ze szczytu stosu zawartość rejestru IX [lo(IX)] <--- [[SP]] [hi(IX)] <--- [[SP]+1] [SP] <--- [SP]+2 POP IY odtwórz ze szczytu stosu zawartość rejestru IY [lo(IY)] <--- [[SP]] [hi(IY)] <--- [[SP]+1] [SP] <--- [SP]+2 III. grupa wyszukiwania Zapis instrukcji rozkazów wymiany danych, transmisji grupowych oraz Znaczenie EX DE,HL wymień zawartości par rejestrów DE i HL miedzy sobą [DE] <----> [HL] EX AF,AF' wymień zawartość akumulatora A i wskaźników F z alternatywnym akumulatorem A' i wskaźnikami F' [AF] <---> [AF'] EX (SP),HL wymień zawartość szczytu stosu z para rejestrów HL [H] <---> [[SP]+1] [L] <---> [[SP]] EX (SP),IX wymień zawartość szczytu stosu z rejestrem IX [hi(IX)] <---> [[SP]+1] [lo(IX)] <---> [[SP]] EX (SP),IY wymień zawartość szczytu stosu z rejestrem IY [hi(IY)] <---> [[SP]+1] [lo(IY)] <---> [[SP]] EXX wymień zawartości rejestrów B,C,D,E,H,L z zestawem alternatywnym [BC] <---> [BC'] [DE] <---> [DE'] [HL] <---> [HL'] LDI przepisz jeden bajt z pamięci o adresie zawartym w parze rejestrów HL do pamięci o adresie zawartym w parze rejestrów DE, zwiększ zawartości rejestrów HL i DE oraz zmniejsz zawartość rejestru BC o jeden [[DE]] <--- [[HL]] [DE] <--- [DE]+1 [HL] <--- [HL]+1 [BE] <--- [BC]-1 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -11/27- Zapis instrukcji Znaczenie LDIR przepisz blok pamięci o wielkości określonej zawartością pary rejestrów BC spod adresu określonego zawartością pary rejestrów HL do pamięci określonej zawartością pary rejestrów DE, powtarzaj aż do [BC]=0 [[DE]] <--- [[HL]] [DE] <--- [DE]+1 [HL] <--- [HL]+1 [BC] <--- [BC]-1 LDD przepisz jeden bajt z pamięci o adresie zawartym w parze rejestrów HL do pamięci o adresie zawartym w parze rejestrów DE, zmniejsz zawartości rejestrów HL i DE oraz zmniejsz zawartość rejestru BC o jeden [[DE]] <--- [[HL]] [DE] <--- [DE]-1 [HL] <--- [HL]-1 [BE] <--- [BC]-1 LDDR przepisz blok pamięci o wielkości określonej zawartością pary rejestrów BC spod adresu określonego zawartością pary rejestrów HL do pamięci określonej zawartością pary rejestrów DE, powtarzaj aż do [BC]=0 [[DE]] <--- [[HL]] [DE] <--- [DE]-1 [HL] <--- [HL]-1 [BC] <--- [BC]-1 CPI porównaj (ustawiając tylko wskaźniki) zawartość akumulatora A z zawartością pamięci o adresie określonym zawartością pary rejestrów HL, zwiększ zawartość pary rejestrów HL i zmniejsz zawartość pary rejestrów BC o jeden [A] - [[HL]] [HL] <--- [HL]+1 [BC] <--- [BC]-1 CPIR poszukaj w bloku pamięci o adresie określonym zawartością pary rejestrów HL i wielkości określonej zawartością pary rejestrów BC bajtu o wartości określonej zawartością akumulatora A powtarzaj aż do [A] = [[HL]] lub [BC]=0 [A] - [[HL]] [HL] <--- [HL]+1 [BC] <--- [BC]-1 CPD porównaj (ustawiając tylko wskaźniki) zawartość akumulatora A z zawartością pamięci o adresie określonym zawartością pary rejestrów HL, zmniejsz zawartość pary rejestrów HL i BC o jeden [A] - [[HL]] [HL] <--- [HL]-1 [BC] <--- [BC]-1 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -12/27- Zapis instrukcji CPDR Znaczenie poszukaj w bloku pamięci o adresie określonym zawartością pary rejestrów HL i wielkości określonej zawartością pary rejestrów BC bajtu o wartości określonej zawartością akumulatora A powtarzaj aż do [A] = [[HL]] lub [BC]=0 [A] - [[HL]] [HL] <--- [HL]-1 [BC] <--- [BC]-1 IV. grupa rozkazów arytmetycznych i logicznych na danych 8-bitowych Zapis instrukcji Znaczenie ADD reg dodaj do zawartości akumulatora A zawartość rejestru reg [A] <--- [A]+[reg] ADD data8 dodaj do zawartości akumulatora A wartość data8 [A] <--- [A]+data8 ADD (HL) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej adresowanej zawartością pary rejestrów HL [A] <--- [A]+[[HL]] ADD (IX+disp) ADD (IX-disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp [A] <--- [A]+[[IX]+disp] LUB [A] <--- [A]+[[IX]-disp] ADD (IY+disp) ADD (IY-disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp [A] <--- [A]+[[IY]+disp] LUB [A] <--- [A]+[[IY]-disp] ADC reg dodaj do zawartości akumulatora A zawartość rejestru reg z uwzględnieniem zawartości wskaźnika C [A] <--- [A]+[reg]+C ADC data8 dodaj do zawartości akumulatora A wartość data8 z uwzględnieniem zawartości wskaźnika C [A] <--- [A]+data8+C ADC (HL) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej adresowanej przez zawartość pary rejestrów HL z uwzględnieniem zawartości wskaźnika C [A] <--- [A]+[[HL]]+C ADC (IX+disp) ADC (IX-disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażeniem IX+disp lub IX-disp z uwzględnieniem zawartości wskaźnika C [A] <--- [A]+[[IX]+disp] lub [A] <--- [A]+[[IX]-disp] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -13/27- Zapis instrukcji Znaczenie ADC (IY+disp) ADC (IY-disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp z uwzględnieniem zawartości wskaźnika C [A] <--- [A]+[[IY]+disp] lub [A] <--- [A]+[[IY]-disp] SUB reg odejmij od zawartości akumulatora A zawartość rejestru reg [A] <--- [A]-[reg] SUB data8 odejmij od zawartości akumulatora A wartość data8 [A] <--- [A]-data8 SUB (HL) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej adresowanej zawartością pary rejestrów HL [A] <--- [A]-[[HL]] SUB (IX+disp) SUB (IX-disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp [A] <--- [A]-[[IX]+disp] lub [A] <--- [A]-[[IX]-disp] SUB (IY+disp) SUB (IY-disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp [A] <--- [A]-[[IY]+disp] lub [A] <--- [A]-[[IY]-disp] SBC reg odejmij od zawartości akumulatora A zawartość rejestru reg z uwzględnieniem zawartości wskaźnika C [A] <--- [A]-[reg]-C SBC data8 odejmij od zawartości akumulatora A wartość data8 z uwzględnieniem zawartości wskaźnika C [A] <--- [A]-data8-C SBC (HL) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej adresowanej przez zawartość pary rejestrów HL z uwzględnieniem zawartości wskaźnika C [A] <--- [A]-[[HL]]-C SBC (IX+disp) SBC (IX-disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp z uwzględnieniem zawartości wskaźnika C [A] <--- [A]-[[IX]+disp]-C lub [A] <--- [A]-[[IX]-disp]-C SBC (IY+disp) SBC (IY-disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp z uwzględnieniem zawartości wskaźnika C [A] <--- [A]-[[IY]+disp]-C lub [A] <--- [A]-[[IY]-disp]-C AND reg wykonaj iloczyn logiczny zawartości akumulatora A z zawartością rejestru reg [A] <--- [A] AND [reg] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -14/27- Zapis instrukcji Znaczenie AND data8 wykonaj iloczyn logiczny zawartości akumulatora A z wartością data8 [A] <--- [A] AND data8 AND (HL) wykonaj iloczyn logiczny zawartości akumulatora A z zawartością pamięci operacyjnej adresowanej zawartością pary rejestrów HL [A] <--- [A] AND [[HL]] AND (IX+disp) AND (IX-disp) wykonaj iloczyn logiczny zawartości akumulatora A z zawartością pamięci operacyjnej adresowanej wartością wyrażeniem IX+disp lub IX-disp [A] <--- [A] AND [[IX]+disp] lub [A] <--- [A] AND [[IX]-disp] AND (IY+disp) AND (IY-disp) wykonaj iloczyn logiczny zawartości akumulatora A z zawartością pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp [A] <--- [A] AND [[IY]+disp] lub [A] <--- [A] AND [[IY]-disp] OR reg wykonaj sumę logiczna zawartości akumulatora z zawartością rejestru reg [A] <--- [A] OR [reg] OR data8 wykonaj sumę logiczna zawartości akumulatora z wartością data8 [A] <--- [A] OR data8 OR (HL) wykonaj sumę logiczna zawartości akumulatora z zawartością pamięci operacyjnej adresowanej zawartością pary rejestrów HL [A] <--- [A] OR [[HL]] OR (IX+disp) OR (IX-disp) wykonaj sumę logiczna zawartości akumulatora z zawartością pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp [A] <--- [A] OR [[IX]+disp] lub [A] <--- [A] OR [[IX]+disp] OR (IY+disp) OR (IY-disp) wykonaj sumę logiczna zawartości akumulatora z zawartością pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp [A] <--- [A] OR [[IX]+disp] lub [A] <--- [A] OR [[IX]+disp] XOR reg wykonaj operacje EX-OR na zawartości akumulatora A i rejestru reg [A] <--- [A] XOR [reg] XOR data8 wykonaj operacje EX-OR na zawartości akumulatora A i wartości data8 [A] <--- [A] XOR data8 XOR (HL) wykonaj operacje EX-OR na zawartości akumulatora A i bajtu pamięci operacyjnej o adresie zawartym w HL [A] <--- [A] XOR [[HL]] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -15/27- Zapis instrukcji Znaczenie XOR (IX+disp) XOR (IX-disp) wykonaj operacje EX-OR na zawartości akumulatora A i bajtu pamięci operacyjnej o adresie określonym wartością wyrażenia IX+disp lub IX-disp [A] <--- [A] XOR [[IX]+disp] lub [A] <--- [A] XOR [[IX]+disp] XOR (IY+disp) XOR (IY-disp) wykonaj operacje EX-OR na zawartości akumulatora A i bajtu pamięci operacyjnej o adresie określonym wartością wyrażenia IY+disp lub IY-disp [A] <--- [A] XOR [[IY]+disp] lub [A] <--- [A] XOR [[IY]+disp] CP reg wykonaj porównanie (tylko ustawienie wskaźników) zawartości akumulatora A i rejestru reg [A] - [reg] CP data8 wykonaj porównanie (tylko ustawienie wskaźników) zawartości akumulatora A i wartości data8 [A] - data8 CP (HL) wykonaj porównanie (tylko ustawienie wskaźników) zawartości akumulatora A i bajtu pamięci o adresie zawartym w rejestrze HL [A] - [[HL]] CP (IX+disp) CP (IX-disp) wykonaj porównanie (tylko ustawienie wskaźników) zawartości akumulatora A i bajtu pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp [A] - [[IX]+disp] lub [A] - [[IX]-disp] CP (IY+disp) CP (IY-disp) wykonaj porównanie (tylko ustawienie wskaźników) zawartości akumulatora A i bajtu pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp [A] - [[IY]+disp] lub [A] - [[IY]-disp] INC reg zwiększ zawartość rejestru reg o jeden [reg] <--- [reg]+1 INC (HL) zwiększ zawartość bajtu pamięci zawartością pary rejestrów HL o jeden [[HL]] <--- [[HL]]+1 INC (IX+disp) INC (IX-disp) zwiększ zawartość bajtu pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp o jeden [[IX]+disp] <--- [[IX]+disp]+1 lub [[IX]-disp] <--- [[IX]-disp]+1 INC (IY+disp) INC (IY-disp) zwiększ zawartość bajtu pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp o jeden [[IX]+disp] <--- [[IX]+disp]+1 lub [[IX]-disp] <--- [[IX]-disp]+1 operacyjnej adresowanej Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -16/27- Zapis instrukcji Znaczenie DEC reg zmniejsz zawartość rejestru reg o jeden [reg] <--- [reg]-1 DEC (HL) zmniejsz zawartość bajtu pamięci zawartością pary rejestrów HL o jeden [[HL]] <--- [[HL]]-1 DEC (IX+disp) DEC (IX-disp) zmniejsz zawartość bajtu pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp o jeden [[IX]+disp] <--- [[IX]+disp]-1 lub [[IX]-disp] <--- [[IX]-disp]-1 DEC (IY+disp) DEC (IY-disp) zmniejsz zawartość bajtu pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp o jeden [[IX]+disp] <--- [[IX]+disp]-1 lub [[IX]-disp] <--- [[IX]-disp]-1 operacyjnej adresowanej V. grupa rozkazów kontrolnych jednostki arytmetyczno-logicznej oraz arytmetycznych ogólnego stosowania Zapis instrukcji Znaczenie DAA wykonaj korekcje dziesiętna zawartości akumulatora A CPL zaneguj (logicznie odwróć bity) zawartość akumulatora A NEG zaneguj (arytmetycznie) zawartość akumulatora A CCF zaneguj zawartość wskaźnika C SCF ustaw wskaźnik C NOP instrukcja pusta HALT zatrzymaj wykonywanie programu DI zabroń przyjmowanie niemaskowalnych przerwań zewnętrznych EI zezwol na przyjmowanie niemaskowalnych przerwań zewnętrznych IM 0 ustaw tryb przerwań zewnętrznych na 0 IM 1 ustaw tryb przerwań zewnętrznych na 1 IM 2 ustaw tryb przerwań zewnętrznych na 2 VI. grupa rozkazów arytmetycznych 16-bitowych Zapis instrukcji Znaczenie ADD HL,BC dodaj do zawartości pary rejestrów HL zawartość pary rejestrów BC [HL] <--- [HL]+[BC] ADD HL,DE dodaj do zawartości pary rejestrów HL zawartość pary rejestrów DE [HL] <--- [HL]+[DE] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -17/27- Zapis instrukcji Znaczenie ADD HL,HL dodaj do zawartości pary rejestrów HL zawartość pary rejestrów HL [HL] <--- [HL]+[HL] ADD HL,SP dodaj do zawartości pary rejestrów HL zawartość wskaźnika stosu SP [HL] <--- [HL]+[SP] ADC HL,BC dodaj do zawartości pary rejestrów HL zawartość pary rejestrów BC z uwzględnieniem przeniesienia C [HL] <--- [HL]+[BC]+C ADC HL,DE dodaj do zawartości pary rejestrów HL zawartość pary rejestrów DE z uwzględnieniem przeniesienia C [HL] <--- [HL]+[DE]+C ADC HL,HL dodaj do zawartości pary rejestrów HL zawartość pary rejestrów HL z uwzględnieniem przeniesienia C [HL] <--- [HL]+[HL]+C ADC HL,SP dodaj do zawartości pary rejestrów HL zawartość wskaźnika stosu SP z uwzględnieniem przeniesienia C [HL] <--- [HL]+[SP]+C SBC HL,BC odejmij od zawartości pary rejestrów HL zawartość pary rejestrów BC z uwzględnieniem zawartości wskaźnika C [HL] <--- [HL]-[BC]-C SBC HL,DE odejmij od zawartości pary rejestrów HL zawartość pary rejestrów DE z uwzględnieniem zawartości wskaźnika C [HL] <--- [HL]-[DE]-C SBC HL,HL odejmij od zawartości pary rejestrów HL zawartość pary rejestrów HL z uwzględnieniem zawartości wskaźnika C [HL] <--- [HL]-[HL]-C SBC HL,SP odejmij od zawartości pary rejestrów HL zawartość wskaźnika stosu SP z uwzględnieniem zawartości wskaźnika C [HL] <--- [HL]-[SP]-C ADD IX,BC dodaj do zawartości rejestru IX zawartość pary rejestrów BC [IX] <--- [IX]-[BC] ADD IX,DE dodaj do zawartości rejestru IX zawartość pary rejestrów DE [IX] <--- [IX]-[DE] ADD IX,IX dodaj do zawartości rejestru IX zawartość rejestru IX [IX] <--- [IX]-[IX] ADD IX,SP dodaj do zawartości rejestru IX zawartość wskaźnika stosu SP [IX] <--- [IX]-[SP] ADD IY,BC dodaj do zawartości rejestru IY zawartość pary rejestrów BC [IY] <--- [IY]-[BC] ADD IY,DE dodaj do zawartości rejestru IY zawartość pary rejestrów DE [IY] <--- [IY]-[DE] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -18/27- Zapis instrukcji Znaczenie ADD IY,IY dodaj do zawartości rejestru IY zawartość rejestru IY [IY] <--- [IY]-[IY] ADD IY,SP dodaj do zawartości rejestru IY zawartość wskaźnika stosu SP [IY] <--- [IY]-[SP] INC BC zwiększ zawartość pary rejestrów BC o jeden [BC] <--- [BC]+1 INC DE zwiększ zawartość pary rejestrów DE o jeden [DE] <--- [DE]+1 INC HL zwiększ zawartość pary rejestrów HL o jeden [HL] <--- [HL]+1 INC SP zwiększ zawartość wskaźnika stosu SP o jeden [SP] <--- [SP]+1 INC IX zwiększ zawartość rejestru IX o jeden [IX] <--- [IX]+1 INC IY zwiększ zawartość rejestru IY o jeden [IY] <--- [IY]+1 DEC BC zmniejsz zawartość pary rejestrów BC o jeden [BC] <--- [BC]-1 DEC DE zmniejsz zawartość pary rejestrów DE o jeden [DE] <--- [DE]-1 DEC HL zmniejsz zawartość pary rejestrów HL o jeden [HL] <--- [HL]-1 DEC SP zmniejsz zawartość wskaźnika stosu SP o jeden [SP] <--- [SP]-1 DEC IX zmniejsz zawartość rejestru IX o jeden [IX] <--- [IX]-1 DEC IY zmniejsz zawartość rejestru IY o jeden [IY] <--- [IY]-1 VII. grupa rozkazów przesunięć Zapis instrukcji RLCA Znaczenie przesuń zawartość akumulatora A w lewo ┌─────────────────────────────┐ ┌───┐ │ ┌───────────────────────┐ │ │ C │<──┴──┤ │<─┘ └───┘ └───────────────────────┘ [A] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -19/27- Zapis instrukcji Znaczenie RLA przesuń zawartość akumulatora A w lewo ┌──────────────────────────────────────┐ │┌───┐ ┌───────────────────────┐ │ └┤ C │<─────┤ │<─┘ └───┘ └───────────────────────┘ [A] RRCA przesuń zawartość akumulatora A w prawo ┌────────────────────────────┐ │ ┌───────────────────────┐ │ ┌───┐ └>│ ├──┴─>│ C │ └───────────────────────┘ └───┘ [A] RRA przesuń zawartość akumulatora A w prawo ┌─────────────────────────────────────┐ │ ┌───────────────────────┐ ┌───┐ │ └>│ ├────>│ C ├─┘ └───────────────────────┘ └───┘ [A] RLC reg przesuń zawartość rejestru reg w lewo ┌─────────────────────────────┐ ┌───┐ │ ┌───────────────────────┐ │ │ C │<──┴──┤ │<─┘ └───┘ └───────────────────────┘ [reg] RLC (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w lewo ┌─────────────────────────────┐ ┌───┐ │ ┌───────────────────────┐ │ │ C │<──┴──┤ │<─┘ └───┘ └───────────────────────┘ [[HL]] RLC (IX+disp) RLC (IX-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp w lewo ┌─────────────────────────────┐ ┌───┐ │ ┌───────────────────────┐ │ │ C │<──┴──┤ │<─┘ └───┘ └───────────────────────┘ [[IX]+disp] lub [[IX]-disp] RLC (IY+disp) RLC (IY-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w lewo ┌─────────────────────────────┐ ┌───┐ │ ┌───────────────────────┐ │ │ C │<──┴──┤ │<─┘ └───┘ └───────────────────────┘ [[IY]+disp] lub [[IY]-disp] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -20/27- Zapis instrukcji Znaczenie RL reg przesuń zawartość rejestru reg w lewo ┌──────────────────────────────────────┐ │┌───┐ ┌───────────────────────┐ │ └┤ C │<─────┤ │<─┘ └───┘ └───────────────────────┘ [reg] RL (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w lewo ┌──────────────────────────────────────┐ │┌───┐ ┌───────────────────────┐ │ └┤ C │<─────┤ │<─┘ └───┘ └───────────────────────┘ [[HL]] RL (IX+disp) RL (IX-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp w lewo ┌──────────────────────────────────────┐ │┌───┐ ┌───────────────────────┐ │ └┤ C │<─────┤ │<─┘ └───┘ └───────────────────────┘ [[IX]+disp] lub [[IX]-disp] RL (IY+disp) RL (IY-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w lewo ┌──────────────────────────────────────┐ │┌───┐ ┌───────────────────────┐ │ └┤ C │<─────┤ │<─┘ └───┘ └───────────────────────┘ [[IY]+disp] lub [[IY]-disp] RRC reg przesuń zawartość rejestru reg w prawo ┌────────────────────────────┐ │ ┌───────────────────────┐ │ ┌───┐ └>│ ├──┴─>│ C │ └───────────────────────┘ └───┘ [reg] RRC (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w prawo ┌────────────────────────────┐ │ ┌───────────────────────┐ │ ┌───┐ └>│ ├──┴─>│ C │ └───────────────────────┘ └───┘ [[HL]] RRC (IX+disp) RRC (IX-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp ub IX-disp w prawo ┌────────────────────────────┐ │ ┌───────────────────────┐ │ ┌───┐ └>│ ├──┴─>│ C │ └───────────────────────┘ └───┘ [[IX]+disp] lub [[IX]-disp] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -21/27- Zapis instrukcji Znaczenie RRC (IY+disp) RRC (IY-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w prawo ┌────────────────────────────┐ │ ┌───────────────────────┐ │ ┌───┐ └>│ ├──┴─>│ C │ └───────────────────────┘ └───┘ [[IY]+disp] lub [[IY]-disp] RR reg przesuń zawartość rejestru reg w prawo ┌─────────────────────────────────────┐ │ ┌───────────────────────┐ ┌───┐ │ └>│ ├────>│ C ├─┘ └───────────────────────┘ └───┘ [reg] RR (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w prawo ┌─────────────────────────────────────┐ │ ┌───────────────────────┐ ┌───┐ │ └>│ ├────>│ C ├─┘ └───────────────────────┘ └───┘ [[HL]] RR (IX+disp) RR (IX-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp w prawo ┌─────────────────────────────────────┐ │ ┌───────────────────────┐ ┌───┐ │ └>│ ├────>│ C ├─┘ └───────────────────────┘ └───┘ [[IX]+disp] lub [[IX]-disp] RR (IY+disp) RR (IY-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w prawo ┌─────────────────────────────────────┐ │ ┌───────────────────────┐ ┌───┐ │ └>│ ├────>│ C ├─┘ └───────────────────────┘ └───┘ [[IY]+disp] lub [[IY]-disp] SLA reg przesuń zawartość rejestru reg w lewo ┌───┐ ┌───────────────────────┐ │ C │<─────┤ │<── 0 └───┘ └───────────────────────┘ [reg] SLA (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w lewo ┌───┐ ┌───────────────────────┐ │ C │<─────┤ │<── 0 └───┘ └───────────────────────┘ [[HL]] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -22/27- Zapis instrukcji Znaczenie SLA (IX+disp) SLA (IX-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp w lewo ┌───┐ ┌───────────────────────┐ │ C │<─────┤ │<── 0 └───┘ └───────────────────────┘ [[IX]+disp] lub [[IX]-disp] SLA (IY+disp) SLA (IY-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w lewo ┌───┐ ┌───────────────────────┐ │ C │<─────┤ │<── 0 └───┘ └───────────────────────┘ [[IY]+disp] lub [[IY]-disp] SRA reg przesuń arytmetycznie zawartość rejestru reg w prawo ┌───────────────────────┐ ┌───┐ ┌──┤ ├──>│ C │ │ └─┬─────────────────────┘ └───┘ └────┘ [reg] SRA (HL) przesuń arytmetycznie zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w prawo ┌───────────────────────┐ ┌───┐ ┌──┤ ├──>│ C │ │ └─┬─────────────────────┘ └───┘ └────┘ [[HL]] SRA (IX+disp) SRA (IX-disp) przesuń arytmetycznie zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp w prawo ┌───────────────────────┐ ┌───┐ ┌──┤ ├──>│ C │ │ └─┬─────────────────────┘ └───┘ └────┘ [[IX]+disp] lub [[IX]-disp] SRA (IY+disp) SRA (IY-disp) przesuń arytmetycznie zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w prawo ┌───────────────────────┐ ┌───┐ ┌──┤ ├──>│ C │ │ └─┬─────────────────────┘ └───┘ └────┘ [[IY]+disp] lub [[IY]-disp] SRL reg przesuń zawartość rejestru reg w prawo ┌───────────────────────┐ ┌───┐ 0─>│ ├──>│ C │ └───────────────────────┘ └───┘ [reg] SRL (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością pary rejestrów HL w prawo ┌───────────────────────┐ ┌───┐ 0─>│ ├──>│ C │ └───────────────────────┘ └───┘ [[HL]] Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -23/27- Zapis instrukcji Znaczenie SRL (IX+disp) SRL (IX-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IX+disp lub IX-disp w prawo ┌───────────────────────┐ ┌───┐ 0─>│ ├──>│ C │ └───────────────────────┘ └───┘ [[IX]+disp] lub [[IX]-disp] SRL (IY+disp) SRL (IY-disp) przesuń zawartość komórki pamięci o adresie określonym wartością wyrażenia IY+disp lub IY-disp w prawo ┌───────────────────────┐ ┌───┐ 0─>│ ├──>│ C │ └───────────────────────┘ └───┘ [[IY]+disp] [[IY]-disp] RLD przesuń cyfrę BCD w lewo RRD przesuń cyfrę BCD w prawo VIII. grupa rozkazów ustawiających, zerujących i testujących bity Zapis instrukcji Znaczenie BIT b,reg testuj stan bitu b w rejestrze reg BIT b,(HL) testuj stan bitu b bajtu w pamięci operacyjnej adresowanej zawartością pary rejestrów HL BIT b,(IX+disp) BIT b,(IX-disp) testuj stan bitu b bajtu w pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp BIT b,(IY+disp) BIT b,(IY-disp) testuj stan bitu b bajtu w pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp SET b,reg ustaw bit b w rejestrze reg SET b,(HL) ustaw bit b w bajcie pamięci operacyjnej adresowanej zawartością pary rejestrów HL SET b,(IX+disp) SET b,(IX-disp) ustaw bit b w bajcie pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp SET b,(IY+disp) SET b,(IY-disp) ustaw bit b w bajcie pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp RES b,reg zeruj bit b w rejestrze reg RES b,(HL) zeruj bit b w bajcie pamięci operacyjnej adresowanej zawartością pary rejestrów HL RES b,(IX+disp) RES b,(IX-disp) zeruj bit b w bajcie pamięci operacyjnej adresowanej wartością wyrażenia IX+disp lub IX-disp RES b,(IY+disp) RES b,(IY-disp) zeruj bit b w bajcie pamięci operacyjnej adresowanej wartością wyrażenia IY+disp lub IY-disp IX. grupa rozkazów skoków Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -24/27- Zapis instrukcji Znaczenie JP adr16 wykonaj bezwarunkowy skok bezwzględny do adresu adr16 JP NZ,adr16 wykonaj warunkowy skok do adresu adr16 JP Z,adr16 wykonaj warunkowy skok do adresu adr16 JP NC,adr16 wykonaj warunkowy skok do adresu adr16 JP C,adr16 wykonaj warunkowy skok do adresu adr16 JP PO,adr16 wykonaj warunkowy skok do adresu adr16 JP PE,adr16 wykonaj warunkowy skok do adresu adr16 JP P,adr16 wykonaj warunkowy skok do adresu adr16 JP M,adr16 Wykonaj warunkowy skok do adresu adr16 JR ee wykonaj bezwarunkowy skok względny o ee JR C,ee wykonaj warunkowy skok względny o ee JR NC,ee wykonaj warunkowy skok względny o ee JR Z,ee wykonaj warunkowy skok względny o ee JR NZ,ee wykonaj warunkowy skok względny o ee DJNZ ee zmniejsz zawartość rejestru B o jeden i wykonaj warunkowy skok względny o ee JP (HL) wykonaj skok bezwarunkowy do adresu określonego zawartością pary rejestrów HL JP (IX) wykonaj skok bezwarunkowy do adresu określonego zawartością rejestru IX JP (IY) wykonaj skok bezwarunkowy do adresu określonego zawartością rejestru IY X. grupa rozkazów wywołania i powrotu z podprogramu Zapis instrukcji Znaczenie CALL adr16 wywołaj bezwarunkowo podprogram o adresie adr16 CALL NZ,adr16 wywołaj warunkowo podprogram o adresie adr16 CALL Z,adr16 wywołaj warunkowo podprogram o adresie adr16 CALL NC,adr16 wywołaj warunkowo podprogram o adresie adr16 CALL C,adr16 wywołaj warunkowo podprogram o adresie adr16 CALL PO,adr16 wywołaj warunkowo podprogram o adresie adr16 CALL PE,adr16 wywołaj warunkowo podprogram o adresie adr16 CALL P,adr16 wywołaj warunkowo podprogram o adresie adr16 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -25/27- Zapis instrukcji Znaczenie CALL M,adr16 wywołaj warunkowo podprogram o adresie adr16 RET wróć bezwarunkowo z podprogramu RET NZ wróć warunkowo z podprogramu RET Z wróć warunkowo z podprogramu RET NC wróć warunkowo z podprogramu RET C wróć warunkowo z podprogramu RET PO wróć warunkowo z podprogramu RET PE wróć warunkowo z podprogramu RET P wróć warunkowo z podprogramu RET M wróć warunkowo z podprogramu RETI wróć z procedury obsługi przerwania maskowalnego RETN wróć z procedury obsługi przerwania niemaskowalnego RST Q wykonaj restart z punktem wejścia Q XI. grupa rozkazów wejścia-wyjścia Zapis instrukcji Znaczenie IN A,(port) wczytaj bajt z portu o adresie port do akumulatora [A] <--- [port] IN reg,(C) wczytaj bajt z portu o adresie zawartym w rejestrze C do rejestru reg [reg] <--- [[C]] INI wczytaj bajt z portu o adresie zawartym w rejestrze C do bufora określonego zawartością pary rejestrów HL [[HL]] <--- [[C]] [B] <--- [B]-1 [HL] <--- [HL]+1 INIR wczytaj blok danych z portu o adresie zawartym w rejestrze C do bufora określonego zawartością pary rejestrów HL powtarzaj aż do [B] = 0 [[HL]] <--- [[C]] [B] <--- [B]-1 [HL] <--- [HL]+1 IND wczytaj bajt z portu o adresie zawartym w rejestrze C do bufora określonego zawartością pary rejestrów HL [[HL]] <--- [[C]] [B] <--- [B]-1 [HL] <--- [HL]-1 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -26/27- Zapis instrukcji Znaczenie INDR wczytaj blok danych z portu o adresie zawartym w rejestrze C do bufora określonego zawartością pary rejestrów HL powtarzaj aż do [B] = 0 [[HL]] <--- [[C]] [B] <--- [B]-1 [HL] <--- [HL]-1 OUT (port),A wyślij zawartość akumulatora A do portu o adresie port [port] <--- [A] OUT (C),reg wyślij zawartość rejestru reg do portu o adresie zawartym w rejestrze C OUTI wyślij bajt z pamięci o adresie zawartym parze rejestrów HL do portu o adresie zawartym w rejestrze C [[C]] <--- [[HL]] [B] <--- [B]-1 [HL] <--- [HL]+1 OTIR wyślij blok z pamięci o adresie zawartym parze rejestrów HL do portu o adresie zawartym w rejestrze C powtarzaj aż do [B] = 0 [[C]] <--- [[HL]] [B] <--- [B]-1 [HL] <--- [HL]+1 OUTD wyślij bajt z pamięci o adresie zawartym parze rejestrów HL do portu o adresie zawartym w rejestrze C [[C]] <--- [[HL]] [B] <--- [B]-1 [HL] <--- [HL]-1 OTDR wyślij blok z pamięci o adresie zawartym parze rejestrów HL do portu o adresie zawartym w rejestrze C powtarzaj aż do [B] = 0 [[C]] <--- [[HL]] [B] <--- [B]-1 [HL] <--- [HL]-1 Po bliższe i bardziej szczegółowe informacje dotyczące listy instrukcji należy sięgnąć do “Z80 Family: CPU User Manual”. Znana mi literatura w języku polskim dotycząca procesora to: 1. Praca zbiorowa, “Modułowe systemy mikroprocesorowe”, Wydawnictwa Naukowo-Techniczne, Warszawa 1984 2. Jerzy Karczmarczuk, “Mikroprocesor Z80”, Wydawnictwa NaukowoTechniczne, Warszawa 1987 Elportal “Elektroniki dla wszystkich” - Gaweł: “Architektura mikroprocesorów Z80” -27/27-