Serwis Edukacyjny w I-LO w Tarnowie Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Tłumaczenie: mgr Jerzy Wałaszek |
©2024 mgr Jerzy Wałaszek |
Tablica 17 wymienia wszystkie instrukcje skoków, wywołań podprogramów i powrotów z podprogramów, które zostały zaimplementowane w mikroprocesorze Z80. Skok jest odgałęzieniem w programie, gdzie licznik programu zostaje załadowany wartością 16-to bitową określoną przez jeden z trzech dostępnych trybów adresowania (natychmiastowy rozszerzony, względny i pośredni rejestrowy).
Zwróć uwagę, że grupa skoków posiada kilka warunków, które można określić przed wykonaniem skoku. Jeśli warunki te nie zostaną spełnione, program po prostu wykonuje się od następnej instrukcji za rozkazem skoku. Warunki te są uzależnione od danych w rejestrze znaczników. Adresowanie natychmiastowe rozszerzone wykorzystywane jest do wykonania skoku w dowolne miejsce w obszarze pamięci. Instrukcja ta wymaga trzech bajtów (kodu operacji oraz dwóch do określenia 16-to bitowego adresu - bajt młodszy adresu jest umieszczony przed bajtem starszym).
Na przykład bezwarunkowy skok do komórki pamięci 3E32H
ma postać:
Adres A | C3 | }- kod operacyjny |
A + 1 | 32 | }- młodszy bajt adresu |
A + 2 | 3E | }- starszy bajt adresu |
Instrukcja skoku względnego używa jedynie dwóch bajtów, gdzie drugi z nich
jest przesunięciem w kodzie U2 od bieżącej wartości rejestru licznika rozkazów
PC
. Przesunięcie to może być w zakresie od +129 do -126 i jest mierzone
od adresu kodu operacyjnego instrukcji.
Dostępne są również trzy rodzaje skoków pośrednich rejestrowych. Instrukcje
te zaimplementowano poprzez przesyłanie pary HL
lub jednego z
rejestrów indeksowych IX
lub IY
bezpośrednio do
rejestru licznika rozkazów PC
. Cecha ta pozwala na wykonanie tzw.
skoku wyliczanego.
Wywołanie podprogramu jest specjalnym rodzajem skoku, gdzie adres bajtu
umieszczonego zaraz za instrukcją wywołania jest zapisywany na stosie przed
wykonaniem samego skoku. Instrukcja powrotu z podprogramu jest odwrotnością
wywołania, ponieważ dane ze szczytu stosu są pobierane bezpośrednio do PC
,
aby utworzyć adres skoku. Instrukcje wywołań i powrotów umożliwiają w prosty
sposób tworzenie procedur oraz obsługę przerwań. W rodzinie Z80 istnieją dwie
specjalne instrukcje powrotu z przerwania (RETI
)
oraz powrotu z przerwania niemaskowanego (RETN
).
Są one traktowane przez mikroprocesor jako instrukcje powrotów bezwarunkowych,
identyczne jak instrukcja RET
z kodem operacyjnym C9H
.
Różnica jest taka, iż (RETI
) może zostać
użyte na końcu procedury obsługującej przerwanie, a wszystkie układy peryferyjne
rodziny Z80 rozpoznają jej wykonanie w celu właściwego sterowania obsługą
zagnieżdżonych przerwań priorytetowych. Instrukcja ta w połączeniu z
implementacją urządzeń peryferyjnych Z80 upraszcza zwykły powrót z
zagnieżdżonego przerwania. Bez tej cechy, konieczna jest następująca sekwencja
instrukcji w celu poinformowania przerywającego urządzenia o zakończeniu
procedury obsługi przerwania:
DI | ; Zablokuj przerwania w celu zapobieżenia im przed wykonaniem procedury |
... | ; Obsłuż przerwanie |
LD A,n | ; Poinformuj urządzenie peryferyjne o zakończeniu |
OUT n,A | ; procedury obsługującej przerwanie |
EI | ; Włącz przerwania |
RET | ; Powrót z procedury obsługi przerwań |
Ten siedmiobajtowy kod można zastąpić w Z80 przez jednobajtową instrukcję
EI
oraz dwubajtową instrukcję RETI
. Jest to ważne, ponieważ
często procedura obsługi przerwania musi być minimalizowana.
Instrukcja DJNZ
jest stosowana do ułatwienia sterowania pętlą.
Ta dwubajtowa instrukcja skoku względnego zmniejsza o 1 rejestr B
i
skok jest wykonywany, jeśli B
nie został zmniejszony do 0. Względne
przesunięcie wyrażane jest jako liczba ze znakiem w kodzie U2. Prosty przykład
użycia jest taki:
Adres | Instrukcja | Komentarz |
N,N+1 | LD B,7 | ; ustaw licznik B na 7 |
N+2 do N+9 | (wykonaj ciąg instrukcji) | ; pętla będzie wykonana 7 razy |
N+10,N+11 | DJNZ -8 | ; skocz z N+12 do N+2 |
N+12 | (następna instrukcja) |
Tablica 17. Grupa operacji skoków, wywołań podprogramów i powrotów z podprogramów
Warunek | ||||||||||||
Bez war. |
C | NC | Z | NZ | PE | PO | M | P |
Rej. B≠0 |
|||
Skok JP |
Natychm. rozszerz. |
nn |
C3 n n |
DA n n |
D2 n n |
CA n n |
C2 n n |
EA n n |
E2 n n |
FA n n |
F2 n n |
|
Skok JR |
Względny | PC+e |
18 e-2 |
38 e-2 |
30 e-2 |
28 e-2 |
20 e-2 |
|||||
Skok JP |
Pośredni rejestrowy |
(HL) | E9 | |||||||||
(IX) |
DD E9 |
|||||||||||
(IY) |
FD E9 |
|||||||||||
Wywołanie CALL |
Natychm. rozszerz. |
nn |
CD n n |
DC n n |
D4 n n |
CC n n |
C4 n n |
EC n n |
E4 n n |
FC n n |
F4 n n |
|
Pętla DJNZ |
Względny | PC+e |
10 e-2 |
|||||||||
Powrót RET |
Pośredni rejestrowy |
(SP) (SP+1) |
C9 | D8 | D0 | C8 | C0 | E8 | E0 | F8 | F0 | |
Powrót z przerw. RETI |
ED 4D |
|||||||||||
Powrót z przerw. niem. RETN |
ED 45 |
Tablica 18 wymienia osiem kodów operacyjnych dla instrukcji restartów. Instrukcja ta jest jednobajtowym wywołaniem procedury umieszczonej pod jednym z podanych adresów. Podany jest również mnemonik dla każdego z tych wywołań. Instrukcja ta jest użyteczna dla często wywoływanych w programie procedur, ponieważ wtedy zmniejszone zostaje zużycie pamięci.
Tablica 18. Grupa operacji restartów
Kod operacji |
Mnemonik | ||
Adres wywołania |
0000H | C7 | RST 0 |
0008H | CF | RST 8 | |
0010H | D7 | RST 16 | |
0018H | DF | RST 24 | |
0020H | E7 | RST 32 | |
0028H | EF | RST 40 | |
0030H | F7 | RST 48 | |
0038H | FF | RST 56 |
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.