Zestaw instrukcji mikroprocesora Z80


Grupa instrukcji wywoływania i powrotów z podprogramów

 

CALL nn

      

CALL SUBROUTINE = Wywołaj podprogram

Operacja:   (SP-1) ← PCH. (SP-2) ← PCL. PC ← nn, SP ← SP - 2
Mnemonik:   CALL
Argumenty   nn

 

1 1 0 0 1 1 0 1 CD
← n → LSB
← n → MSB

Pierwszy z bajtów argumentu nn w kodzie operacyjnym instrukcji jest mniej znaczącym bajtem dwubajtowego adresu nn.

Opis:   Bieżąca zawartość Licznika Rozkazów (PC - Program Counter) jest umieszczana na szczycie zewnętrznego stosu w pamięci. Następnie argument nn jest ładowany do PC w celu wskazania komórki pamięci, w której znajduje się pierwsza instrukcja wywoływanego podprogramu. Od tej instrukcji rozpocznie się dalsze wykonywanie programu. Na końcu podprogramu można zastosować instrukcję RET (ang. RETurn - powrót z podprogramu) w celu powrotu do pierwotnego miejsca w programie przez pobranie ze szczytu stosu umieszczonego tam wcześniej adresu powrotu i załadowanie go z powrotem do rejestru licznika rozkazów PC. Umieszczenie tego adresu przez instrukcję CALL jest wykonywane przez wcześniejsze zmniejszenie bieżącej zawartości rejestru Wskaźnika Stosu (SP - Stack Pointer), załadowanie starszego bajtu zawartości rejestru PC do komórki pamięci wskazywanej teraz przez SP; następnie wskaźnik stosu SP jest ponownie zmniejszany i pod wskazywane przez niego adres jest umieszczany młodszy bajt licznika rozkazów PC - adres powrotny znajduje się zatem na szczycie stosu przy wejściu do podprogramu i z tego miejsca może go pobrać instrukcja RET.

Ponieważ jest to instrukcja trzybajtowa, licznik rozkazów PC zostaje zwiększony o 3 przed umieszczeniem go na stosie i wskazuje następną instrukcję za instrukcją CALL.

   
Cykle Takty Czas
5 17 (4,3,4,3,3) 4,25μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli licznik rozkazów PC posiada zawartość 1A47H, wskaźnik stosu SP ma zawartość 3002H, a komórki pamięci:

1A47H  zawiera 0CDH
1A48H  zawiera 35H
1A49H  zawiera 21H
 

to gdy rozpocznie się sekwencja pobrania instrukcji, trzybajtowa instrukcja 0CD3521H (CALL 2135H) zostanie pobrana do mikroprocesora w celu wykonania. W czasie tego wykonania do komórki o adresie 3001H trafi 1AH, a do komórki o adresie 3000H trafi 4AH, zawartość rejestru wskaźnika stosu SP zmieni się na 3000H, a rejestr licznika rozkazów zostanie załadowany nową zawartością 2135H, która wskazuje na kod operacyjny pierwszej instrukcji podprogramu, który teraz będzie wykonywany.

 


 

CALL cc,nn

      

CALL SUBROUTINE = Wywołaj podprogram warunkowo

Operacja:   Jeśli cc jest prawdziwe, to (SP-1) ← PCH. (SP-2) ← PCL. PC ← nn, SP ← SP - 2
Jeśli cc jest fałszywe, to PC ← PC + 3
Mnemonik:   CALL
Argumenty   cc,nn

 

1 1 cc 1 0 0  
← n → LSB
← n → MSB

Pierwszy z bajtów argumentu nn w kodzie operacyjnym instrukcji jest mniej znaczącym bajtem dwubajtowego adresu nn.

Opis:   Jeśli warunek cc jest spełniony, to bieżąca zawartość Licznika Rozkazów (PC - Program Counter) jest umieszczana na szczycie zewnętrznego stosu w pamięci. Następnie argument nn jest ładowany do PC w celu wskazania komórki pamięci, w której znajduje się pierwsza instrukcja wywoływanego podprogramu. Od tej instrukcji rozpocznie się dalsze wykonywanie programu. Na końcu podprogramu można zastosować instrukcję RET (ang. RETurn - powrót z podprogramu) w celu powrotu do pierwotnego miejsca w programie przez pobranie ze szczytu stosu umieszczonego tam wcześniej adresu powrotu i załadowanie go z powrotem do rejestru licznika rozkazów PC. Umieszczenie tego adresu przez instrukcję CALL jest wykonywane przez wcześniejsze zmniejszenie bieżącej zawartości rejestru Wskaźnika Stosu (SP - Stack Pointer), załadowanie starszego bajtu zawartości rejestru PC do komórki pamięci wskazywanej teraz przez SP; następnie wskaźnik stosu SP jest ponownie zmniejszany i pod wskazywane przez niego adres jest umieszczany młodszy bajt licznika rozkazów PC - adres powrotny znajduje się zatem na szczycie stosu przy wejściu do podprogramu i z tego miejsca może go pobrać instrukcja RET.

Ponieważ jest to instrukcja trzybajtowa, licznik rozkazów PC zostaje zwiększony o 3 przed umieszczeniem go na stosie i wskazuje następną instrukcję za instrukcją CALL.

Warunek cc jest programowany jako jeden z ośmiu stanów, które odpowiadają bitom w rejestrze znaczników F. W kodzie instrukcji stany te są przedstawiane następująco:
cc   Warunek Znacznik
000
001
010
011
100
101
110
111
  NZ - nie zero
Z - zero
NC - brak przeniesienia
C - jest przeniesienie
PO - brak parzystości
PE - parzystość
P - znak dodatni
M 0 znak ujemny
Z
Z
C
C
P/V
P/V
S
S
   
Jeśli cc jest prawdziwe   Jeśli cc jest fałszywe
Cykle Takty Czas   Cykle Takty Czas
5 17 (4,3,4,3,3) 4,25μs   3 10 (4,3,3) 2,50μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli znacznik C jest wyzerowany, licznik rozkazów PC posiada zawartość 1A47H, wskaźnik stosu SP ma zawartość 3002H, a komórki pamięci:

1A47H  zawiera 0D4H
1A48H  zawiera 35H
1A49H  zawiera 21H
 

to gdy rozpocznie się sekwencja pobrania instrukcji, trzybajtowa instrukcja 0D43521H (CALL NC,2135H) zostanie pobrana do mikroprocesora w celu wykonania. W czasie tego wykonania do komórki o adresie 3001H trafi 1AH, a do komórki o adresie 3000H trafi 4AH, zawartość rejestru wskaźnika stosu SP zmieni się na 3000H, a rejestr licznika rozkazów zostanie załadowany nową zawartością 2135H, która wskazuje na kod operacyjny pierwszej instrukcji podprogramu, który teraz będzie wykonywany.

 


 

RET

      

RETURN FROM SUBROUTINE = Wróć z podprogramu

Operacja:   PCL ← (SP), PCH ← (SP+1), SP ← SP + 2
Mnemonik:   RET
Kod operacyjny  
1 1 0 0 1 0 0 1 C9
Opis:   Bajt w komórce pamięci o adresie określonym przez zawartość wskaźnika stosu SP jest umieszczany w młodszych ośmiu bitach rejestru licznika rozkazów PC. Następnie SP jest zwiększany o 1 i kolejny bajt z pamięci wskazywany przez SP zostaje pobrany i umieszczony w starszych ośmiu bitach rejestru PC. Po pobraniu tego bajtu SP jest ponownie zwiększany o 1 i wskazuje adres o 2 większy od wartości przed wykonaniem instrukcji RET. Instrukcję tę zwykle używa się do zakończenia wykonywania programu, do którego wejście nastąpiło przy pomocy instrukcji CALL.
   
Cykle Takty Czas
3 10 (4,3,3) 2,50μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli licznik rozkazów PC (ang. Program Counter) ma zwartość 3535H, rejestr wskaźnika stosu SP (ang. Stack Pointer) ma zawartość 2000H, a komórki pamięci o kolejnych adresach 2000H i 2001H zawierają odpowiednio bajty 0B5H i 18H, to po wykonaniu instrukcji RET wskaźnik stosu zmieni się na 2002H, a rejestr licznika rozkazów otrzyma nową zawartość 18B5H, która będzie adresem następnej instrukcji do wykonania w programie.

 


 

RET cc

      

RETURN FROM SUBROUTINE = Wróć z podprogramu warunkowo

Operacja:   Jeśli cc jest prawdziwe, to PCL ← (SP), PCH ← (SP+1), SP ← SP + 2
Jeśli cc jest fałszywe, to PC ← PC + 1
Mnemonik:   RET
Argumenty   cc

 

1 1 cc 0 0 0  
Opis:   Jeśli warunek cc jest prawdziwy, to bajt w komórce pamięci o adresie określonym przez zawartość wskaźnika stosu SP jest umieszczany w młodszych ośmiu bitach rejestru licznika rozkazów PC. Następnie SP jest zwiększany o 1 i kolejny bajt z pamięci wskazywany przez SP zostaje pobrany i umieszczony w starszych ośmiu bitach rejestru PC. Po pobraniu tego bajtu SP jest ponownie zwiększany o 1 i wskazuje adres o 2 większy od wartości przed wykonaniem instrukcji RET. Instrukcję tę zwykle używa się do zakończenia wykonywania programu, do którego wejście nastąpiło przy pomocy instrukcji CALL.

Jeśli warunek cc jest fałszywy, to rejestr licznika rozkazów PC jest zwiększany jak zwykle i program wykonuje się od instrukcji za rozkazem RET.

Warunek cc jest programowany jako jeden z ośmiu stanów, które odpowiadają bitom w rejestrze znaczników F. W kodzie instrukcji stany te są przedstawiane następująco:
cc   Warunek Znacznik
000
001
010
011
100
101
110
111
  NZ - nie zero
Z - zero
NC - brak przeniesienia
C - jest przeniesienie
PO - brak parzystości
PE - parzystość
P - znak dodatni
M 0 znak ujemny
Z
Z
C
C
P/V
P/V
S
S
   
Jeśli cc jest prawdziwe   Jeśli cc jest fałszywe
Cykle Takty Czas   Cykle Takty Czas
3 11 (5,3,3) 2,75μs   1 5 1,25μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli znacznik S w rejestrze znaczników F jest ustawiony na 1, licznik rozkazów PC (ang. Program Counter) ma zwartość 3535H, rejestr wskaźnika stosu SP (ang. Stack Pointer) ma zawartość 2000H, a komórki pamięci o kolejnych adresach 2000H i 2001H zawierają odpowiednio bajty 0B5H i 18H, to po wykonaniu instrukcji RET M wskaźnik stosu zmieni się na 2002H, a rejestr licznika rozkazów otrzyma nową zawartość 18B5H, która będzie adresem następnej instrukcji do wykonania w programie.

 


 

RETI

      

RETURN FROM INTERRUPT = Wróć z przerwania maskowanego

Operacja:   Patrz: opis
Mnemonik:   RETI
Kod operacyjny  
1 1 1 0 1 1 0 1 ED
0 1 0 0 1 1 0 1 4D
Opis:   Instrukcja jest używana na końcu procedury obsługującej przerwanie maskowane, aby:
  • Przywrócić zawartość Licznika Rozkazów PC (ang. Program Counter) (analogicznie do instrukcji RET).
  • Poinformować urządzenie we/wy, że procedura obsługi przerwania została zakończona. Instrukcja RETI ułatwia również zagnieżdżanie przerwań, co pozwala urządzeniom o wyższym priorytecie chwilowo zawiesić procedury obsługi urządzeń o priorytetach niższych. Jednakże instrukcja ta nie włącza obsługi przerwań, która została wyłączona po wejściu do procedury obsługi przerwania. Przed wykonaniem instrukcji RETI należy umieścić instrukcję EI (Enable Interrupts - włącz przerwania), aby mikroprocesor mógł reagować na przerwania po powrocie z bieżącej procedury ich obsługi.
   
Cykle Takty Czas
4 14 (4,4,3,3) 3,50μs
Zmieniane znaczniki:   Żaden
Przykład:   Dane są: dwa urządzenia przerywające A i B połączone w konfiguracji szeregowej - urządzenie A posiada wyższy priorytet od urządzenia B:

B generuje przerwanie, które zostaje zaakceptowane. Wyjście zezwolenia na przerwanie IEO (Interrupt Enable Output) urządzenia B przyjmuje stan niski, blokując przerwania od wszystkich urządzeń o niższym priorytecie w czasie obsługi przerwania z urządzenia B. Następnie urządzenie A generuje przerwanie, zawieszając obsługę urządzenia B. Wyjście IEO z A przyjmuje stan niski, co oznacza, że jest obsługiwane urządzenie o wyższym priorytecie. Procedura obsługi urządzenia A kończy się i instrukcja RETI resetuje wyjście IEO urządzenia A, co pozwala kontynuować obsługiwanie urządzenia B. Po zakończeniu obsługi B wykonana zostanie druga instrukcja RETI i wyjście IEO z B zostanie zresetowane (przyjmie stan wysoki), co umożliwi dostęp do procedur obsługi urządzeniom o niższych priorytetach.

 


 

RETN

      

RETURN FROM NON MASKABLE INTERRUPT = Wróć z przerwania niemaskowanego

Operacja:   Patrz: opis
Mnemonik:   RETN
Kod operacyjny  
1 1 1 0 1 1 0 1 ED
0 1 0 0 0 1 0 1 45
Opis:   Instrukcja jest używana na końcu procedury obsługi przerwania niemaskowanego w celu przywrócenia zawartości licznikowi rozkazów PC (Program Counter) (analogicznie do instrukcji RET). Stan przerzutnika IFF2 jest kopiowany z powrotem do IFF1, aby przerwania maskowane zostały włączone natychmiast po wykonaniu instrukcji RETN, jeśli były włączone przed przyjęciem przerwania niemaskowanego.
   
Cykle Takty Czas
4 14 (4,4,3,3) 3,50μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli zawartość rejestru wskaźnika stosu SP (ang. Stack Pointer) wynosi 1000H, a licznik rozkazów PC (ang. Program Counter) zawiera adres 1A45, to gdy pojawi się sygnał przerwania niemaskowanego (NMI - Non Maskable Interrupt), mikroprocesor ignoruje kolejną instrukcję i zamiast niej wykonuje skok pod adres 0066H. Bieżąca zawartość licznika rozkazów PC, czyli 1A45H, zostaje umieszczona na zewnętrznym stosie w komórkach pamięci o adresach 0FFFH i 0FFEH - najpierw starszy bajt, następnie młodszy, a dalej do PC trafia adres 0066H. Pod tym adresem znajduje się początek procedury obsługi przerwań, która kończy się instrukcją RETN. W czasie wykonywania instrukcji RETN poprzednia zawartość rejestru licznika rozkazów PC jest pobierana z zewnętrznego stosu w pamięci, najpierw młodszy, później starszy bajt, co powoduje powrót zawartości wskaźnika stosu do wartości 1000H. Wykonywanie programu jest kontynuowane od punktu przerwania, czyli od adresu 1A45H.

 


 

RST p

      

RESTART = Wywołaj szybko podprogram

Operacja:   (SP-1) ← PCH, (SP-2) ← PCL, PCH ← 0, PCL ← p, SP ← SP -2
Mnemonik:   RST
Argumenty   p

 

1 1 t 1 1 1  
Opis:   Bieżąca zawartość Licznika Programu PC (ang. Program Counter) jest umieszczana na zewnętrznym stosie w pamięci i w to miejsce ładowany jest adres strony zerowej podany w argumencie p. Następnie wykonanie programu rozpoczyna się od adresu wskazywanego przez PC. Umieszczenie na stosie jest wykonywane najpierw przez zmniejszenie o 1 zawartości wskaźnika stosu SP (ang. Stack Pointer), a następnie przez przesłanie starszego bajtu rejestru PC pod adres wskazywany przez SP, ponowne zmniejszenie o 1 SP i umieszczenie pod adresem SP młodszego bajtu rejestru PC.

Instrukcja RST umożliwia skok pod jeden z ośmiu adresów wymienionych w poniższej tabeli. Argument p jest tłumaczony w kodzie operacyjnym instrukcji na odpowiadające mu pole t. Zaletą instrukcji RST jest 1 bajtowy kod.

p   t
00H   000
08H   001
10H   010
18H   011
20H   100
28H   101
30H   110
38H   111
   
Cykle Takty Czas
3 11 (5,3,3) 2,75μs
Zmieniane znaczniki:   Żaden
Przykład:   Jeśli Licznik Programu zawiera 15B3H, to po wykonaniu RST 18H (kod wynikowy 11011111) licznik rozkazu będzie zawierał 0018H i od tego adresu będzie kontynuowany program. Poprzednia zawartość licznika rozkazów znajduje się na stosie, skąd może być odtworzona rozkazem RET.

 

 


   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2018 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe