|
|
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 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. |
|
|
RETURN FROM SUBROUTINE =
Wróć z podprogramu
|
Operacja: |
|
PCL ← (SP), PCH ← (SP+1), SP ← SP + 2 |
Mnemonik: |
|
RET |
Kod operacyjny |
|
|
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. |
|
|
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
|
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. |
|
|
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. |
|
|
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 . |
|
|
RESTART =
Wywołaj szybko podprogram
|
Operacja: |
|
(SP-1) ← PCH, (SP-2) ← PCL, PCH ← 0, PCL ← p, SP ← SP -2 |
Mnemonik: |
|
RST |
Argumenty |
|
p
|
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 . |