Serwis Edukacyjny
nauczycieli

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

©2026 mgr Jerzy Wałaszek

Opis instrukcji mikroprocesora Z80 – 15

SPIS TREŚCI

Opis instrukcji mikroprocesora Z80 – 15

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

CALL nn

CALL SUBROUTINE = Wywołaj podprogram

Operacja: (SP-1) ← PCH. (SP-2) ← PCL. PCnn, SPSP - 2
Mnemonik: CALL
Argumenty nn
b7 b6 b5 b4 b3 b2 b1 b0
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 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,, PCnn,
SPSP - 2
Jeśli cc jest fałszywe, to PCPC + 3
Mnemonik: CALL
Argumenty cc,nn
b7 b6 b5 b4 b3 b2 b1 b0
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), SPSP + 2
Mnemonik: RET
Kod operacyjny
b7 b6 b5 b4 b3 b2 b1 b0
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), SPSP + 2
Jeśli cc jest fałszywe, to PCPC + 1
Mnemonik: RET
Argumenty cc
b7 b6 b5 b4 b3 b2 b1 b0
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
b7 b6 b5 b4 b3 b2 b1 b0
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:

obrazek

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
b7 b6 b5 b4 b3 b2 b1 b0
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, PCLp, SPSP -2
Mnemonik: RST
Argumenty p
b7 b6 b5 b4 b3 b2 b1 b0
1 1 p → 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.

do podrozdziału  do strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2026 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.