« poprzedni punkt | następny punkt » |
Liczba rozkazów popularnych mikroprocesorów waha się od kilkudziesięciu do kilkuset. Rozkazy można podzielić na 5 grup:
Rozkazy przesłań umożliwiają przesyłanie słów pomiędzy rejestrami, a także pomiędzy rejestrami i pamięcią. W tabeli XIII.1 przedstawiono wybrane rozkazy przesłań mikroprocesora Z-80.
MNEMONIK |
KOD OPERACYJNY |
B |
C |
OPIS DZIAŁANIA |
LD r,s |
01rrrsss |
1 |
1 |
Do rejestru rrr jest zapisywana zawartość rejestru sss. |
LD r,n |
00rrr110 |
2 |
2 |
Do rejestru rrr jest zapisywany bajt argumentu natychmiastowego n. |
LD r,(HL) |
01rrr110 |
1 |
2 |
Do rejestru rrr jest zapisywana zawartość pamięci o adresie zawartym w HL. |
LD A,(nn) |
0011 1010 |
3 |
4 |
Do rejestru A jest zapisywana zawartość komórki pamięci o adresie bezpośrednim nn. |
LD (HL),r |
0111 0rrr |
1 |
2 |
Do komórki pamięci o adresie zawartym w HL jest wpisywana zawartość rejestru rrr. |
LD (nn),A |
0011 0010 |
3 |
4 |
Do pamięci o adresie nn jest wpisywana zawartość rejestru akumulatora A. |
LD pp,nn |
00pp 0001 |
3 |
4 |
Do pary rejestrów pp jest wpisywany szesnastobitowy argument natychmiastowy nn. |
Tabela XIII.1. Niektóre rozkazy przesłań mikroprocesora Z-80
W tabeli przyjęto następujące oznaczenia. MNEMONIK to symboliczne oznaczenie rozkazu, które jest czytelne dla programu tłumaczącego, czyli tzw. programu asemblera. Program tłumaczący zamienia stosowane przez programistę mnemoniki na słowa dwójkowe. Każda kombinacja 8 bitów jest interpretowana przez układ sterujący mikroprocesora. Pierwsze słowo rozkazu jest to jego KOD OPERACYJNY. Po nim rozkaz może zawierać argumenty albo adresy argumentów.
Znaczenie cyfr w kolumnach B i C (liczba bajtów i liczba cykli) zostanie wytłumaczone niżej.
Rejestry mikroprocesora są oznaczane w rozkazie trzema bitami rrr lub sss, a para rejestrów dwoma bitami pp. Bajt argumentu oznaczany jest literą n. Bajt ten jest nazywany argumentem natychmiastowym i jest umieszczany w programie jako następny bajt po kodzie operacyjnym. Dwa bajty adresu argumentu oznaczone przez nn są umieszczane w programie jako następne bajty po kodzie operacyjnym. Jest to tzw. adres bezpośredni.
W tabeli XIII.2 przedstawiono wybrane rozkazy arytmetyczno-logiczne służące do wykonania operacji arytmetycznych i operacji logicznych.
MNEMONIK |
KOD OPERACYJNY |
B |
C |
OPIS DZIAŁANIA |
ADD A,r |
1000 0rrr |
1 |
1 |
A = A + rrr |
ADD A,n |
1100 0110 |
2 |
2 |
A = A + n |
SUB r |
1001 0rrr |
1 |
1 |
A = A - rrr |
SUB n |
1101 0110 |
2 |
2 |
A = A - rrr |
OR r |
1011 0rrr |
1 |
1 |
A = A or rrr |
OR n |
1111 0110 |
2 |
2 |
A = A or n |
AND r |
1010 0rrr |
1 |
1 |
A = A and rrr |
AND n |
1110 0110 |
2 |
2 |
A = A and n |
XOR r |
1010 1rrr |
1 |
1 |
A = A sum2 rrr |
XOR n |
1110 1110 |
2 |
2 |
A = A sum2 n |
INC r |
00rr r100 |
1 |
1 |
rrr = rrr + 1 |
DEC r |
00rr r101 |
1 |
1 |
rrr = rrr - 1(dekrementacja) |
Tabela XIII.2. Wybrane rozkazy arytmetyczno-logiczne mikroprocesora Z-80
MNEMONIK |
KOD OPERACYJNY |
B |
C |
OPIS DZIAŁANIA |
JP nn |
1100 0011 |
3 |
3 |
PC jest zapisywany argumentem bezpośrednim nn (skok pod adres nn) |
JP c,nn |
11cc c010 |
3 |
3 |
Jeżeli jest spełniony warunek c, to jest wykonywany skok pod adres nn |
CALL nn |
1100 1101 |
3 |
5 |
PC jest zapisywany na stos, do PC wpisuje się nn (wywołanie podprogramu od adresu nn) |
RET |
1100 1001 |
1 |
3 |
PC jest zapisywany wartością zdjętą ze stosu (powrót z podprogramu) |
Tabela XIII.3. Rozkazy sterujące mikroprocesora Z-80
W tabeli XIII.3 przedstawiono rozkazy sterujące. Rozkazy sterujące stwarzają możliwość odczytania innej komórki pamięci niż wynika to z kolejności umieszczenia rozkazów w programie. Pozwala to programiście na sięgnięcie do innej części pamięci celem wywołania innego programu lub odczytania argumentów. Rozkazy sterujące to tzw. rozkazy skoku. Za pomocą tych rozkazów można do licznika rozkazów PC zapisać nowy adres. Adres ten ustala programista zapisując go w programie. Skoki mogą być bezwarunkowe (wykonywane są zawsze po ich odczytaniu) i mogą być warunkowe (wykonywane są tylko wtedy jeśli warunek umieszczony przez programistę jest spełniony). Warunkami rozkazów skoków są bity rejestru znaczników. Przykładowo może być rozkaz JP NZ (skok jeśli NON-Z czyli nie zero). Rozkaz ten wykonuje się tylko wtedy gdy znacznik zera Z jest równy 0. W przeciwnym przypadku rozkaz ten jest pomijany przez program.
Rozkazy wejścia-wyjścia służą do tego aby umożliwić przesłania pomiędzy rejestrami mikroprocesora i urządzeniami zewnętrznymi. Proste urządzenia zewnętrzne dołączane są do magistrali systemowej przez tzw. porty lub inaczej rejestry wejścia-wyjścia z odpowiednim sterowaniem. Bardziej złożone urządzenia dołączane są do magistrali systemowej przez bardziej złożone układy, tzw. sterowniki. W obu przypadkach komunikacja pomiędzy procesorem i urządzeniami odbywa się za pomocą rozkazów wejścia-wyjścia.
MNEMONIK |
KOD OPERACYJNY |
B |
C |
OPIS DZIAŁANIA |
IN A,(n) |
1101 1011 |
2 |
3 |
Do akumulatora A jest wpisywana dana z wejścia o adresie n |
OUT (n),A |
1101 0011 |
2 |
3 |
Do rejestru wyjścia o adresie n jest wpisywana zawartość akumulatora A |
Tabela XIII.4. Rozkazy wejścia-wyjścia mikroprocesora Z-80
W tabeli XIII.4 przedstawiono dwa rozkazy wejścia-wyjścia: rozkaz odczytu zawartości portu o podanym adresie (IN ) i rozkaz zapisu portu o podanym adresie (OUT).
Inne rozkazy mikroprocesora Z-80 to:
NOP - nic nie rób,
HALT - zatrzymaj pracę procesora,
EI - uaktywnij system przerwań,
DI - dezaktywuj system przerwań.
Dany rozkaz może być wykonywany w różny sposób, w zależności od tego gdzie znajdują się jego argumenty. Załóżmy operację dwuargumentową jaką np. jest operacja dodawania. Jeden z argumentów zawsze jest w rejestrze. Drugi argument może też być w rejestrze lub w rejestrze może być jego adres. Argument ten może być także w programie lub w programie może być jego adres. Wymienione 4 powyższe przypadki nazywane są trybami adresowania. Jeśli argument jest w rejestrze, to mówimy o trybie adresowania rejestrowym. Jeśli adres argumentu jest w rejestrze, to mówimy o trybie adresowania rejestrowym pośrednim. Jeśli argument jest w programie i został umieszczony w następnej komórce pamięci za kodem operacyjnym rozkazu, to mówimy o trybie adresowania natychmiastowym. Jeśli adres argumentu jest w programie i został umieszczony w następnej komórce pamięci za kodem operacyjnym rozkazu (lub następnych komórkach), to mówimy wtedy o trybie adresowania bezpośrednim.
Rozpatrzmy teraz jak tryb adresowania wpływa na format rozkazu. Weźmy przykładowy rozkaz dodawania, który ma symbol mnemoniczny ADD. Kod operacyjny rozkazu jest ośmiobitowy i wskazuje zarówno na operację jak i na tryb adresowania. Jednym z argumentów rozkazu jest zawartość akumulatora i tam też jest przesyłany wynik. Drugi argument zależy od trybu adresowania. W trybie adresowania rejestrowym trzy najmniej znaczące bity kodu operacyjnego wskazują na rejestr (jeden z 6), gdzie znajduje się drugi argument. W trybie adresowania natychmiastowym trzy najmniej znaczące bity kodu operacyjnego przyjmują wartość 110. Gdy układ sterowania mikroprocesora wykryje ten przypadek, to następne słowo w programie po słowie kodu operacyjnego interpretuje jako argument, a nie kod operacyjny następnego rozkazu. W trybie adresowania rejestrowym pośrednim kod operacyjny zawiera wskazanie na parę rejestrów, gdzie znajduje się adres argumentu. Mogą to być rejestry BC, DE lub HL. W trybie adresowania bezpośrednim dwa następne słowa po słowie kodu operacyjnego są traktowane jako adres argumentu.
Rysunek XIII.3. Formaty rozkazów mikroprocesora Z-80
Na rysunku XIII.3 pokazano formaty rozkazu dla różnych trybów adresowania. Widać, że w trybie adresowania rejestrowym rozkaz jest jednobajtowy, w trybie adresowania natychmiastowym jest dwubajtowy, w trybie adresowania pośrednim jest jednobajtowy i w trybie adresowania bezpośrednim jest trzybajtowy. W tabelach rozkazów (tabele XIII.1 - XIII.4) w kolumnie B podano liczbę bajtów dla wymienionych rozkazów.
Postawmy teraz pytanie ile razy procesor sięga do pamięci w każdym z tych trybów adresowania. W trybie adresowania rejestrowym wystarczy jeden dostęp do pamięci (odczyt kodu operacyjnego). W trybie adresowania natychmiastowym potrzeba dwóch dostępów (odczyt kodu operacyjnego i odczyt argumentu). W trybie adresowania pośrednim potrzeba dwóch dostępów (odczyt kodu operacyjnego i odczyt argumentu). W trybie adresowania bezpośrednim potrzeba czterech dostępów (odczyt kodu operacyjnego, odczyt pierwszego bajtu adresu, odczyt drugiego bajtu adresu i odczyt argumentu). Każdy dostęp do pamięci mikroprocesor wykonuje w tzw. cyklu maszynowym. Czas wykonania każdego rozkazu jest wielokrotnością czasu trwania cyklu maszynowego i nazywany jest cyklem rozkazowym lub instrukcyjnym. W tabelach rozkazów (tabele XIII.1 - XIII.4) w kolumnie C podano liczbę cykli maszynowych dla wymienionych rozkazów.
« poprzedni punkt | następny punkt » |