Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

Tłumaczenie: mgr Jerzy Wałaszek

©2024 mgr Jerzy Wałaszek
I LO w Tarnowie

Instrukcje mikroprocesora – 6

SPIS TREŚCI

Instrukcje mikroprocesora – 6

Skoki, wywołania podprogramów i powroty z podprogramów

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
                 

Restarty

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

Na początek:  podrozdziału   strony 

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: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.