|
Serwis Edukacyjny nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Tłumaczenie: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
Ten rozdział opisuje każdą z instrukcji mikroprocesora Z80, udostępniając dla nich tablicowe listingi kodów operacyjnych. W każdej z tych tablic kody operacyjne umieszczone w cieniowanych komórkach są identyczne z kodami dla mikroprocesora 8080A. Również dla każdej instrukcji podano mnemonik asemblerowy. Wszystkie kody operacyjne są podane w zapisie szesnastkowym. Kody jednobajtowe wymagają dwóch cyfr szesnastkowych, natomiast kody dwubajtowe wymagają czterech cyfr. Dla wygody tablica 4 przedstawia konwersję pomiędzy systemem szesnastkowym i dwójkowym.
| Hex | Bin | Dec |
| 0 | 0000 | 0 |
| 1 | 0001 | 1 |
| 2 | 0010 | 2 |
| 3 | 0011 | 3 |
| 4 | 0100 | 4 |
| 5 | 0101 | 5 |
| 6 | 0110 | 6 |
| 7 | 0111 | 7 |
| 8 | 1000 | 8 |
| 9 | 1001 | 9 |
| A | 1010 | 10 |
| B | 1011 | 11 |
| C | 1100 | 12 |
| D | 1101 | 13 |
| E | 1110 | 14 |
| F | 1111 | 15 |
Mnemoniki instrukcji mikroprocesora Z80 składają się z kodu operacyjnego oraz od zera do dwóch argumentów. Tam, gdzie argument jest implikowany, za kodem instrukcji nie jest umieszczany żaden argument. Instrukcje, zawierające tylko jeden argument logiczny, gdzie jeden z argumentów jest niezmienny (np. w instrukcji logicznego OR), są reprezentowane przez jeden mnemonik argumentu. Instrukcje, zawierające dwa zmienne argumenty, są reprezentowane przez dwa mnemoniki argumentów.
Tablica 5 definiuje kody operacyjne dla wszystkich 8 bitowych instrukcji
przesłań, zaimplementowanych w mikroprocesorze Z80. W tablicy tej również
opisany jest rodzaj adresowania dla każdej instrukcji. Źródło danych znajduje
się w górnym wierszu, a miejsce docelowe jest określone w lewej kolumnie. Na przykład, przesłanie rejestru B do rejestru C używa kodu operacyjnego
48H. Na wszystkich pozycjach kody operacyjne są podane w systemie
szesnastkowym , a kod 48H (dwójkowo 01001000)
jest pobierany przez mikroprocesor z pamięci zewnętrznej podczas okresu M1,
dekodowany, a następnie mikroprocesor wykonuje automatycznie przesył danych
pomiędzy wybranymi rejestrami.
Mnemonikiem asemblerowym dla całej tej grupy jest LD, za którym
umieszcza się miejsce docelowe danych i źródło (LD
dokąd, skąd). Możliwe jest kilka kombinacji trybów adresowania. Na przykład, źródło może stosować adresowanie rejestrowe, a miejsce docelowe może
stosować adresowanie rejestrowe pośrednie, jak przy ładowaniu komórki pamięci
wskazywanej parą HL przez zawartość rejestru D. Kodem operacyjnym takiej
operacji jest
72H. Mnemonikiem natomiast dla tej instrukcji będzie .
Nawiasy wokół HL oznaczają, że zawartość HL jest używana jako wskaźnik komórki pamięci. We wszystkich instrukcjach przesłania w asemblerze Z80 miejsce przeznaczenia jest zawsze wymieniane najpierw, za nim następuje źródło danych. Język asemblera Z80 został zdefiniowany w celu ułatwienia programowania. Każda instrukcja dokumentuje się sama, a programy napisane w języku asemblera Z80 są łatwe do analizy i poprawiania.
W tablicy 5 niektóre kody operacyjne, dostępne dla mikroprocesora Z80, używają dwóch bajtów. Ta cecha jest efektywnym sposobem wykorzystania pamięci, ponieważ w Z80 zaimplementowano instrukcje 8-, 16-, 24- i 32-bitowe. Często wykorzystywane instrukcje, takie jak arytmetyczne lub logiczne, są jedynie ośmiobitowe, co daje w wyniku lepsze wykorzystanie pamięci niż przy instrukcjach o stałym rozmiarze, np. 16 bitów.
| Źródło | |||||||||||||||||
| Impl. | Rejestrowe | Rejestrowe pośrednie | Indeksowane | Rozszerzone | Natychmiastowe | ||||||||||||
| Przeznaczenie | I | R | A | B | C | D | E | H | L | (HL) | (BC) | (DE) | (IX+d) | (IY+d) | (nn) | n | |
| Rejestrowe | A |
ED 57 |
ED 5F |
7F | 78 | 79 | 7A | 7B | 7C | 7D | 7E | 0A | 1A |
FD 7E d |
DD 7E d |
FD 3A nn |
FD 2E n |
| B | 47 | 40 | 41 | 42 | 43 | 44 | 45 | 46 |
DD 46 d |
FD 46 d |
DD D5 n |
||||||
| C | 4F | 48 | 49 | 4A | 4B | 4C | 4D | 4E |
DD 4E d |
FD 4E d |
DD DE n |
||||||
| D | 57 | 50 | 51 | 52 | 53 | 54 | 55 | 56 |
DD 56 d |
FD 56 d |
DD 1B n |
||||||
| E | 5F | 58 | 59 | 5A | 5B | 5C | 5D | 5E |
DD 5E d |
FD 5E d |
DD 1E n |
||||||
| H | 67 | 60 | 61 | 62 | 63 | 64 | 65 | 66 |
DD 66 d |
FD 6E d |
DD 2B n |
||||||
| L | 67 | 68 | 69 | 6A | 6B | 6C | 6D | 6E |
DD 6E d |
FD 6E d |
DD 36 n |
||||||
|
Rejestrowe pośrednie |
(HL) | 77 | 70 | 71 | 72 | 73 | 74 | 75 |
DD 78 n |
||||||||
| (BC) | 02 | ||||||||||||||||
| (DE) | 12 | ||||||||||||||||
| Indeksowane | (IX+d) |
DD 77 d |
DD 70 d |
DD 71 d |
DD 72 d |
DD 73 d |
DD 74 d |
DD 75 d |
DD 36 d n |
||||||||
| (IY+d) |
FD 77 d |
FD 70 d |
FD 71 d |
FD 72 d |
FD 73 d |
FD 74 d |
FD 75 d |
FD 36 d n |
|||||||||
| Rozszerzone | (nn) |
32 nn |
|||||||||||||||
| Implikowane | I |
ED 47 |
|||||||||||||||
| R |
ED 4F |
||||||||||||||||
Wszystkie instrukcje przesłań, wykorzystujące adresowanie indeksowe dla
źródła lub dla miejsce docelowego, właściwie używają trzech bajtów pamięci,
gdzie trzeci bajt jest przesunięciem d. Na przykład ładowanie rejestru
E argumentem wskazywanym przez IX z przesunięciem +8 zapisuje się jako:
LD E, (IX + 8) |
W pamięci instrukcja ta tworzy ciąg trzech bajtów:
| Adres A | DD | }- kod operacyjny |
| A + 1 | 5E | |
| A + 2 | 08 | }- przesunięcie d |
Dwie instrukcje z adresowaniem rozszerzonym są również 3 bajtowe. Na przykład instrukcja ładująca akumulator argumentem z komórki pamięci o adresie 6F32H jest zapisywana jako:
LD a, (6F32H) |
a ciąg bajtów dla tej instrukcji jest następujący:
| Adres A | 3A | }- kod operacyjny |
| A + 1 | 32 | }- młodszy bajt adresu |
| A + 2 | 6F | }- starszy bajt adresu |
Zwróć uwagę, że młodszy bajt adresu zawsze jest pierwszym argumentem.
Instrukcje ładowania natychmiastowego dla 8 bitowych rejestrów ogólnego przeznaczenia są instrukcjami 2 bajtowymi. Instrukcję załadowania rejestru H liczbą 36H zapisujemy jako:
LD H, 36H |
a jej ciąg bajtów jest następujący:
| Adres A | 26 | }- kod operacyjny |
| A + 1 | 36 | }- argument |
Załadowanie komórki pamięci daną przy zastosowaniu adresowania indeksowanego dla komórki docelowej i adresowania natychmiastowego dla źródła danych, wymaga czterech bajtów. Na przykład:
LD (IX - 15), 21H |
w pamięci wygląda jako:
| Adres A | DD | }- kod operacyjny |
| A + 1 | 36 | |
| A + 2 | F1 | }- przesunięcie (-15 jako liczba U2) |
| A + 3 | 21 | }- argument do umieszczenia w komórce pamięci |
Zauważ, że w każdym trybie adresowania indeksowanego przesunięcie jest zawsze umieszczone bezpośrednio za kodem operacyjnym instrukcji.
Tablica 6 określa 16 bitowe operacje przesłań. Cecha
rozszerzonego adresowania pokrywa wszystkie pary rejestrów. Operacje z adresowaniem pośrednim rejestrowym dotyczącym wskaźnika stosu to instrukcje
zapisujące daną na stos i pobierające daną ze stosu. Posiadają one odpowiednio
mnemoniki PUSH (zapis na stos)
i POP (pobranie ze stosu). Różnią się od innych przesłań 16 bitowych tym, iż wskaźnik stosu SP jest
automatycznie zmniejszany lub zwiększany przy zapisie lub odczycie każdego
bajtu. Na przykład instrukcja jest
instrukcją jednobajtową o kodzie operacyjnym równym F5H. Podczas
jej wykonywania generowany jest ten ciąg operacji:
Zmniejsz SP LD (SP), A Zmniejsz SP LD (SP), F |
Stos zewnętrzny ma teraz postać:
| (SP) | F | ← Szczyt stosu |
| (SP+1) | A | |
| * | * | |
| * | * | |
Instrukcja POP wykonuje działanie dokładnie odwrotne do PUSH. Wszystkie instrukcje PUSH i POP
wykorzystują argument 16 bitowy, a starszy bajt jest zawsze umieszczany na stosie jako pierwszy i pobierany z niego jako ostatni:
PUSH BC najpierw na stos B,
później Cnajpierw na stos D, później Enajpierw na stos H, później Lnajpierw ze stosu L, później H |
Instrukcja wykorzystująca rozszerzone adresowanie natychmiastowe dla źródła wymaga dwóch bajtów danych umieszczonych za kodem operacyjnym. Na przykład:
LD DE, 0659H |
w pamięci wygląda następująco:
| Adres A | 11 | }- kod operacyjny |
| A + 1 | 59 | }- młodszy bajt danej natychmiastowej |
| A + 2 | 06 | }- starszy bajt danej natychmiastowej |
We wszystkich trybach rozszerzonych adresowych i natychmiastowych młodszy bajt zawsze poprzedza starszy za kodem operacyjnym instrukcji.
| Źródło | ||||||||||||
| Rejestr | Roz. natychm. | Roz. adr. | Rej. pośr. | |||||||||
| Przeznaczenie | AF | BC | DE | HL | SP | IX | IY | nn | (nn) | (SP) | ||
| Rejestrowe | AF | B1 | ||||||||||
| BC |
01 n n |
ED 4B n n |
C1 | |||||||||
| DE |
11 n n |
ED 5B n n |
D1 | |||||||||
| HL |
21 n n |
2A n n |
E1 | |||||||||
| SP | F9 |
DD F9 |
FD F9 |
31 n n |
ED 7B n n |
|||||||
| IX |
DD 21 n n |
DD 2A n n |
DD E1 |
|||||||||
| IY |
FD 21 n n |
FD 2A n n |
FD E1 |
|||||||||
|
Rozszerzone adresowe |
(nn) |
ED 43 n n |
ED 53 n n |
22 n n |
ED 73 n n |
DD 22 n n |
FD 22 n N |
|||||
|
Instrukcje PUSH |
Rejestrowe pośrednie |
(SP) | F6 | C6 | D6 | E6 |
DD E6 |
FD E6 |
||||
| Instrukcje POP |
||||||||||||
Tablica 7 wymienia 16 bitowe instrukcje wymiany, które zaimplementowano w mikroprocesorze Z80. Kod operacyjny 08H pozwala programiście
przełączać się pomiędzy dwoma parami rejestrów akumulatora i znaczników,
natomiast kod D9H przełącza pomiędzy zestawem [podstawowym a zapasowym sześciu rejestrów ogólnego przeznaczenia. Te kody operacyjne maja
rozmiar jednego bajtu w celu zminimalizowania czasu niezbędnego do wymiany,
zatem zapasowe zestawy rejestrów mogą być używane w szybko reagujących
procedurach przerwań.
| Adresowanie implikowane | ||||||
| A'F | BC', DE' i HL' | HL | IX | IY | ||
| Implikowane | AF | 08 | ||||
|
BC DE HL |
D9 | |||||
| DE | EB | |||||
|
Rejestrowe pośrednie |
(SP) | E3 |
DD E3 |
FD E3 |
||
![]() |
Zespół Przedmiotowy Chemii-Fizyki-Informatyki w I Liceum Ogólnokształcącym im. Kazimierza Brodzińskiego w Tarnowie ul. Piłsudskiego 4 ©2026 mgr Jerzy Wałaszek |
Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone pod warunkiem podania źródła oraz niepobierania za to pieniędzy.
Pytania proszę przesyłać na adres email:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.