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-