7 Instrukcje skoków i wywołań podprogramów 73
AJMP Procedura_2 ;skok do Procedury 2 AJMP Procedura_3 ;skok do Procedury 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żyda 2-bajtowej instrukcji AJMP. Drugi sposób nie stawia żadnych ograniczeń, dostępna jest cała 64 kBajtowa przestrzeń pamięa kodu programu.
W instrukcjach wywołań podprogramów ACALL i LCALL deklarowanie adresów podprogramów jest analogiczne jak w instrukcjach skoków AJMP i 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. q), a jako druga część bardziej znacząca licznika rozkazów (PCjsjj).
Dodatkowego wyjaśnienia wymaga ograniczenie zakresu skoków AJMP i wywołań podprogramów ACALL w obrębie 2kBajtowego obszaru pamięd kodu programu. W obu rozkazach modyfikowanych jest jedynie 11 najmniej znaczących bitów licznika rozkazów (PC10..0). Pięć najbardziej znaczących bitów licznika rozkazów (PCj5 .11) nie ulega zmianie, i one właśnie określają numer 2 kBajtowej strony pamięa kodu programu (rysunek).
W pierwszym przpadku, jak w przykładzie 1, po pobraniu rozkazu AJMP 1 licznik rozkazów (PC) ma wartość PC-07JTH. Po zamianie 11 najmniej znaczących bitów licznika rozkazów (PC10..0) jego stan jest równy PC * 1:
Stan licznika rozkazów (PO przed zamianą = 0000 0111 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.
• ■-s - *
Poniżej przedstawiony w szczegółach mhemonikl instrukqi, strukturę bajtów, czasy wykonania poszczególnych instrukcji jako liczbę tykli maszynowychc oraz stan zmienianych znaczników.
Move Data
MOV argument_l,argument_2
Działanie
A <=
Rn
(»dr)
iRł)
Idana
Rn c=
A
(adr)
• dana
(adr) c=
A
Rn
(adrl)
(Ri>
(Ki) c=
A
(adr)
• dana
• dana
DPTR c= #dana_16
Adresowanie Mnemonik: Struktura bajtów: Cykle Znacz
■ _ maszynowe: mii:
rejestrowe: |
MOV |
A,Rn |
h |
1 |
1 |
0 1 |
r |
r r |
1 |
1* |
bezpośrednie: |
MOV |
A,adr |
11 |
l |
1 |
0 1 0 |
1 |
0 1 |
1 |
1* |
L_ |
adr | |||||||||
pośrednie: |
MOV |
A,6Ri |
| 1 |
1 |
1 |
0 | 0 |
1 |
1 i |
1 |
p |
natychmiastowe: |
MOV |
A,#dana |
I 0 |
1 |
1 |
0 0 |
1 |
0 i) | |
1 |
I* |
I |
dana |
_1 | ||||||||
rejestrowe: |
MOV |
Rn,A |
| 1 |
1 |
1 |
nu |
r |
_L. d |
1 | |
bezpośrednie: |
MOV |
Rn,adr |
I 1 |
0 |
1 |
°h |
r |
r r 1 |
2 | |
| |
adr |
J | ||||||||
natychmiastowe: |
MOV |
Rn,#dana |
1 n |
1 |
1 |
»h |
r |
r -1 |
1 |
dana__