|
Serwis Edukacyjny Nauczycieli w I-LO w Tarnowie
Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej
Autor artykułu: mgr Jerzy Wałaszek |
©2026 mgr Jerzy Wałaszek
|
| SPIS TREŚCI |
| 001101011 111010110 011010111 011110101 ... |
Kody instrukcji umieszczane są w kolejnych komórkach pamięci, skąd mikroprocesor pobiera je, rozpoznaje operacje do wykonania i wykonuje te operacje. Kody binarne są słabo (czytaj wcale) czytelne dla ludzi. Jednakże to ludzie tworzą programy dla procesorów. Zatem zamiast stosowania niewygodnych i nieczytelnych kodów binarnych, stosują oni tzw. nazwy symboliczne. Przy odpowiedniej wprawie nazwy symboliczne są łatwe do zapamiętywania i analizowania. Każda instrukcja procesora posiada taką nazwę.
Na przykład:
LD A,1 ; załaduj do rejestru akumulatora A liczbę 1 CALL PRINT_A ; wywołaj procedurę pod adresem symbolicznym PRINT_A ADD HL,BC ; do pary rejestrów HL dodaj zawartość pary rejestrów BC |
itd.
Mnemoniki są dużo bardziej czytelne od kodów binarnych. Asembler tłumaczy mnemoniki na ich odpowiedniki binarne – to jest jego główna funkcja. Kod wynikowy z asemblera może być już bezpośrednio wykonany przez mikroprocesor. Zaletą programowania w asemblerze jest niesamowita szybkość programów. Wadą – cóż, trzeba dużo wiedzieć o samym komputerze i jego budowie.

WPROWADZENIE
OGÓLNY OPIS
ZACZYNAMY
ZAPIS PROGRAMÓW
EDYTOR
SKŁADNIA POLECEŃ ASEMBLERA
ETYKIETY
TEKST
LICZBY
SEPARATORY
NIESTANDARDOWE MNEMONIKI
KOMENTARZE
ASEMBLACJA
BŁĄD ETYKIETY
BŁĄD SKOKU WZGLĘDNEGO
BŁĄD PRZESUNIĘCIA
BŁĄD LICZBY
BRAK PAMIĘCI
BŁĄD STOSU
BŁĄD SKŁADNIOWY
MONITOR
ROZKAZY
UŻYTECZNE PROCEDURY W ASEMBLERZE
WSKAZÓWKI DLA POCZĄTKUJĄCYCH
REGUŁY
POLECANA LITERATURA
ZESTAW ROZKAZÓW MIKROPROCESORA Z80
Celem programu ZX ASEMBLER jest ułatwienie całego procesu programowania w kodzie maszynowym na komputerach ZX81. Udostępnia on wszechstronne i łatwe w użyciu funkcje, przy jednoczesnym zachowaniu zdumiewająco dużego obszaru pamięci RAM dostępnej dla użytkownika. Program zajmuje 7K i mieści się w górnej połowie obszaru ROM (chodzi oczywiście o VB81), zatem w żaden sposób nie wpływa na system BASIC, który pracuje tak, jakby asemblera w ogóle nie było.
W programie występują dwie główne sekcje:
Celem tej instrukcji jest wyjaśnienie sposobów pracy z EDYTOREM/ASEMBLEREM oraz z MONITOREM jak również przekazanie wskazówek i procedur dla początkujących oraz listy zbioru instrukcji mikroprocesora Z80.
ZX ASEMBLER jest potężnym oprogramowaniem i używany poprawnie może zwiększyć niesamowicie prędkość działania twoich programów.
ZX ASEMBLER jest automatycznie ładowany w momencie startu emulatora VB81. Zostaje on umieszczony w górnej połowie obszaru pamięci ROM, który rozpoczyna się od adresu 2000 szesnastkowo lub 8192 dziesiętnie. Ten obszar pamięci ZX81 jest zwykle chroniony przed zapisem podczas symulacji, chociaż możesz zezwolić na takie zapisy, lecz wtedy kod programu nie będzie bezpieczny i może zostać uszkodzony. Ustaw tę opcję tylko wtedy, gdy nie planujesz korzystania ze swojego asemblera.
Aby uruchomić ten program, musisz wpisać:
W wersji II ZX ASEMBLERA dodano funkcję zwracania adresu startowego kodu. Jeśli wywołasz asembler w sposób następujący:
to zmienna S będzie zawierała adres twojego kodu po asemblacji. Jeśli nie wykonasz asemblacji kodu, to w S będzie umieszczony adres startowy ZX ASEMBLERA.

Aby zapisać skończony lub niekompletny program, naciśnij dwukrotnie Q w celu powrotu do systemu BASIC. Odkryjesz wtedy program BASIC składający się z dwóch wierszy, plus to, co wcześniej wprowadziłeś.
| 1 REM 2 REM |
Wiersz nr 1 zawiera kod maszynowy. Wiersz nr 2 zawiera program źródłowy w asemblerze (bądź ostrożny przy przenumerowywaniu wierszy w VB81 – numery tych dwóch pierwszych wierszy powinny pozostać niezmienione). Na tym etapie możesz życzyć sobie usunąć wg potrzeby dowolny z tych wierszy i zapisać program w zwykły sposób (zostanie on umieszczony w katalogu taśmy ustawionym w VB81). Gdy ASEMBLER jest obecny w ROM, możesz w dowolnej chwili załadować ten program z powrotem i go dokończyć lub kontynuować pracę nad nim. Jeśli nie skończyłeś jeszcze swojego programu, możesz usunąć kod wynikowy (wiersz nr 1) i zapisać jedynie kod źródłowy programu. Najlepszym rozwiązaniem jest tworzenie kopii bezpieczeństwa kodu źródłowego dla przyszłych poprawek.
Gdy wywołasz EDYTOR naciskając klawisz E, zostanie wyświetlony ekran z tekstem dotąd wprowadzonym. Będziesz znajdował się albo w miejscu, gdzie byłeś ostatnio przy wyjściu z EDYTORA, albo w miejscu wystąpienia błędu przy asemblacji (zobacz na ASEMBLACJĘ). Oprócz prostego wprowadzania tekstu EDYTOR udostępnia użytkownikowi kilka funkcji. Wszystkie te funkcje otrzymujemy z naciśniętym klawiszem SHIFT.
Naciśnij:
SHIFT 6, aby przesunąć kursor w dół.Wszystkie klawisze posiadają funkcję autopowtarzania po upływie 1 sekundy.
EDYTOR pozwala wprowadzić w wierszu maksymalnie 31 znaków. Jeśli skończy się
pamięć, to powrócisz do TRYBU ROZKAZÓW, gdzie pojawi się wiadomość OUT OF MEMORY (BRAK PAMIĘCI): wiersz, który właśnie
wpisywałeś, zostanie usunięty, abyś mógł powrócić do EDYTORA i zdobyć nieco
miejsca. Jeśli ma być zmieniona etykieta, to
Po przedstawieniu się programu otrzymasz do wyboru kilka rozkazów dla monitora, lecz najpierw zbadajmy Edytor/Asembler.
Aby wejść do Edytora, wpisz E. Ekran zostanie wyczyszczony i będzie wyświetlał graficzną spację ustawioną w 7-mej kolumnie od lewej krawędzi ekranu. Teraz jesteś gotowy do wprowadzania swojego programu w asemblerze.
Asembler akceptuje etykiety zbudowane z liter i cyfr, rozpoczynające się od litery, a po nich może bezpośrednio występować:
Aby wprowadzić etykietę, wpisz
Przykład: procedura obliczania punktów w grze
SCORE1 = 5000 JR BEGIN ;skocz na początek. SCORE DB 00,00 ;dwa bajty na punktację. BEGIN LD HL,(SCORE) ;pobierz punkty. INC HL ;zwiększ je LD (SCORE),HL ;zapisz nowe punkty LD (SCORE1),HL ;zapisz kopię pod 5000 HEX RET
Do etykiety można odwołać się z przesunięciem od -9 do +9. Np:
LD A,(PTR+4) ... PTR DB 1,2,3,4,5,6
Rejestr A będzie zawierał 5. Jeśli nie zostanie podane przesunięcie, to wynosi ono 0.
A = 1
Uwaga: Odradzamy stosowania nazw takich samych jak nazwy rejestrów, np. BC, lub poprawne liczby szesnastkowe, np. ABCD, bo albo otrzymasz wiadomość o błędzie przy skokach względnych, albo konsekwencje będą potencjalnie katastrofalne.
Jeśli chcesz wstawić jakiś tekst do swojego programu w asemblerze, to
użyj dyrektywy DEFM/DM. Sam tekst musi być umieszczony w cudzysłowach
Przykład: wydruk wiadomości
CALL PRINT
DM "TUTAJ WPROWADZAMY TEKST"
DB FF ;zaznaczamy koniec tekstu
Przykład: tekst w asemblerze
LD A,0 ;ustaw wartość początkową CHECK INC A ;dodaj do niej 1 CP "*" ;sprawdź, czy jest * JR NZ CHECK ;jeśli nie, wróć do CHECK CALL PRINTA ;wydrukuj znak CALL PRINT ;wydrukuj tekst DM " JEST ZNAKIEM *" DB FF
Eliminuje to potrzebę znajomości kodów znaków.
Asembler standardowo używa liczb szesnastkowych (o podstawie 16)
8 bitowych od 0 do FF 16 bitowych od 000 do FFFF (musi być 3 lub 4 cyfry)
Liczby dziesiętne muszą być poprzedzone znakiem '+' lub '-'. Są one zawsze liczbami 16 bitowymi.
np. +1 jest reprezentowane jako 0001.
Asembler jest dosyć inteligentny w traktowaniu liczb tak, jak tego wymaga sytuacja – czasem jako 8 bitowe, a czasem jako 16 bitowe.
Przykład: ładowanie etykiety
TEST = +64 ... LD HL,TEST ; 16 bit oczekiwane LD A,TEST ; 8 bit oczekiwane
Etykieta TEST jest traktowana w zaznaczonych miejscach odpowiednio jak liczba 16 bitowa lub 8 bitowa. Jednakże jeżeli Asembler oczekuje liczby 8 bitowej, a liczba ma wartość większą od FF lub +255, to w czasie asemblacji powstanie błąd NUMBER ERROR.
Przykład: liczby
LD HL,1 ;OK LD A,+13 ;OK LD A,101 ;Błąd
Jeśli chcesz umieścić w rejestrze liczbę, której nazwa jest taka sama jak nazwa rejestru, musisz poprzedzić ją cyfrą 0.
Przykład
LD A,B ;umieszcza rejestr B w A LD A,0B ;umieszcza liczbę B w A
Jeśli chcesz umieścić parę liczb wewnątrz swojego kodu, użyj dyrektywy DEFB/DB dla liczb 8 bitowych i dyrektywy DEFW/DW dla liczb 16 bitowych. Każda z tych dyrektyw przyjmuje liczby rozdzielone przecinkami.
Przykłady: liczby w pamięci
TAB1 DB +15,+24,-43,0 ;liczby 8 bitowe TAB2 DW FA99,+16333,+25872 ;liczby 16 bitowe
Aby zarezerwować miejsce w pamięci na jakikolwiek cel, powiedzmy 100 bajtów, użyj dyrektywy DEFS/DS.
Przykład:
BUF DS 100 ;masz do swojej dyspozycji 100 bajtów
Każda instrukcja może być rozdzielana za pomocą spacji lub końca wiersza.
Spacji może być więcej niż jedna za wyjątkiem poniższych instrukcji, które należy wprowadzać dokładnie tak, jak przedstawiono poniżej:
LDA_A,I _ oznacza jedną spację LDA_I,A LDA_R,A LDA_A,R EX_AF ≡ EX AF,AF' EX_DE,HL EX_(SP),HL
Następujące mnemoniki są niestandardowe dla Z80
EX AF ≡ EX AF,AF' IM0 zamiast IM 0 IM1 zamiast IM 1 IM2 zamiast IM 2
Instrukcje JP i JR nie mają przecinków, np.
Aby skompilować swój program, wpisz A i pojawi się napis ASSEMBLE. Teraz naciśnij NEWLINE i twój program zostanie przetłumaczony na kod maszynowy. Program wynikowy jest umieszczany pod adresem 4084 szesnastkowo lub 16516 dziesiętnie. To będzie wiersz z REM o numerze 1, gdy powrócisz do systemu BASIC. Jeśli uruchomiłeś ASEMBLER poleceniem
LET S=USR 8192
to zmienna S zawiera adres startowy twojego kodu po powrocie z Asemblera do systemu BASIC. Aby go uruchomić, wpisz
RAND USR S
Na początku swojego programu możesz użyć dyrektywy
Jeśli zrobisz błąd, to zostanie wyświetlony odpowiedni komunikat. Wpisanie E wyświetli tekst programu na wierszu, w którym wystąpił błąd.
Możesz otrzymać poniższe komunikaty błędów:
np. LD HL,(FRED +10)
dozwolone tylko ± 9
IX,IY
> +127 lub <
-128np. LDA,1000
np. ADD A,*| A | ASEMBLACJA programu | |||||||||||||
| C | Kopiuje blok pamięci z jednego miejsca w inne
|
|||||||||||||
| M | Włącza tryb edycji pamięci, w którym możesz
bezpośrednio wprowadzać kod maszynowy. Po lewej stronie ekranu biegnie w dół kolumna 24 2-bajtowych adresów, obok których znajduje się kolumna z zawartością każdego z tych adresów. Kursor umieszczony w połowie kolumny wskazuje adres komórki pamięci, którą możesz zmieniać. Aby to zrobić, wpisz liczbę szesnastkową i naciśnij NEWLINE. Jeśli przed naciśnięciem NEWLINE naciśniesz Q, to wprowadzenie wpisanego numeru do komórki zostanie anulowane. Rozkazy w tym trybie są następujące:
|
|||||||||||||
| I | przeglądanie i modyfikacja rejestrów. Wyświetla pary rejestrów BC, DE, HL i AF. F jest również wyświetlany w sposób binarny z oznaczeniem każdego znacznika (S=znak, Z=zero, H=przeniesienie pomocnicze, O=parzystość/nadmiar, N=ujemne lub minus, C=przeniesienie). Gdy uruchamiasz program w kodzie maszynowym, to wyświetlone tu wartości zostają umieszczone w odpowiednich rejestrach, a przy powrocie wartości rejestrów są zapamiętywane. Wprowadzona liczba szesnastkowa zostanie umieszczona w rejestrze wskazywanym przez kursor. Aby wprowadzić liczbę i przesunąć kursor, naciśnij NEWLINE. |
|||||||||||||
| S | SEARCH FOR... wartość 2 bajtowa, która ma zostać
wyszukana FROM ADDR... adres, od którego rozpoczną się poszukiwania. Przeszukuje pełne 64K pamięci z wyjątkiem obszaru stosu. Wyświetla adres pierwszego wystąpienia poszukiwanej liczby. Jeśli naciśniesz M, nastąpi przejście bezpośrednio do trybu edycji pamięci z kursorem ustawionym na znalezionym adresie. Jeśli naciśniesz Q, powrócisz do trybu wprowadzania rozkazów. Napis 'NOT FOUND' pojawia się, gdy dana liczba nie występuje w pamięci. |
|||||||||||||
| R | uruchamia kod maszynowy spod adresu 4084
(16516 dziesiętnie) lub spod adresu, który ty wprowadzisz. Powrót do monitora wykonywany jest instrukcją skoku umieszczaną przez asembler na końcu twojego kodu. Adres skoku jest równy 372F. Przed uruchomieniem programu ekran jest wymazywany. Przy powrocie do monitora czeka on na naciśnięcie dowolnego klawisza przed wyczyszczeniem ekranu i przejściem do trybu wprowadzania rozkazów. |
|||||||||||||
| V | wyświetla numer wersji oraz datę modyfikacji pakietu ZX ASEMBLER. |
|||||||||||||
| INKEY | odczytuje klawiaturę ZX81 i zwraca kod naciskanego klawisza w A. Jeśli nie jest naciskany żaden klawisz, zwraca wartość 1. Wszystkie rejestry są zachowywane z wyjątkiem AF. |
|
| FILL | wypełnia cały ekran ZX81 kodem znaku przekazanym w A. Wszystkie rejestry są zachowywane. Uwaga: kod powinien być poprawnym kodem znaku ZX81, inaczej system może się zawiesić. |
|
| PRDE | wyświetla tekst umieszczony za wywołaniem tej procedury w wierszu
D i kolumnie E. Tekst powinien kończyć się kodem FF. Nie zachowuje rejestrów HL, DE i AF. Przykład: LD D,+10 ; wiersz 10 – liczony od 0! LD E,+14 ; kolumna 14 – również od 0! CALL PRDE ; drukuj tekst na 10,14 DM "HELLO" ; tekst do wydruku DB FF ; znacznik końca tekstu ... ; kontynuacja programu |
|
| ATDE | oblicza adres wiersza D i kolumny
E w buforze obrazowym DFILE i zwraca go w HL. Zachowuje wszystkie rejestry. INKEY PUSH BC ; zachowaj rejestry na stosie PUSH DE PUSH HL LD BC,(4025) ; załaduj kody skanowania LD D,C ; sprawdź, czy jest wciśnięty klawisz INC D LD A,1 ; załóż, że nie JR Z INK1 ; jeśli nie, to pomiń wywołanie ROM CALL 07BD ; zdekoduj kod klawisza LD A,(HL) ; pobierz kod INK1 POP HL ; odtwórz rejestry POP DE POP BC RET ; powróć z kodem w A FILL PUSH BC ; zachowaj używane rejestry PUSH HL LD HL,(400C) ; ustaw HL na DFILE INC HL ; pomiń startowy znak NEWLINE LD C,18 ; 24 wiersze do wypełnienia FILL1 LD B,20 ; w każdym po 32 znaki z A FILL2 LD (HL),A ; wypełnij jeden wiersz INC HL DJNZ FILL2 LD (HL),+118 ; umieść NEWLINE na kocu wiersza INC HL ; przejdź do następnego wiersza DEC C ; jeśli nie koniec, kontynuuj JR NZ FILL1 ; z resztą ekranu POP HL ; odtwórz rejestry POP BC RET ; i powróć PRDE CALL ATDE ; oblicz pozycję DE w HL POP DE ; ustaw DE na początek tekstu PRDE1 LD A,(DE) ; pobierz znak INC DE ; następna pozycja w tekście CP FF ; sprawdź znacznik końca tekstu JR NZ PRDE2 ; jeśli nie koniec, kontynuuj EX DE,HL ; inaczej skocz tuż za znacznik JP (HL) ; końca tekstu PRDE2 LD (HL),A ; umieść znak w DFILE INC HL ; przesuń się na następną pozycję JR PRDE1 ; kontynuuj drukowanie ATDE PUSH BC ; zachowaj używane rejestry PUSH DE LD H,0 LD L,D ; HL = D LD B,H LD C,L ; BC = D ADD HL,HL ; HL = 2D ADD HL,HL ; HL = 4D ADD HL,HL ; HL = 8D ADD HL,HL ; HL = 16D ADD HL,HL ; HL = 32D ADD HL,BC ; HL = 33D LD D,0 ; DE = E ADD HL,DE ; HL = 33D + E EX DE,HL ; DE = 33D + E LD HL,(400C) ; HL = DFILE INC HL ; HL = DFILE+1 ADD HL,DE ; HL = DFILE+1+33D+E POP DE ; odtwórz rejestry POP BC RET ; powróć z adresem w HL |
Zachowuj swoje otoczenie. W podprogramach umieszczaj używane rejestry na stosie rozkazami PUSH. Przed powrotem odtwarzaj je ze stosu w kolejności odwrotnej do ich zapisu.
e.g. LD A,27 ; wpisz wartość do A PUSH HL ; zapisz HL na stosie PUSH BC ; zapisz BC na stosie
CALL PRINT ; pisz znak z A POP BC ; odtwórz BC ze stosu POP HL ; odtwórz HL ze stosu
Wszystko to, co zostało umieszczone na stosie w danym podprogramie, musi być w tym samym podprogramie zdjęte ze stosu przed wykonaniem
RET.
Załóżmy, iż FRED jest podprogramem drukującym znak.
FRED LD A,17 ; wpisz wartość do A PUSH AF ; zapisz AF na stosie CALL FRED ; drukuj znak RET ; powrót?
Ta procedura spowoduje zablokowanie komputera, ponieważ przed wykonaniem RET należy wykonać POP AF.
+ 127 bajtów w przód – 128 bajtów wstecz
W języku angielskim:
Machine
Language programming made simple for your
Sinclair.
Understanding your ZX81 ROM, Melbourne House
Programming the Z80, Rodney Zaks, Sybex
Z80 Instruction Handbook, Intel
| n | – wartość 1 bajtowa |
| nn | – wartość 2 bajtowa |
| nnLO | – mniej znaczący bajt wartości 2 bajtowej |
| nnHI | – bardziej znaczący bajt wartości 2 bajtowej |
| d | – przesunięcie – wartość 1 bajtowa ze znakiem |
| Instrukcja | Kod |
| ADC A,(HL) | 8E |
| ADC A,(IX+d) | DD 8E d |
| ADC A,(IY+d) | FD 8E d |
| ADC A,A | 8F |
| ADC A,B | 88 |
| ADC A,C | 89 |
| ADC A,D | 8A |
| ADC A,E | 8B |
| ADC A,H | 8C |
| ADC A,L | 8D |
| ADC A,n | CE n |
| ADC HL,BC | ED 4A |
| ADC HL,DE | ED 5A |
| ADC HL,HL | ED 6A |
| ADC HL,SP | ED 7A |
| ADD A,(HL) | 86 |
| ADD A,(IX+d) | DD 86 d |
| ADD A,(IY+d) | FD 86 d |
| ADD A,A | 87 |
| ADD A,B | 80 |
| ADD A,C | 81 |
| ADD A,D | 82 |
| ADD A,E | 83 |
| ADD A,H | 84 |
| ADD A,L | 85 |
| ADD A,n | C6 n |
| ADD HL,BC | 09 |
| ADD HL,DE | 19 |
| ADD HL,HL | 29 |
| ADD HL,SP | 39 |
| ADD IX,BC | DD 09 |
| ADD IX,DE | DD 19 |
| ADD IX,HL | DD 29 |
| ADD IY,BC | FD 09 |
| ADD IY,DE | FD 19 |
| ADD IY,HL | FD 29 |
| ADD IY,SP | FD 39 |
| ADD IX,SP | DD 39 |
| AND (HL) | A6 |
| AND (IX+d) | DD A6 d |
| AND (IY+d) | FD A6 d |
| AND A | A7 |
| AND B | A0 |
| AND C | A1 |
| AND D | A2 |
| AND E | A3 |
| AND H | A4 |
| AND L | A5 |
| AND n | E6 n |
| BIT 0,(HL) | CB 46 |
| BIT 0,(IX+d) | CB DD 46 d |
| BIT 0,(IY+d) | CB FD 46 d |
| BIT 0,A | CB 47 |
| BIT 0,B | CB 40 |
| BIT 0,C | CB 41 |
| BIT 0,D | CB 42 |
| BIT 0,E | CB 43 |
| BIT 0,H | CB 44 |
| BIT 0,L | CB 45 |
| BIT 1,(HL) | CB 4E |
| BIT 1,(IX+d) | CB DD 4E d |
| BIT 1,(IY+d) | CB FD 4E d |
| BIT 1,A | CB 1F |
| BIT 1,B | CB 48 |
| BIT 1,C | CB 49 |
| BIT 1,D | CB 4A |
| BIT 1,E | CB 4B |
| BIT 1,H | CB 4C |
| BIT 1,L | CB 4D |
| BIT 2,(HL) | CB 56 |
| BIT 2,(IY+d) | CB FD 56 d |
| BIT 2,(LY+d) | CB DD 56 d |
| BIT 2,A | CB 57 |
| BIT 2,B | CB 50 |
| BIT 2,C | CB 51 |
| BIT 2,D | CB 52 |
| BIT 2,E | CB 53 |
| BIT 2,H | CB 54 |
| BIT 2,L | CB 55 |
| BIT 3,(HL) | CB 5E |
| BIT 3,(IX+d) | CB DD 5E d |
| BIT 3,(IY+d) | CB FD 5E d |
| BIT 3,A | CB 5F |
| BIT 3,B | CB 58 |
| BIT 3,C | CB 59 |
| BIT 3,D | CB 5A |
| BIT 3,E | CB 5B |
| BIT 3,H | CB 5C |
| BIT 3,L | CB 5D |
| BIT 4,(HL) | CB 66 |
| BIT 4,(IX+d) | CB DD 66 d |
| BIT 4,(IY+d) | CB FD 66 d |
| BIT 4,A | CB 67 |
| BIT 4,B | CB 60 |
| BIT 4,C | CB 61 |
| BIT 4,D | CB 62 |
| BIT 4,E | CB 63 |
| BIT 4,H | CB 64 |
| BIT 4,L | CB 65 |
| BIT 5,(HL) | CB 6E |
| BIT 5,(IX+d) | CB DD 6E d |
| BIT 5,(IY+d) | CB FD 6E d |
| BIT 5,A | CB 6F |
| BIT 5,B | CB 68 |
| BIT 5,C | CB 69 |
| BIT 5,D | CB 6A |
| BIT 5,E | CB 6B |
| BIT 5,H | CB 6C |
| BIT 5,L | CB 6D |
| BIT 6,(HL) | CB 76 |
| BIT 6,(IX+d) | CB DD 76 d |
| BIT 6,(IY+d) | CB FD 76 d |
| BIT 6,A | CB 77 |
| BIT 6,B | CB 70 |
| BIT 6,C | CB 71 |
| BIT 6,D | CB 72 |
| BIT 6,E | CB 73 |
| BIT 6,H | CB 74 |
| BIT 6,L | CB 75 |
| BIT 7,(HL) | CB 7E |
| BIT 7,(IX+d) | CB DD 7E d |
| BIT 7,(IY+d) | CB FD 7E d |
| BIT 7,A | CB 7F |
| BIT 7,B | CB 78 |
| BIT 7,C | CB 79 |
| BIT 7,D | CB 7A |
| BIT 7,E | CB 7B |
| BIT 7,H | CB 7C |
| BIT 7,L | CB 7D |
| CALL nn | CD nnLO nnHI |
| CALL C nn | DC nnLO nnHI |
| CALL M nn | FC nnLO nnHI |
| CALL NC nn | D4 nnLO nnHI |
| CALL NZ nn | C4 nnLO nnHI |
| CALL P nn | F4 nnLO nnHI |
| CALL PO nn | E4 nnLO nnHI |
| CALL PE nn | EC nnLO nnHI |
| CALL Z nn | CC nnLO nnHI |
| CCF | 3F |
| CP (HL) | BE |
| CP (IX+d) | DD BE d |
| CP (IY+d) | FD BE d |
| CP A | BF |
| CP B | B8 |
| CP C | B9 |
| CP D | BA |
| CP E | BB |
| CP H | BC |
| CP L | BD |
| CP n | FE n |
| CPD | ED A9 |
| CPDR | ED B9 |
| CPI | ED A1 |
| CPIR | ED B2 |
| CPL | 2F |
| DAA | 27 |
| DEC (HL) | 35 |
| DEC (IX+d) | DD 35 d |
| DEC (IY+d) | FD 35 d |
| DEC A | 3D |
| DEC B | 05 |
| DEC BC | 0B |
| DEC C | 0D |
| DEC D | 15 |
| DEC DE | 1B |
| DEC E | 1D |
| DEC H | 25 |
| DEC HL | 2B |
| DEC IX | DD 2B |
| DEC IY | FD 2B |
| DEC L | 2D |
| DEC SP | 3B |
| DI | F3 |
| DJNZ d | 10 d |
| EI | FB |
| EX (SP),HL | E3 |
| EX (SP),IX | DD E3 |
| EX (SP),IY | FD E3 |
| EX AF | 08 |
| EX DE,HL | EB |
| EXX | D9 |
| HALT | 76 |
| IM0 | ED 46 |
| IM1 | ED 56 |
| IM2 | ED 5E |
| IN A,(C) | ED 78 |
| IN A,(n) | DB n |
| IN B,(C) | ED 40 |
| IN C,(C) | ED 48 |
| IN D,(C) | ED 50 |
| IN E,(C) | ED 58 |
| IN H,(C) | ED 60 |
| IN L,(C) | ED 68 |
| INC (HL) | 34 |
| INC (IX+d) | DD 34 d |
| INC (IY+d) | FD 34 d |
| INC A | 3C |
| INC B | 04 |
| INC BC | 03 |
| INC C | 0C |
| INC D | 14 |
| INC DE | 13 |
| INC E | 1C |
| INC H | 24 |
| INC HL | 23 |
| INC IX | DD 23 |
| INC IY | FD 23 |
| INC L | 2C |
| INC SP | 33 |
| IND | ED AA |
| INDR | ED BA |
| INI | ED A2 |
| INIR | ED B2 |
| JP (HL) | E9 |
| JP (IX) | DD E9 |
| JP (IY) | FD E9 |
| JP nn | C3 nnLO nnHI |
| JP C nn | DA nnLO nnHI |
| JP M nn | FA nnLO nnHI |
| JP NC nn | D2 nnLO nnHI |
| JP NZ nn | C2 nnLO nnHI |
| JP P nn | F2 nnLO nnHI |
| JP PO nn | E2 nnLO nnHI |
| JP PE nn | EA nnLO nnHI |
| JP Z nn | CA nnLO nnHI |
| JR C d | 38 d |
| JR d | 18 d |
| JR NC d | 30 d |
| JR NZ d | 20 d |
| JR Z d | 28 d |
| LD (nn),A | 32 nnLO nnHI |
| LD (nn),BC | ED 43 nnLO nnHI |
| LD (nn),DE | ED 53 nnLO nnHI |
| LD (nn),HL | 22 nnLO nnHI |
| LD (nn),HL | ED 63 nnLO nnHI |
| LD (nn),IX | DD 22 nnLO nnHI |
| LD (nn),IY | FD 22 nnLO nnHI |
| LD (nn),SP | ED 73 nnLO nnHI |
| LD (BC),A | 02 |
| LD (DE),A | 12 |
| LD (HL),A | 77 |
| LD (HL),A | 77 |
| LD (HL),B | 70 |
| LD (HL),C | 71 |
| LD (HL),D | 72 |
| LD (HL),E | 73 |
| LD (HL),H | 74 |
| LD (HL),L | 75 |
| LD (HL),n | 36 n |
| LD (IX+d),A | DD 77 d |
| LD (IX+d),B | DD 70 d |
| LD (IX+d),C | DD 71 d |
| LD (IX+d),D | DD 72 d |
| LD (IX+d),E | DD 73 d |
| LD (IX+d),H | DD 71 d |
| LD (IX+d),L | DD 75 d |
| LD (IX+d),n | DD 36 d n |
| LD (IY+d),A | FD 77 d |
| LD (IY+d),B | FD 70 d |
| LD (IY+d),C | FD 71 d |
| LD (IY+d),D | FD 72 d |
| LD (IY+d),E | FD 73 d |
| LD (IY+d),H | FD 74 d |
| LD (IY+d),L | FD 75 d |
| LD (IY+d),n | FD 36 d n |
| LD A,(nn) | 3A nnLO nnHI |
| LD A,(BC) | 0A |
| LD A,(DE) | 1A |
| LD A,(HL) | 7E |
| LD A,(HL) | 7E |
| LD A,(IX+d) | DD 7E d |
| LD A,(IY+d) | FD 7E d |
| LD A,A | 7F |
| LD A,B | 78 |
| LD A,C | 79 |
| LD A,D | 7A |
| LD A,E | 7B |
| LD A,H | 7C |
| LD A,I | ED 57 |
| LD A,L | 7D |
| LD A,n | 3E n |
| LD A,R | ED 5F |
| LD B,(HL) | 46 |
| LD B,(IX+d) | DD 46 d |
| LD B,(IY+d) | FD 46 d |
| LD B,A | 47 |
| LD B,B | 40 |
| LD B,C | 41 |
| LD B,D | 42 |
| LD B,E | 43 |
| LD B,H | 44 |
| LD B,L | 45 |
| LD B,n | 06 n |
| LD BC,(nn) | ED 4B nnLO nnHI |
| LD BC,nn | 01 nnLO nnHI |
| LD C,(HL) | 4E |
| LD C,(IX+d) | DD 4E d |
| LD C,(IY+d) | DD 4E d |
| LD C,A | 4F |
| LD C,B | 48 |
| LD C,C | 49 |
| LD C,D | 4A |
| LD C,E | 4B |
| LD C,H | 4C |
| LD C,L | 4D |
| LD C,n | 0E n |
| LD D,(HL) | 56 |
| LD D,(IX+d) | DD 56 d |
| LD D,(IY+d) | FD 56 d |
| LD D,A | 57 |
| LD D,B | 50 |
| LD D,C | 51 |
| LD D,D | 52 |
| LD D,E | 53 |
| LD D,H | 54 |
| LD D,L | 55 |
| LD D,n | 16 n |
| LD DE,(nn) | ED 5B nnLO nnHI |
| LD DE,nn | 11 nnLO nnHI |
| LD E,(HL) | 5E |
| LD E,(IX+d) | DD 5E d |
| LD E,(IY+d) | FD 5E d |
| LD E,A | 5F |
| LD E,B | 58 |
| LD E,C | 59 |
| LD E,D | 5A |
| LD E,E | 5B |
| LD E,H | 5C |
| LD E,L | 5D |
| LD E,n | 1E n |
| LD H,(HL) | 66 |
| LD H,(IX+d) | DD 66 d |
| LD H,(IY+d) | FD 66 d |
| LD H,A | 67 |
| LD H,B | 60 |
| LD H,C | 61 |
| LD H,D | 62 |
| LD H,E | 63 |
| LD H,H | 64 |
| LD H,L | 65 |
| LD H,n | 26 n |
| LD HL,(nn) | 2A nnLO nnHI |
| LD HL,(nn) | ED 6B nnLO nnHI |
| LD HL,nn | 21 nnLO nnHI |
| LD I,A | ED 47 |
| LD IX,(nn) | DD 2A nnLO nnHI |
| LD IX,nn | DD 2A nnLO nnHI |
| LD IY,(nn) | FD 2A nnLO nnHI |
| LD IY,nn | FD 21 nnLO nnHI |
| LD L,(HL) | 6E |
| LD L,(IX+d) | DD 6E d |
| LD L,(IY+d) | FD 6E d |
| LD L,A | 6F |
| LD L,B | 68 |
| LD L,C | 69 |
| LD L,D | 6A |
| LD L,E | 6B |
| LD L,H | 6C |
| LD L,L | 6D |
| LD L,n | 2E n |
| LD R,A | ED 4F |
| LD SP,(nn) | ED 7BnnLO nnHI |
| LD SP,nn | 31 nnLO nnHI |
| LD SP,HL | F9 |
| LD SP,IX | DD F9 |
| LD SP,IY | FD F9 |
| LDD | ED A8 |
| LDDR | ED B8 |
| LDI | ED A0 |
| LDIR | ED B0 |
| NEG | ED 44 |
| NOP | 00 |
| OR (HL) | B6 |
| OR (IX+d) | DD B6 d |
| OR (IY+d) | FD B6 d |
| OR A | B7 |
| OR B | B0 |
| OR C | B1 |
| OR D | B2 |
| OR E | B3 |
| OR H | B4 |
| OR L | B5 |
| OR n | F6 n |
| OTDR | ED BB |
| OTIR | ED B3 |
| OUT (C),A | ED 79 |
| OUT (C),B | ED 41 |
| OUT (C),C | ED 49 |
| OUT (C),D | ED 51 |
| OUT (C),E | ED 59 |
| OUT (C),H | ED 61 |
| OUT (C),L | ED 69 |
| OUT (n),A | D3 n |
| OUTD | ED AB |
| OUTI | ED A3 |
| POP AF | F1 |
| POP BC | C1 |
| POP DE | D1 |
| POP HL | E1 |
| POP IX | DD E1 |
| POP IY | FD E1 |
| PUSH AF | F5 |
| PUSH BC | C5 |
| PUSH DE | D5 |
| PUSH HL | E5 |
| PUSH IX | DD E5 |
| PUSH IY | FD E5 |
| RES 0,(HL) | CB 86 |
| RES 0,(IX+d) | DD CB d 86 |
| RES 0,(IY+d) | FD CB d 86 |
| RES 0,A | CB 87 |
| RES 0,B | CB 80 |
| RES 0,C | CB 81 |
| RES 0,D | CB 82 |
| RES 0,E | CB 83 |
| RES 0,H | CB 81 |
| RES 0,L | CB 85 |
| RES 1,(HL) | CB 8E |
| RES 1,(IX+d) | DD CB d 8E |
| RES 1,(IY+d) | FD CB d 8E |
| RES 1,A | CB 8F |
| RES 1,B | CB 88 |
| RES 1,C | CB 89 |
| RES 1,D | CB 8A |
| RES 1,E | CB 8B |
| RES 1,H | CB 8C |
| RES 1,L | CB 8D |
| RES 2,(HL) | CB 96 |
| RES 2,(IX+d) | DD CB d 96 |
| RES 2,(IY+d) | FD CB d 96 |
| RES 2,A | CB 97 |
| RES 2,B | CB 90 |
| RES 2,C | CB 91 |
| RES 2,D | CB 92 |
| RES 2,E | CB 93 |
| RES 2,H | CB 94 |
| RES 2,L | CB 95 |
| RES 3,(HL) | CB 9E |
| RES 3,(IX+d) | DD CB d 9E |
| RES 3,(IY+d) | FD CB d 9E |
| RES 3,A | CB 9F |
| RES 3,B | CB 98 |
| RES 3,C | CB 99 |
| RES 3,D | CB 9A |
| RES 3,E | CB 9B |
| RES 3,H | CB 9C |
| RES 3,L | CB 9D |
| RES 4,(HL) | CB A6 |
| RES 4,(IX+d) | DD CB d A6 |
| RES 4,(IY+d) | FD CB d A6 |
| RES 4,A | CB A7 |
| RES 4,B | CB A0 |
| RES 4,C | CB A1 |
| RES 4,D | CB A2 |
| RES 4,E | CB A3 |
| RES 4,H | CB A4 |
| RES 4,L | CB A5 |
| RES 5,(HL) | CB AE |
| RES 5,(IX+d) | DD CB d AE |
| RES 5,(IY+d) | FD CB d AE |
| RES 5,A | CB AF |
| RES 5,B | CB A8 |
| RES 5,C | CB A9 |
| RES 5,D | CB AA |
| RES 5,E | CB AB |
| RES 5,H | CB AC |
| RES 5,L | CB AD |
| RES 6,(HL) | CB B6 |
| RES 6,(IX+d) | DD CB d B6 |
| RES 6,(IY+d) | FD CB d B6 |
| RES 6,A | CB B7 |
| RES 6,B | CB B0 |
| RES 6,C | CB B1 |
| RES 6,D | CB B2 |
| RES 6,E | CB B3 |
| RES 6,H | CB B4 |
| RES 6,L | CB B5 |
| RES 7,(HL) | CB BE |
| RES 7,(IX+d) | DD CB d BE |
| RES 7,(IY+d) | FD CB d BE |
| RES 7,A | CB BF |
| RES 7,B | CB B8 |
| RES 7,C | CB B9 |
| RES 7,D | CB BA |
| RES 7,E | CB BB |
| RES 7,H | CB BC |
| RES 7,L | CB BD |
| RET | C9 |
| RET C | D8 |
| RET M | F8 |
| RET NC | D0 |
| RET NZ | C0 |
| RET P | F0 |
| RET PE | E8 |
| RET PO | E0 |
| RET Z | C8 |
| RETI | ED 4D |
| RETN | ED 45 |
| RL (HL) | CB 16 |
| RL (IX+d) | DD CB d 16 |
| RL (IY+d) | FD CB d 16 |
| RL A | CB 17 |
| RL B | CB 10 |
| RL C | CB 11 |
| RL D | CB 12 |
| RL E | CB 13 |
| RL H | CB 14 |
| RL L | CB 15 |
| RLA | 17 |
| RLC (HL) | CB 06 |
| RLC (IX+d) | DD CB d 06 |
| RLC (IY+d) | FD CB d 06 |
| RLC A | CB 07 |
| RLC B | CB 00 |
| RLC C | CB 01 |
| RLC D | CB 02 |
| RLC E | CB 03 |
| RLC H | CB 04 |
| RLC L | CB 05 |
| RLCA | 07 |
| RLD | ED 6F |
| RR (HL) | CB 1E |
| RR (IX+d) | DD CB d 1E |
| RR (IY+d) | FD CB d 1E |
| RR A | CB 1F |
| RR B | CB 18 |
| RR C | CB 19 |
| RR D | CB 1A |
| RR E | CB 1B |
| RR H | CB 1C |
| RR L | CB 1D |
| RRA | 1F |
| RRC (HL) | CB 0E |
| RRC (IX+d) | DD CB d 0E |
| RRC (IY+d) | FD CB d 0E |
| RRC A | CB 0F |
| RRC B | CB 08 |
| RRC C | CB 09 |
| RRC D | CB 0A |
| RRC E | CB 0B |
| RRC H | CB 0C |
| RRC L | CB 0D |
| RRCA | 0F |
| RRD | ED 67 |
| RST 0 | C7 |
| RST 1,addr | CF dr ad |
| RST 2,addr | D7 dr ad |
| RST 3,addr | DF dr ad |
| RST 4 | E7 |
| RST 5,addr | EF dr ad |
| RST 6 | F7 |
| RST 7 | FF |
| SBC A,(HL) | 9E |
| SBC A,(IX+d) | DD 9E d |
| SBC A,(IY+d) | FD 9E d |
| SBC A,A | 9F |
| SBC A,B | 98 |
| SBC A,C | 99 |
| SBC A,D | 9A |
| SBC A,E | 9B |
| SBC A,H | 9C |
| SBC A,L | 9D |
| SBC A,n | DE n |
| SBC HL,BC | ED 42 |
| SBC HL,DE | ED 52 |
| SBC HL,HL | ED 62 |
| SBC HL,SP | ED 72 |
| SCF | 37 |
| SET 0,(HL) | CB C6 |
| SET 0,(IX+d) | DD CB d C6 |
| SET 0,(IY+d) | FD CB d C6 |
| SET 0,A | CB C7 |
| SET 0,B | CB C0 |
| SET 0,C | CB C1 |
| SET 0,D | CB C2 |
| SET 0,E | CB C3 |
| SET 0,H | CB C4 |
| SET 0,L | CB C5 |
| SET 1,(HL) | CB CE |
| SET 1,(IX+d) | DD CB d CE |
| SET 1,(IY+d) | FD CB d CE |
| SET 1,A | CB CF |
| SET 1,B | CB C8 |
| SET 1,C | CB C9 |
| SET 1,D | CB CA |
| SET 1,E | CB CB |
| SET 1,H | CB CC |
| SET 1,L | CB CD |
| SET 2,(HL) | CB D6 |
| SET 2,(IX+d) | DD CB d D6 |
| SET 2,(IY+d) | FD CB d D6 |
| SET 2,A | CB D7 |
| SET 2,B | CB D0 |
| SET 2,C | CB D1 |
| SET 2,D | CB D2 |
| SET 2,E | CB D3 |
| SET 2,H | CB D4 |
| SET 2,L | CB D5 |
| SET 3,(HL) | CB DE |
| SET 3,(IX+d) | DD CB d DE |
| SET 3,(IY+d) | FD CB d DE |
| SET 3,A | CB DF |
| SET 3,B | CB D8 |
| SET 3,C | CB D9 |
| SET 3,D | CB DA |
| SET 3,E | CB DB |
| SET 3,H | CB DC |
| SET 3,L | CB DD |
| SET 4,(HL) | CB E6 |
| SET 4,(IX+d) | DD CB d E6 |
| SET 4,(IY+d) | FD CB d E6 |
| SET 4,A | CB E7 |
| SET 4,B | CB E0 |
| SET 4,C | CB E1 |
| SET 4,D | CB E2 |
| SET 4,E | CB E3 |
| SET 4,H | CB E4 |
| SET 4,L | CB E5 |
| SET 5,(HL) | CB EE |
| SET 5,(IX+d) | DD CB d EE |
| SET 5,(IY+d) | FD CB d EE |
| SET 5,A | CB EF |
| SET 5,B | CB E8 |
| SET 5,C | CB E9 |
| SET 5,D | CB EA |
| SET 5,E | CB EB |
| SET 5,H | CB EC |
| SET 5,L | CB ED |
| SET 6,(HL) | CB F6 |
| SET 6,(IX+d) | DD CB d F6 |
| SET 6,(IY+d) | FD CB d F6 |
| SET 6,A | CB F7 |
| SET 6,B | CB F0 |
| SET 6,C | CB F1 |
| SET 6,D | CB F2 |
| SET 6,E | CB F3 |
| SET 6,H | CB F4 |
| SET 6,L | CB F5 |
| SET 7,(HL) | CB FE |
| SET 7,(IX+d) | DD CB d FE |
| SET 7,(IY+d) | FD CB d FE |
| SET 7,A | CB FF |
| SET 7,B | CB F8 |
| SET 7,C | CB F9 |
| SET 7,D | CB FA |
| SET 7,E | CB FB |
| SET 7,H | CB FC |
| SET 7,L | CB FD |
| SLA (HL) | CB 26 |
| SLA (IX+d) | DD CB d 26 |
| SLA (IY+d) | FD CB d 26 |
| SLA A | CB 27 |
| SLA B | CB 20 |
| SLA C | CB 21 |
| SLA D | CB 22 |
| SLA E | CB 23 |
| SLA H | CB 24 |
| SLA L | CB 25 |
| SLL (HL) | CB 36 |
| SLL (IX+d) | DD CB d 36 |
| SLL (IY+d) | FD CB d 36 |
| SLL A | CB 37 |
| SLL B | CB 30 |
| SLL C | CB 31 |
| SLL D | CB 32 |
| SLL E | CB 33 |
| SLL H | CB 34 |
| SLL L | CB 35 |
| SRA (HL) | CB 2E |
| SRA (IX+d) | DD CB d 2E |
| SRA (IY+d) | FD CB d 2E |
| SRA A | CB 2F |
| SRA B | CB 28 |
| SRA C | CB 29 |
| SRA D | CB 2A |
| SRA E | CB 2B |
| SRA H | CB 2C |
| SRA L | CB 2D |
| SRL (HL) | CB 3E |
| SRL (IX+d) | DD CB d 3E |
| SRL (IY+d) | FD CB d 3E |
| SRL A | CB 3F |
| SRL B | CB 38 |
| SRL C | CB 39 |
| SRL D | CB 3A |
| SRL E | CB 3B |
| SRL H | CB 3C |
| SRL L | CB 3D |
| SUB (HL) | 96 |
| SUB (IX+d) | DD 96 d |
| SUB (IY+d) | FD 96 d |
| SUB A | 97 |
| SUB B | 90 |
| SUB C | 91 |
| SUB D | 92 |
| SUB E | 93 |
| SUB H | 94 |
| SUB L | 95 |
| SUB n | D6 n |
| XOR (HL) | AE |
| XOR (IX+d) | DD AC d |
| XOR (IY+d) | FD AC d |
| XOR A | AF |
| XOR B | A8 |
| XOR C | A9 |
| XOR D | AA |
| XOR E | AB |
| XOR H | AC |
| XOR L | AD |
| XOR n | EE n |
Kompletny opis mikroprocesora Z80 znajdziesz tutaj.
![]() |
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.