Architektura mikroprocesorów Z80
zagadnienia oprogramowania
Białystok, styczeń 2015
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -2/29-
Copyright (C) 2015, Andrzej Pawluczuk. email: apawluczuk@vp.pl
Wszystkie prawa zastrzeżone.
Redystrybucja i używanie, czy to w formie tekstu zródłowego, czy w formie kodu
wykonywalnego, są dozwolone pod warunkiem spełnienia poniższych warunków:
1. Redystrybucja tekstu zródłowego musi zawierać powyższe zastrzeżenie
własności praw autorskich, niniejszą listę warunków oraz poniższe oświadczenie
o wyłączeniu odpowiedzialności.
2. Redystrybucja kodu wykonywalnego musi zawierać w dokumentacji lub w
innych materiałach dostarczanych wraz z kopią oprogramowania powyższe
zastrzeżenie własności praw autorskich, niniejszą listę warunków oraz poniższe
oświadczenie o wyłączeniu odpowiedzialności.
3. Nazwisko autora nie może być użyte celem sygnowania lub promowania
produktów pochodzących od tego opracowania, bez szczególnego, wyrażonego
na piśmie zezwolenia.
To opracowanie jest dostarczone przez posiadacza praw autorskich takim, jakie jest .
Każda, dorozumiana lub bezpośrednio wyrażona gwarancja, nie wyłączając dorozumianej
gwarancji przydatności handlowej i przydatności do określonego zastosowania, jest
wyłączona. W żadnym wypadku posiadacz praw autorskich nie może być odpowiedzialny
za jakiekolwiek bezpośrednie, pośrednie, incydentalne, specjalne, uboczne i wtórne
szkody (nie wyłączając obowiązku dostarczenia produktu zastępczego lub serwisu,
odpowiedzialności z tytułu utraty walorów użytkowych, utraty danych lub korzyści, a
także przerw w pracy przedsiębiorstwa) spowodowane w jakikolwiek sposób i na
podstawie istniejącej w torii odpowiedzialności kontraktowej, całkowitej lub deliktowej
(wynikłej zarówno z niedbalstwa, jak i innych postaci winy), powstałe w jakikolwiek
sposób w wyniku używania lub mające związek z używaniem oprogramowania, nawet
jeśli o możliwości powstania takich szkód ostrzeżono.
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -3/29-
ręcz kultowy mikroprocesor Z80 jest mikroprocesorem 8-bitowym
zbudowanym w oparciu o architekturę Von Neumanna. Główną cechą
W
charakterystyczną procesorów w architekturze Von Neumanna jest
wspólna pamięć danych i kodu programu. Aatwo z tego wysnuć wniosek, że
wczytanie kodu programu z dowolnego zró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ózniejszą 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.
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -4/29-
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 wskaznikó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 wskaznikó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 wskaznika stosu SP,
16-bitowy rejestr licznika rozkazów PC (ten rejestr jest rejestrem ukrytym i
niedostępnym do używania w programie).
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -5/29-
Rys. 1: Zestaw rejestrów mikroprocesora Z80
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 16-
bitowe. 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
zródłowego, do rejestru DE adresu miejsca docelowego, do rejestru BC wielkości
bloku.
LD HL,
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -6/29-
LD DE,
LD BC,1000
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,
LD DE,+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 . 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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -7/29-
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
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
wskaznika 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 16-
bitowego rejestru akumulatora A i rejestru wskaznikó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 zró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.
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -8/29-
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) prześlij zawartość bajtu adresowanego przez wartość wyrażenia
LD reg,(IX-disp) IX+disp lub IX-disp do rejestru reg
[reg] <--- [[IX]+disp] lub
[reg] <--- [[IX]-disp]
LD reg,(IY+disp) prześlij zawartość bajtu adresowanego przez wartość wyrażenia
LD reg,(IY-disp) 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 prześlij zawartość rejestru reg do pamięci pod adres określony przez
LD (IX-disp),reg wartość wyrażenia IX+disp lub IX-disp
[[IX]+disp] <--- [reg] lub
[[IX]-disp] <--- [reg]
LD (IY+disp),reg prześlij zawartość rejestru reg do pamięci pod adres określony przez
LD (IY-disp),reg 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 wpisz wartość data8 do pamięci operacyjnej pod adres określony
LD (IX-disp),data8 wartością wyrażenia IX+disp lub IX-disp
[[IX]+disp] <--- data8 lub
[[IX]-disp] <--- data8
LD (IY+disp),data8 wpisz wartość data8 do pamięci operacyjnej pod adres określony
LD (IY-disp),data8 wartością wyrażenia IY+disp lub IY-disp
[[IY]+disp] <-- data8 lub
[[IY]-disp] <-- data8
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -9/29-
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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -10/29-
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]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -11/29-
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 wskaznikó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 wskazników F
[F] <--- [[SP]]
[A] <--- [[SP]+1]
[SP] <--- [SP]+2
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -12/29-
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 rozkazów wymiany danych, transmisji grupowych oraz
wyszukiwania
Zapis instrukcji 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 wskazników F z alternatywnym
akumulatorem A' i wskaznikami 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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -13/29-
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 wskazniki) 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 wskazniki) 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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -14/29-
Zapis instrukcji Znaczenie
CPDR 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) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej
ADD (IX-disp) adresowanej wartością wyrażenia IX+disp lub IX-disp
[A] <--- [A]+[[IX]+disp] LUB
[A] <--- [A]+[[IX]-disp]
ADD (IY+disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej
ADD (IY-disp) 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 wskaznika C
[A] <--- [A]+[reg]+C
ADC data8 dodaj do zawartości akumulatora A wartość data8 z uwzględnieniem
zawartości wskaznika 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 wskaznika C
[A] <--- [A]+[[HL]]+C
ADC (IX+disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej
ADC (IX-disp) adresowanej wartością wyrażeniem IX+disp lub IX-disp z
uwzględnieniem zawartości wskaznika C
[A] <--- [A]+[[IX]+disp] lub
[A] <--- [A]+[[IX]-disp]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -15/29-
Zapis instrukcji Znaczenie
ADC (IY+disp) dodaj do zawartości akumulatora A zawartość pamięci operacyjnej
ADC (IY-disp) adresowanej wartością wyrażenia IY+disp lub IY-disp z
uwzględnieniem zawartości wskaznika 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) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej
SUB (IX-disp) adresowanej wartością wyrażenia IX+disp lub IX-disp
[A] <--- [A]-[[IX]+disp] lub
[A] <--- [A]-[[IX]-disp]
SUB (IY+disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej
SUB (IY-disp) 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 wskaznika C
[A] <--- [A]-[reg]-C
SBC data8 odejmij od zawartości akumulatora A wartość data8 z uwzględnieniem
zawartości wskaznika 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 wskaznika C
[A] <--- [A]-[[HL]]-C
SBC (IX+disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej
SBC (IX-disp) adresowanej wartością wyrażenia IX+disp lub IX-disp z
uwzględnieniem zawartości wskaznika C
[A] <--- [A]-[[IX]+disp]-C lub
[A] <--- [A]-[[IX]-disp]-C
SBC (IY+disp) odejmij od zawartości akumulatora A zawartość pamięci operacyjnej
SBC (IY-disp) adresowanej wartością wyrażenia IY+disp lub IY-disp z
uwzględnieniem zawartości wskaznika 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]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -16/29-
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) wykonaj iloczyn logiczny zawartości akumulatora A z zawartością
AND (IX-disp) 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) wykonaj iloczyn logiczny zawartości akumulatora A z zawartością
AND (IY-disp) 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) wykonaj sumę logiczna zawartości akumulatora z zawartością
OR (IX-disp) 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) wykonaj sumę logiczna zawartości akumulatora z zawartością
OR (IY-disp) 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]]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -17/29-
Zapis instrukcji Znaczenie
XOR (IX+disp) wykonaj operacje EX-OR na zawartości akumulatora A i bajtu
XOR (IX-disp) 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) wykonaj operacje EX-OR na zawartości akumulatora A i bajtu
XOR (IY-disp) 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 wskazników) zawartości
akumulatora A i rejestru reg
[A] - [reg]
CP data8 wykonaj porównanie (tylko ustawienie wskazników) zawartości
akumulatora A i wartości data8
[A] - data8
CP (HL) wykonaj porównanie (tylko ustawienie wskazników) zawartości
akumulatora A i bajtu pamięci o adresie zawartym w rejestrze HL
[A] - [[HL]]
CP (IX+disp) wykonaj porównanie (tylko ustawienie wskazników) zawartości
CP (IX-disp) 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) wykonaj porównanie (tylko ustawienie wskazników) zawartości
CP (IY-disp) 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 operacyjnej adresowanej
zawartością pary rejestrów HL o jeden
[[HL]] <--- [[HL]]+1
INC (IX+disp)
zwiększ zawartość bajtu pamięci operacyjnej adresowanej wartością
INC (IX-disp) wyrażenia IX+disp lub IX-disp o jeden
[[IX]+disp] <--- [[IX]+disp]+1 lub
[[IX]-disp] <--- [[IX]-disp]+1
INC (IY+disp) zwiększ zawartość bajtu pamięci operacyjnej adresowanej wartością
INC (IY-disp) wyrażenia IY+disp lub IY-disp o jeden
[[IX]+disp] <--- [[IX]+disp]+1 lub
[[IX]-disp] <--- [[IX]-disp]+1
DEC reg zmniejsz zawartość rejestru reg o jeden
[reg] <--- [reg]-1
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -18/29-
Zapis instrukcji Znaczenie
DEC (HL) zmniejsz zawartość bajtu pamięci operacyjnej adresowanej
zawartością pary rejestrów HL o jeden
[[HL]] <--- [[HL]]-1
DEC (IX+disp) zmniejsz zawartość bajtu pamięci operacyjnej adresowanej wartością
DEC (IX-disp) wyrażenia IX+disp lub IX-disp o jeden
[[IX]+disp] <--- [[IX]+disp]-1 lub
[[IX]-disp] <--- [[IX]-disp]-1
DEC (IY+disp)
zmniejsz zawartość bajtu pamięci operacyjnej adresowanej wartością
DEC (IY-disp) wyrażenia IY+disp lub IY-disp o jeden
[[IX]+disp] <--- [[IX]+disp]-1 lub
[[IX]-disp] <--- [[IX]-disp]-1
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ść wskaznika C
SCF ustaw wskaznik 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]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -19/29-
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ść wskaznika 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ść wskaznika 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 wskaznika 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 wskaznika 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 wskaznika C
[HL] <--- [HL]-[HL]-C
SBC HL,SP odejmij od zawartości pary rejestrów HL zawartość wskaznika stosu
SP z uwzględnieniem zawartości wskaznika 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ść wskaznika 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]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -20/29-
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ść wskaznika 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ść wskaznika 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ść wskaznika 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 Znaczenie
RLCA przesuń zawartość akumulatora A w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%% %
% C %<%%4%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[A]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -21/29-
Zapis instrukcji Znaczenie
RLA przesuń zawartość akumulatora A w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% %
%$% C %<%%%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[A]
RRCA przesuń zawartość akumulatora A w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%
%>% %%%4%%>% C %
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[A]
RRA przesuń zawartość akumulatora A w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% %%%%% %
%>% %%%%%>% C %%%
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[A]
RLC reg przesuń zawartość rejestru reg w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%% %
% C %<%%4%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[reg]
RLC (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością
pary rejestrów HL w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%% %
% C %<%%4%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[[HL]]
RLC (IX+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
RLC (IX-disp) wyrażenia IX+disp lub IX-disp w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%% %
% C %<%%4%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[[IX]+disp] lub [[IX]-disp]
RLC (IY+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
RLC (IY-disp) wyrażenia IY+disp lub IY-disp w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%% % %%%%%%%%%%%%%%%%%%%%%%%%% %
% C %<%%4%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[[IY]+disp] lub [[IY]-disp]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -22/29-
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) przesuń zawartość komórki pamięci o adresie określonym wartością
RL (IX-disp) wyrażenia IX+disp lub IX-disp w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% %
%$% C %<%%%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[[IX]+disp] lub [[IX]-disp]
RL (IY+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
RL (IY-disp) wyrażenia IY+disp lub IY-disp w lewo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%% %
%$% C %<%%%%%$% %<%%
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[[IY]+disp] lub [[IY]-disp]
RRC reg przesuń zawartość rejestru reg w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%
%>% %%%4%%>% C %
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[reg]
RRC (HL) przesuń zawartość komórki pamięci o adresie określonym zawartością
pary rejestrów HL w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%
%>% %%%4%%>% C %
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[[HL]]
RRC (IX+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
RRC (IX-disp) wyrażenia IX+disp ub IX-disp w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%
%>% %%%4%%>% C %
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[[IX]+disp] lub [[IX]-disp]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -23/29-
Zapis instrukcji Znaczenie
RRC (IY+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
RRC (IY-disp) wyrażenia IY+disp lub IY-disp w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% % %%%%%
%>% %%%4%%>% 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) przesuń zawartość komórki pamięci o adresie określonym wartością
RR (IX-disp) wyrażenia IX+disp lub IX-disp w prawo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %%%%%%%%%%%%%%%%%%%%%%%%% %%%%% %
%>% %%%%%>% C %%%
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[[IX]+disp] lub [[IX]-disp]
RR (IY+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
RR (IY-disp) 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]]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -24/29-
Zapis instrukcji Znaczenie
SLA (IX+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
SLA (IX-disp) wyrażenia IX+disp lub IX-disp w lewo
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
% C %<%%%%%$% %<%% 0
%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%
[[IX]+disp] lub [[IX]-disp]
SLA (IY+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
SLA (IY-disp) 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) przesuń arytmetycznie zawartość komórki pamięci o adresie
SRA (IX-disp) określonym wartością wyrażenia IX+disp lub IX-disp w prawo
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
%%%$% %%%>% C %
% %%,%%%%%%%%%%%%%%%%%%%%%%% %%%%%
%%%%%% [[IX]+disp] lub [[IX]-disp]
SRA (IY+disp) przesuń arytmetycznie zawartość komórki pamięci o adresie
SRA (IY-disp) 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]]
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -25/29-
Zapis instrukcji Znaczenie
SRL (IX+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
SRL (IX-disp) wyrażenia IX+disp lub IX-disp w prawo
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
0%>% %%%>% C %
%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%
[[IX]+disp] lub [[IX]-disp]
SRL (IY+disp) przesuń zawartość komórki pamięci o adresie określonym wartością
SRL (IY-disp) 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) testuj stan bitu b bajtu w pamięci operacyjnej adresowanej wartością
BIT b,(IX-disp) wyrażenia IX+disp lub IX-disp
BIT b,(IY+disp) testuj stan bitu b bajtu w pamięci operacyjnej adresowanej wartością
BIT b,(IY-disp) 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) ustaw bit b w bajcie pamięci operacyjnej adresowanej wartością
SET b,(IX-disp) wyrażenia IX+disp lub IX-disp
SET b,(IY+disp) ustaw bit b w bajcie pamięci operacyjnej adresowanej wartością
SET b,(IY-disp) 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) zeruj bit b w bajcie pamięci operacyjnej adresowanej wartością
RES b,(IX-disp) wyrażenia IX+disp lub IX-disp
RES b,(IY+disp) zeruj bit b w bajcie pamięci operacyjnej adresowanej wartością
RES b,(IY-disp) wyrażenia IY+disp lub IY-disp
IX. grupa rozkazów skoków
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -26/29-
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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -27/29-
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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -28/29-
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
Andrzej Pawluczuk: Architektura mikroprocesorów Z80 - zagadnienia oprogramowania -29/29-
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 Naukowo-Techniczne, Warszawa
1987
3.
Konrad Fedyna, Marek Mizeracki Układy
mikroprocesorowe Z80 , Wydawnictwa
Komunikacji i Aączności, Warszawa 1989
Wyszukiwarka
Podobne podstrony:
Barbara Bylina Historia pewnego zdjęcia soft akt
Z80
Taco Bell« Soft Taco
det soft
Z80 przyklady
soft
info Soft z sat dla Nboxa
Bmw Scanner Pa Soft Sk
Z80 2dChars
mFAQ 2 13 Instalacja polskiej wersji językowej oprogramowania LOGO! Soft Comfort
z80
Z80 Options
Z80 Opcodes
Z80 2dDependent
z80 1
więcej podobnych podstron