Serwis Edukacyjny 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 |
©2024 mgr Jerzy Wałaszek |
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.
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
CONTENTSINTRODUCTION |
ZAWARTOŚĆWPROWADZENIE |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
INTRODUCTIONThe aim of ZX ASSEMBLER is to simplify the whole process of machine code programming on ZX81 computers. It provides comprehensive, easy for use facilities whilst retaining a surprisingly large amount of user-available RAM. The program occupies 7K and locates itself in the upper half of ROM area, so BASIC is unaffected and works the same way as if the assembler was not present at all. |
WPROWADZENIECelem 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GENERAL DESCRIPTIONThere are two main sections to the program:
This manual is intended to explain how to operate the EDITOR/ASSEMBLER and MONITOR, also giving tips and routines for beginners, and a list of Z80 instruction sets. ZX ASSEMBLER is a powerful piece of software and used correctly could increase your programming speed and ability enormously. |
OGÓLNY OPISW 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
GETTING STARTEDZX ASSEMBLER is automatically loaded when your VB81 starts. It is put into upper half of ROM area which begins at 2000 hex or 8192 decimal. This area of ZX81 memory is normally protected from writes during simulation, although you may permit such writes, but then the program code would not be safe and could get corrupted. Set this option only when you do not plan to use your assembler. To run the program you must type: RAND USR 8192 - then the program will introduce itself. You are now in the COMMAND MODE of the ASSEMBLER. All commands are initiated with SINGLE KEY press from here. To return to BASIC type Q(QUIT) twice. There is a fine feature in version 2 of ZX ASSEMBLER. If you invoke it by: LET S=USR 8192 then S will contain the start address of your assembled code on return to BASIC. If you do not assemble the code, then S will point to ZX ASSEMBLER entry. |
ZACZYNAMYZX 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ć: RAND USR 8192 - program krótko się przedstawi. Jest to TRYB ROZKAZÓW dla ASEMBLERA. Wszystkie rozkazy są uruchamiane z tego miejsca przez POJEDYNCZE NACIŚNIĘCIE KLAWISZA. Aby powrócić do systemu BASIC, wpisz dwukrotnie Q (QUIT = REZYGNACJA). W wersji 2 ZX ASEMBLERA dodano funkcję zwracania adresu startowego kodu. Jeśli wywołasz asembler w sposób następujący: LET S=USR 8129 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SAVING PROGRAMSTo SAVE a complete or incomplete program, press Q twice to return to BASIC. You will find a two line BASIC program, plus any other that you have entered. 1 REM Line 1 contains the machine code. Line 2 contains the assembly language (be careful when using renumbering feature of VB81 - the numbers for these lines should always be 1 and 2). You may wish at this point to delete either line as necessary and to SAVE the remaining program in the usual way (it will be saved to tape directory set in VB81). At any time with ASSEMBLER in ROM you may load this program back again to finish or continue your work. If you have not finished your program, you can delete the object code (line 1) and SAVE only the source code. However it is best to SAVE a backup tape containing only the source code for future amendments. |
ZAPIS PROGRAMÓWAby 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 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
THE EDITORWhen you invoke the EDITOR by pressing E key, a screen of text entered so far is displayed. This will be either at the place where you last left the EDITOR or from an error during Assembling (SEE ASSEMBLING). The EDITOR provides the user with several functions apart from simply entering text. All the functions are obtained with the SHIFT Key held down |
EDYTORGdy 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Functions:Press: SHIFT 6 to move the cursor down.SHIFT 7 to move the cursor up. SHIFT 8 to move the cursor right. SHIFT 5 to move the cursor left. SHIFT 0 to RUBOUT the last character. SHIFT 9 to INSERT a character at current position. SHIFT A to enter a LABEL. Moves cursor to extreme left of screen. Only works if cursor is in 7th character position and if no label is there yet. SHIFT D DELETES current line. SHIFT E INSERTS a line at current cursor position. SHIFT G prints text from cursor position onto ZX Printer. SHIFT Q QUITS from Search, Line or Editor. Suppose you make an error in a line, SHIFT Q restores a line to its original state. SHIFT S SEARCH for a string from cursor position. Press SHIFT A to search for a label. If not found cursor is left in the same position. SHIFT T moves the cursor to the top of the text. |
Funkcje:Naciśnij: SHIFT 6, aby przesunąć kursor w dół.SHIFT 7, aby przesunąć kursor w górę. SHIFT 8, aby przesunąć kursor w prawo. SHIFT 5, aby przesunąć kursor w lewo. SHIFT 0, aby wymazać ostatni znak. SHIFT 9, aby wstawić znak na bieżącej pozycji. SHIFT A, aby wstawić etykietę. Przesuwa kursor do lewej krawędzi ekranu. Dzieła jedynie wtedy, gdy kursor znajduje się na 7-mej pozycji znakowej i w wierszu nie ma jeszcze etykiety. SHIFT D usuwa bieżący wiersz. SHIFT E wstawia wiersz na bieżącej pozycji kursora. SHIFT G drukuje tekst na drukarce ZX Printer od bieżącej pozycji kursora. SHIFT Q przerywa wyszukiwanie, przywraca wiersz oraz wychodzi z edytora. Załóżmy, iż w wierszu popełnisz błąd, SHIFT Q przywróci oryginalną postać tego wiersza. SHIFT S szuka wystąpienia tekstu od pozycji kursora. Naciśnij SHIFT A, aby wyszukać etykietę. Jeśli obiekt nie zostanie znaleziony, to kursor pozostaje na swojej pozycji. SHIFT T umieszcza kursor na początku tekstu |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
There is an AUTO REPEAT on all keys
after 1 second. The EDITOR allows a maximum of 31 characters per line. If you run out of memory, you will return to COMMAND MODE, and an OUT OF MEMORY message will appear: the line you have just typed will have been deleted so that you can return to the EDITOR to squeeze things up! If a label is to be changed, SHIFT A won't move the cursor to the left, so use CURSOR LEFT. |
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 SHIFT A nie przesunie kursora w lewo, zamiast tego użyj SHIFT 5. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SYNTAX OF ASSEMBLEROnce the program has introduced itself, you have the choice of several commands for the monitor, but we shall first examine the Editor/Assembler. To enter the Editor you type E. The screen will clear and display a graphic space, seven characters in from the left hand side of the screen. You are now ready to enter your Assembly Language. |
SKŁADNIA ASEMBLERAPo 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LABELSThe Assembler will accept labels of any string of letters or numbers starting with a letter immediately followed by:
To enter a label, type SHIFT A and the cursor will move to the extreme left hand side of the screen. This gives the effect of indenting the Assembly language and making it easier to read. Example: Score routine SCORE1 = 5000 JR BEGIN ;jump to beginning. SCORE DB 00,00 ;save two bytes for score. BEGIN LD HL,(SCORE) ;get the contents of score. INC HL ;increment it LD (SCORE),HL ;store new score LD (SCORE1),HL ;store copy of score at 5000 HEX RET A label may be accessed with an offset of -9 to +9 e.g. LD A,(PTR+4) ... PTR DB 1,2,3,4,5,6 A will have te value 5. If no offset specified, assume it is zero. A = 1 N.B. It is advisable not to use a label with the same name as a register e.g. BC or as a legal number e.g. ABCD as you will either have error message on relative jumps or potentially disastrous consequences. |
ETYKIETYAsembler 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 SHIFT A a kursor przesunie się do lewej krawędzi ekranu. Otrzymujemy w ten sposób efekt wcięć w wierszach asemblera, które ułatwiają ich odczytywanie. 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
TEXTIf you want to put some text into your assembler program then you use DEFM/DM directive. The text itself must be enclosed within speech marks (SHIFT P or normal " key in VB81). Example: Print a message CALL PRINT DM "HERE WE ENTER TEXT" DB FF ;we mark the end of text Example: Text in Assembly language LD A,0 ;get initial value CHECK INC A ;add 1 to it CP "*" ;check for * JR NZ CHECK ;if not goto check CALL PRINTA ;print character CALL PRINT ;print text DM " IS A * SIGN" DB FF Hence it is not necessary to know the character codes. |
TEKSTJeśli chcesz wstawić jakiś tekst do swojego programu w asemblerze, to użyj dyrektywy DEFM/DM. Sam tekst musi być umieszczony w cudzysłowach (SHIFT P lub klawisz " w VB81). 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. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NUMBERSThe Assembler defaults to HEXadecimal (base 16) 8 bit numbers 0 to FF Decimal numbers must also be used with a '+' or '-' sign. They will always be 16 bit numbers. e.g. +1 is represented by 0001. The Assembler is intelligent in many respects, in that it treats a number, wherever possible, as an 8 bit or 16 bit, including decimal, when needed. Example: label loads TEST = +64 LD HL,TEST ; 16 bit expected LD A,TEST ; 8 bit expected The label TEST is treated as a 16 bit and 8 bit number where indicated. If however the Assembler expects an 8 bit number when the number is greater than FF or +255, a NUMBER ERROR will be reported when Assembling. Example: Numbers LD HL,1 ;OK LD A,+13 ;OK LD A,101 ;Error When you wish to load a register with a number, which is also a register, you must prefix the number with a 0. Example LD A,B ;stores register B in A LD A,0B ;stores number B in A If you want to store numbers within your code then use DEFB/DB directive for 8 bit numbers and DEFW/DW directive for 16 bit numbers. Each one of these directives takes multiple numbers as parameters separated with commas. Examples: Numbers in memory TAB1 DB +15,+24,-43,0 ; 8 bit numbers TAB2 DW FA99,+16333,+25872 ;16 bit numbers To reserve some space within memory, say a 100 bytes, for any purpose, use DEFS/DS directive. Example: BUF DS 100 ;100 bytes for you to use at BUF |
LICZBYAsembler standardowo używa liczb szesnastkowych (o podstawie 16) 8 bitowych od 0 do FF 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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SEPARATORSEach instruction may be separated by spaces or end of line. Spaces may be replaced by multiple spaces with the exception of the following instructions, which must be entered exactly as below. LDA_A,I _ space LDA_I,A LDA_R,A LDA_A,R EX_AF ≡ EX AF,AF' EX_DE,HL EX_(SP),HL |
SEPARATORYKaż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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NON STANDARD MNEMONICSThe following mnemonics are not standard Z80EX AF ≡ EX AF,AF' IM0 instead of IM 0 IM1 instead of IM 1 IM2 instead of IM 2JP and JR have NO commas, e.g. JR NZ +7 |
NIESTANDARDOWE MNEMONIKINastępujące mnemoniki są niestandardowe dla Z80EX AF ≡ EX AF,AF' IM0 zamiast IM 0 IM1 zamiast IM 1 IM2 zamiast IM 2Instrukcje JP i JR nie mają przecinków, np. JR NZ +7 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COMMENTSComments must be preceded with a semi colon ; text after this will be ignored by the Assembler. |
KOMENTARZEKomentarze należy poprzedzać średnikiem ;. Tekst za nim zostanie zignorowany przez Asembler. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
ASSEMBLINGOnce you have typed in your Assembly language, you are now ready to Assemble it. Exit from the Editor using SHIFT Q.To assemble your program, type A and ASSEMBLE will be printed. Now press NEWLINE and your program will be Assembled. The program is Assembled to start at address 4084 HEX or 16516 DECIMAL. This is REM line 1 when you return to BASIC. If you entered the ASSEMBLER by command LET S=USR 8192 then S contains the start of your code on return to BASIC. To run it, use RAND USR S You may use ORG n directive at the beginning of your code to produce the code to be run at address n. The code would still be assembled into line 1, but you may move it with Assembler's COPY command to its destination. If you make make an error, an error message will be printed. Typing E will display the text from the line at which the error occurred. The error messages you may get are the following: |
ASEMBLACJAPo wprowadzeniu swojego kodu w asemblerze jesteś gotowy do przeprowadzenia jego asemblacji. Wyjdź z edytora używając SHIFT Q.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 ORG n, aby utworzyć kod uruchamiany pod adresem n. Kod wciąż zostanie umieszczony przez asembler w wierszu nr 1, lecz możesz go przenieść w miejsce docelowe przy pomocy rozkazu COPY dostępnego w Asemblerze. 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: |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
LABEL ERROR
|
BŁĄD ETYKIETY
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RELATIVE JUMP ERRORThis occurs if the relative jump is out of range, i.e. the jump is > +127 or < -128 bytes. |
BŁĄD SKOKU WZGLĘDNEGOWystępuje przy skoku względnym poza dozwolony zasięg, tj. skok jest do adresu odległego o > +127 lub < -128 bajtów. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OFFSET ERROR
|
BŁĄD PRZESUNIĘCIA
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
NUMBER ERRORThis error is reported when you try to use a number too large for the relevant instruction.e.g. LD A,1000 |
BŁĄD LICZBYPowstaje, gdy próbujesz użyć zbyt dużej liczby dla danej instrukcji.np. LD A,1000 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
OUT OF MEMORY
|
BRAK PAMIĘCI
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
STACK ERRORAt the end of execution when too much has been taken or left on the stack. (See following notes). |
BŁĄD STOSUNa końcu wykonania gdy ze stosu pobrano lub pozostawiono na nim zbyt wiele (zobacz na następne uwagi). |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
SYNTAX ERRORReporting all other errors.e.g. ADD A,*While developing routines it is not necessary to put RET at the end of your routine, as the Assembler ends the routine with a Jump to the Monitor. This means if there is a Stack error, the system will not crush. The RET at the end of your program returns you to BASIC. To RUN your routine, press 'R' RUN FROM ADDR 4084 will be displayed. Press NEWLINE to run to your routine. The default address is 4084 (the beginning of the machine code routine). This may be changed by typing in any address. NOTE ** If an error is reported during assembly, the program can NOT be RUN as it may be partly assembled, or not at all ! |
BŁĄD SKŁADNIZgłasza wszystkie pozostałe błędy.np. ADD A,*Podczas pracy nad procedurami nie ma konieczności umieszczania RET na końcu twojego programu, ponieważ Asembler kończy procedurę skokiem do Monitora. Oznacza to, że jeśli występuje błąd Stosu, to system się nie zawiesi. RET na końcu twojego programu powraca do systemu BASIC. Aby uruchomić swój program maszynowy, naciśnij 'R', a pojawi się napis RUN FROM ADDR 4084 (URUCHOMIENIE SPOD ADRESU 4084 - początek procedury w kodzie maszynowym). Naciśnij NEWLINE, aby uruchomić swój kod maszynowy. Ten adres startowy można zmienić wpisując go ręcznie. UWAGA: Jeśli został zgłoszony błąd podczas kompilacji, to program nie może zostać uruchomiony, ponieważ jest tylko częściowo skompilowany albo wcale! |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
MONITORZX ASSEMBLER also provides a useful Monitor to enable you to test, de-bug and run your machine code programs, All commands are initiated with SINGLE KEY - press and many may need a 4 digit HEX address. Press NEWLINE to enter this address. Any entry may be aborted by pressing Q before NEWLINE
|
MONITORZX ASEMBLER udostępnia również użyteczny Monitor, który pozwala ci testować, wyszukiwać błędy i uruchamiać twoje programy w kodzie maszynowym. Wszystkie rozkazy są dostępne po POJEDYNCZYM naciśnięciu określonego klawisza a wiele z nich może dodatkowo wymagać szesnastkowego adresu 4 cyfrowego. Aby wprowadzić ten adres, naciśnij NEWLINE. Każdy rozkaz można anulować naciskając Q przed wciśnięciem NEWLINE. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
COMMANDS
|
ROZKAZY
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
USEFULL ASSEMBLER SUBROUTINESBelow there are some simple routines which you can use in your own machine code programs. The code is well commented.Get the tape file: library.p with these routines for use with ZX ASSEMBLER 2
INKEY PUSH BC ;save used registers PUSH DE PUSH HL LD BC,(4025) ;load keyboard scan codes LD D,C ;check if any key is pressed INC D LD A,1 ;assume no JR Z INK1 ;if none then skip the ROM call CALL 07BD ;decode the scan code LD A,(HL) ;fetch the key code INK1 POP HL ;restore registers POP DE POP BC RET ;and return with code in A FILL PUSH BC ;save used registers PUSH HL LD HL,(400C) ;point HL at DFILE INC HL ;skip starting NEWLINE LD C,18 ;24 lines to fill FILL1 LD B,20 ;each with 32 A characters FILL2 LD (HL),A ;fill one line INC HL DJNZ FILL2 LD (HL),+118 ;put NEWLINE at the end of each line INC HL ;move to the next line DEC C ;if not done then continue JR NZ FILL1 ;with the rest of the screen POP HL ;restore registers POP BC RET ;and return PRDE CALL ATDE ;calculate DE position in HL POP DE ;point DE at the start of text PRDE1 LD A,(DE) ;fetch a character INC DE ;move to next position in text CP FF ;is it the end of text? JR NZ PRDE2 ;continue if not EX DE,HL ;else jump just after JP (HL) ;the end marker PRDE2 LD (HL),A ;send character to DFILE INC HL ;move at the next position JR PRDE1 ;continue printing ATDE PUSH BC ;save used registers 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 ;restore registers POP BC RET ;return with the address in HL |
UŻYTECZNE PROCEDURY W ASEMBLERZEPoniżej przedstawiam kilka prostych procedur, których możesz używać w swoich programach asemblerowych. Ich kod jest dobrze skomentowany.Pobierz plik taśmy: library.p zawierający te procedury do użycia z programem ZX ASEMBLER 2
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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
HINTS FOR THE BEGINNERDON'T PANIC!!!Machine code is not a mysterious art practiced by ice-cool whizz kids with electrons coursing through their veins, it is just another means of programming like BASIC. You must be more careful than with BASIC as there are no error messages when you actually execute a program. If you make bad mistakes, the usual result is the system Crushing. However, using the Assembler an Monitor and following a few simple rules, you will soon be able to write, debug and successfully execute machine code. |
WSKAZÓWKI DLA POCZĄTKUJĄCYCHNIE WPADAJ W PANIKĘ!!!Kod maszynowy nie jest tajemniczą sztuką uprawianą przez dzieci-geniusze, w których żyłach zamiast krwi płyną elektrony, jest to po prostu inny sposób programowania komputerów, tak jak BASIC. Musisz być bardziej ostrożny niż z BASIC'em, ponieważ przy uruchamianiu kodu maszynowego nie pojawią się komunikaty błędów. Jeśli zrobisz grubą pomyłkę, to zwykle system się zawiesi. Jednakże wykorzystując Asembler i Monitor oraz przestrzegając kilku prostych reguł, wkrótce będziesz mógł pisać, testować i uruchamiać z sukcesem kod maszynowy. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RULES
|
REGUŁY
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
RECOMMENDED BOOKSMachine Language programming made simple for your Sinclair.Understanding your ZX81 ROM, Melbourne House Programming the Z80, Rodney Zaks, Sybex Z80 Instruction Handbook, Intel |
POLECANA LITERATURAW języku polskim tylko nasz serwis edukacyjny. 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 |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Z80 INSTRUCTION SET
|
ZESTAW ROZKAZÓW MIKROPROCESORA Z80
|
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 LY,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 7B nnLO 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 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 ©2024 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.