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 |
©2021 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 |
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: i-lo@eduinf.waw.pl
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.