73
7 Instrukcje skoków i wywołań podprogramów
AJMP Procedura_2 ;skok do Procedury 2 AJMP Procedura_3 ;skok do Prooidury 3
AJMP Procedura_4 ;skok do Procedury 4
W podobny sposób można deklarować tablicę 128 (256/2) różnych procedur. Ograniczenie wynika z konieczności wykonania przesunięcia zawartości akumulatora o jedną pozycję w lewo, co jest równoznaczne z pomnożeniem zawartości akumulatora przez 2. Jeśli w tablicy procedur stosować instrukcje LJMP wówczas należy zawartość akumulatora mnożyć przez 3 i zadeklarować można jedynie 85 (256/3) wywołań procedur. W pierwszym rozwiązaniu deklarowana tablica procedur i wszystkie procedury muszą znajdować się we wspólnym 2 kBajtowym bloku pamięci kodu programu. Jest to konsekwencją użycia 2-bajtowej instrukcji AJMP. Drugi sposób nie stawia żadnych ograniczeń, dostępna jest cala 64 kBajtowa przestrzeń pamięci kodu programu.
W instrukcjach wywołań podprogramów ACALL i LCALL deklarowanie adresów podprogramów jest analogiczne jak w instrukcjach skoków AJMP l LJMP. Instrukcje typu CALL nazywane są instrukcjami skoków ze śladem. Tym śladem jest zapamiętany przez mikroprocesor na stosie adres powrotu czyli adres następnej instrukcji występującej po instrukcji wywołania podprogramu CALL W takiej sytuacji wskaźnik stosu jest dwukrotnie inkrementowany i zapamiętywana jest w dwóch etapach zawartość 16-bitowego licznika rozkazów (PC). Jako pierwsza przesyłana jest mniej znacząca część (PC7..0)/ a jako druga część bardziej znacząca licznika rozkazów (PCisjj).
Dodatkowego wyjaśnienia wymaga ograniczenie zakresu skoków AJMP i wywołań podprogramów ACALL w obrębie 2 kBajtowego obszaru pamięci kodu programu. W obu rozkazach modyfikowanych jest jedynie 11 najmniej znaczących bitów licznika rozkazów (PCjo.o). najbardziej znaczących bitów licznika rozkazów (PCj5#n) nie ulega zmianie, i one właśnie określają numer 2 kBajtowej strony pamięci kodu programu (rysunek).
W pierwszym przpadku, jak w przykładzie 1, po pobraniu rozkazu AJMP 1 licznik rozkazów (PC) ma wartość PC»07fFH. Po zamianie 11 najmniej znaczących bitów licznika rozkazów (PC]o..o) jego stan jest równy PC » 1:
Stan licznika rozkazów (PO przed zamianą = 00000111 1111 1111B
Adr.ll - 000 0000 0001B
.stan licznika rozkazów (PC) po zamianie » 0000 0000 0000 0001B
Jako następna zostanie wykonana instrukcja MOV A,#78H o adresie 0001.
4 Instrukcje bajtowe) wymiany danyd,___JO
•- J >: •- 5
Poniżej przedstawiony w szczegółach mhcmoniki instrukcji, $tiykturg bajtów, czasy wykonania poszczególnych instrukcji jako liczbę tykli maszynowych' oraz stan zmienianych znaczników.
MOV |
argument_l,argument_2 |
Move Data | ||
Działanie: |
Rn , <»dr) D A «= Rn <= iRI) • dana |
A (adr) ił dana |
A Rn (adr) <= (adrl) (Ri) tfdana |
A (Ri) c= (adr) Jłdana |
DPTR <= #dana_16
Cykle Znacz
maszynowe: „iii:
Adresoioanic Mnemonik: Struktura bajtów:
rejestrowe: |
MOV |
A,Rn |
1 |
1 |
l |
0 1 |
r |
r |
r |
1 |
bezpośrednie: |
MOV |
A,adr |
|i |
1 |
1 |
0 1 0 |
1 |
0 |
1 |
1 |
I |
adr | |||||||||
pośrednie: |
MOV |
A,6Ri |
1' |
1 |
1 |
0 0 |
1 |
1 |
i |
1 |
natychmiastowe: |
MOV |
A,#dana |
0 |
1 |
1 |
~Ó | 0 |
1 |
0 |
l) |
1 |
dana | ||||||||||
rejestrowe: |
MOV |
Rn, A |
|T |
1 |
1 |
UL |
r |
r |
r |
f ■ |
bezpośrednie: |
MOV |
Rn,adr |
|l |
0 |
1 |
°h |
r |
r |
r |
2 |
| |
adr | |||||||||
natychmiastowe: |
MOV |
Rn,#dana |
1 0 |
1 |
1 |
>l> |
r |
r |
r |
l |
1 |
dana |
1 |
P
V
P
V