50
6. RAM czy SFR ?
5 KAM czy SI R ?
51
przy odczytywaniu bajtów ze stosu instrukcją POP należy zachować właściwą kolejność. Zmiana kolejności, jeśli jest nieświadoma, może prowadzić do niezamierzonych skutków, ponieważ odczytywane bajty pobierane są zawsze
ze szczytu stosu. | |||
POP |
lOh |
;(10h) <- (SP), ;SP <- SP -1 |
(10h)=4Eh |
POP |
ACC |
;ACC <-(SP), ;SP <- SP -1 |
ACC=0Ch |
POP |
B |
;B <-(SP), ;SP <- SP -1 |
B=12h |
Wskaźnik stosu SP ( Stack Pointer) - adres 81 h (rw-OOh). f
Jest rejestrem, który adresuje stos - wydzielony logicznie fragment* wewnętrznej pamięci RAM. Stos używany jest do zapamiętywania ■ adresów powrotu z podprogramów wywoływanych programowo lub ■ sprzętowo (przez przerwania), przenoszenia zmiennych między® programami, czasowej ochrony rejestrów specjalnych i komórek® wewnętrznej pamięci RAM jeśli są one zmieniane w trakcie wykonywania® podprogramów.
Informacja wpisywana do stosu powoduje automatyczne zwiększeni® zawartości wskaźnika stosu o liczbę wpisywanych bajtów. Jeśli w trakcie I wykonanej instrukcji do stosu wpisywany jest jeden bajt to wskaźnik stos® zwiększany jest o jeden, jeśli dwa bajty to o dw'a. Odczyt, pobranie jednego lubi dwóch bajtów' ze stosu powoduje automatyczne zmniejszenie zawartość wskaźnika stosu o jeden lub o dwa. 8-bitowy wskaźnik stosu SP wskazuj ostatnią zajętą komórkę stosu. Zrealizowanie poniższego programu powoduje: MOV SP,#2Fh ;SP <— 2Fh, wpisanie wartości początkowej
PUSH lOh ;SP <- SP + 1,
;(SP) <- (lOh)
;wpisanie do stosu zawartości komórki wewnętrznej
; pamięci RAM o adresie lOh, np. (10h)=12h PUSH ACC ;SP <- SP + 1,
;(SP) <-ACC
;wpisanie do stosu zawartości akumulatora, np. A=0Ch PUSH B ;SP+-SP + 1,
;(SP) +-B
;wpisanie do stosu zawartości rejestru B, np. B=4F.h
powoduje wpisywanie do stosu 3 bajtów zgodnie z kolejnością wprowadzania Sytuację tę przedstawia rysunek 6-5.
✓i |
rl | ||||
33h |
33h |
33h | |||
32h |
32h |
SP=32h |
4Eh | ||
31 h |
SP=31h |
OCh |
31 h |
OCh | |
SP=30h |
12h |
30h |
12h |
30h |
12h |
k |
k |
k |
PUSH lOh PUSH lOh PUSH lOh
PUSH ACC PUSH ACC
PUSH B
I? nrmi i r~~T UV\ i O hnitńw na stosie mikrokontrolera.
Jeśli rejestry i wybrana komórka pamięci RAM mają mieć przywrócone poprzednie wartości to po wykonaniu programu jedynie akumulator ma stan
początkowy.
Wskaźnik stosu SP jest inkrementowany, zwiększana jest jego zawartość, przed wykonaniem instrukcji PUSH (o jeden) i CALL (o dwa) oraz dekrementowany, zmniejszana jest jego zawartość, po pobraniu danych ze stosu w trakcie wykonywanych instrukcji POP (o jeden) i RET lub RETI (o dwa). Zerowanie procesora linią RST ustala wartość początkową wskaźnika stosu SP=7. Oznacza to, że przy przesianiu pierwszej danej do stosu następuje wpisanie jej do komórki o adresie 8, tzn. do rejestru R0 pierwszego banku rejestrów RB1 (rysunek 6-3). Zaw-artość wskaźnika stosu może być programowo zmieniana.
Ze względu na 8-bitową długość rejestru wskaźnika stosu SP i deklarację v\ wewnętrznej pamięci RAM należy kontrolować rozmiar stosu. Przy niekontrolowanym przesyłaniu danych do obszaru stosu możliwe jest zniszczenie danych przechowywanych w wyższych obszarach adresu pamięci RAM oraz w kolejnych bankach rejestrów rozpoczynając od banku RBO.
^ arytmetyce 8-bitowej dodaw-anie lub odejmowanie wykonywane jest tylko dla 8-bitów', co oznacza, że:
OFFh + 1=0,
0 - 1 =OFFh
Wskaźnikowy rejestr danych DPTR (Data Pointer Register) -
adresy: 82h, 83h (rw-OOh każdy).
bitowy wskaźnikowy rejestr danych DPTR złożony jest z dwóch itowych rejestrów, z. części bardziej znaczącej DPH (adres 83h) i części mn>ej znaczącej DPI. (adres 82h).