Tryby adresowania Prawie każda operacja wykonywana przez mikroprocesor wykonywana jest na pewnych argumentach (lub argumencie). Sposoby wskazywania argumentów operacji nazywane są trybami adresowania. Wyróżnia się cztery podstawowe tryby adresowania: adresowanie rejestrowe adresowanie natychmiastowe adresowanie bezpośrednie adresowanie pośrednie Informacja o sposobie adresowania argumentów jest zawarta w kodzie rozkazu.
kod Tryby adresowania – adresowanie rejestrowe R2 pamięć np. MOV A,R2 µP R1 R2 R3 A
kod Tryby adresowania – adresowanie natychmiastowe n pamięć np. MOV A,#n µP R1 R2 R3 A
kod Tryby adresowania – adresowanie bezpośrednie adres pamięć np. MOV A,adres n µP R1 R2 R3 A
kod Tryby adresowania – adresowanie pośrednie R1 pamięć np. MOV n µP R1 R2 R3 A
Tryby adresowania Oprócz czterech podstawowych trybów adresowania w mikroprocesorach spotyka się jeszcze inne tryby adresowania będące modyfikacją lub kombinacją trybów podstawowych: adresowanie pośrednie ze zwiększeniem/zmniejszeniem zawartości rejestru adresowanie pośrednie z przesunięciem adresowanie pośrednie z indeksem i przesunięciem Niektóre z tych trybów adresowania, pomimo że występują w danym mikroprocesorze, mogą nie być jawnie wymieniane jako dostępne do adresowania danych.
kod Tryby adresowania – adresowanie pośrednie ze zwiększeniem R1 pamięć np. MOV n występuje np. w procesorze Motorola 68000: MOVE (A1)+,D0 µP R1 R2 R3 A
kod Tryby adresowania – adresowanie pośrednie z przesunięciem µP R1 R2 R3 R1 pamięć A np. MOV n występuje np. w procesorze Motorola 68000: MOVE d(A1),D0 d +
kod Tryby adresowania – adresowanie pośrednie z indeksem i przesunięciem µP R1 R2 R3 R1 pamięć A np. MOV n występuje np. w procesorze Motorola 68000: MOVE d(A1,D3),D0 d + IX
Stos Stos jest strukturą danych charakteryzującą się tym, że informacje umieszczone na nim można odczytywać wyłącznie w kolejności odwrotnej do kolejności zapisywania. Innymi słowy jako pierwszy ze stosu zostanie odczytany ten element, który został umieszczony na nim jako ostatni. struktura typu LIFO (Last In First Out) Stos służy do chwilowego (tymczasowego) przechowywania informacji
Stos Stos w systemie mikroprocesorowym może być realizowany układowo, ale częściej realizuje się go wykorzystując pewien obszar przestrzeni adresowej pamięci. W takiej realizacji ze stosem związany jest wskaźnik stosu, czyli rejestr mikroprocesora, który wskazuje adres pamięci, pod którym znajduje się wierzchołek stosu (ostatnio umieszczona na nim wartość).
SP 7 5 Stos – umieszczanie informacji na stosie początek przed umieszczeniem informacji na stosie SP po umieszczaniu informacji na stosie SP 7 5 w trakcie umieszczania informacji na stosie 8
Stos –zdejmowanie informacji ze stosu SP po zdjęciu informacji ze stosu SP przed zdjęciem informacji ze stosu SP w trakcie zdejmwania informacji ze stosu 8
Stos Na stosie z reguły przechowywane są następujące informacje: adresy powrotów z podprogramów (procedur, funkcji), zmienne lokalne podprogramów, argumenty wywołań podprogramów i wyniki działania funkcji (rzadziej). Bez stosu nie byłoby możliwe korzystanie z podprogramów, co znacznie utrudniłoby tworzenie, uruchamianie i modyfikowanie programów. Ponadto brak stosu uniemożliwiłby wprowadzenie mechanizmu szybkiego reagowania na zdarzenia zewnętrzne czyli tzw. mechanizmu przerwań.
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 1004h 1008h 4000h SP 1000h PC IR {
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 1004h 1008h 4000h SP 1002h PC IR {
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 4000h SP 1004h 1008h 1004h PC CALL 00h20h IR { 10h 04h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 3FFEh SP 1004h 1008h 1004h PC IR { 10h 04h CALL 00h20h 2000h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 3FFEh SP 1004h 1008h 2002h PC IR { 10h 04h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 3FFEh SP 1004h 1008h 2003h PC RET IR { 10h 04h 1004h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 4000h SP 1004h 1008h 1004h PC IR { 10h 04h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 1004h 1008h 4000h SP 1005h PC IR { 10h 04h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 4000h10h SP 1004h 1008h PC CALL 00h20h IR { 04h 10h 08h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 3FFEh SP 1004h 1008h PC IR { 10h 08h CALL 00h20h 2000h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 3FFEh SP 1004h 1008h 2002h PC IR { 10h 08h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 3FFEh SP 1004h 1008h 2003h PC RET IR { 10h 08h 1008h
1000h CALL Stos – korzystanie z podprogramów 00h 20h 2000h RET CALL 00h 20h 4000h SP 1004h 1008h PC IR { 10h 08h
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 30h 4000h SP 1004h 2000h 1001h PC IR { 10h 08h RET
4000h 1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 30h SP 1004h 2000h 1004h PC CALL 00h20h IR { RET 3FFEh 10h 04h 2000h
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 30h 3FFEh SP 1004h 2000h 2001h PC IR { 10h 04h RET
3FFEh 3FFCh 1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 20h SP 1004h 2000h 2004h PC CALL 00h30h IR { 10h 08h RET 10h 04h 20h 04h 3000h
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 20h SP 1004h 2000h 3001h PC IR { 10h 08h RET 10h 04h 20h 04h 3FFCh
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 20h 3FFCh SP 1004h 2000h 3002h PC RET IR { 10h 08h RET 10h 04h 20h 04h 2004h
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 20h 3FFEh SP 1004h 2000h 2004h PC IR { 10h 08h RET 10h 04h 20h 04h
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 20h 3FFEh SP 1004h 2000h 2005h PC RET IR { 10h 08h RET 10h 04h 20h 04h 1004h
1000h CALL Stos – wywołania zagnieżdżone 00h 20h 3000h RET CALL 00h 20h 4000h SP 1004h 2000h 1004h PC IR { RET 10h 04h 20h 04h
1000h CALL Stos – przepełnienie stosu 00h 20h 3000h RET CALL 00h 20h 1004h 2000h RET 10h 04h 20h 04h ! Powiększający się stos może nałożyć się na obszar, w którym przechowywane są rozkazy lub dane. Może to spowodować: błędne działanie programu na skutek zamazania danych lub kodów rozkazów przez informacje umieszczane na stosie, błędne działanie programu na skutek zamazania informacji umieszczanych na stosie, przez dane programu.
1000h CALL Stos – zmienne lokalne 00h 20h 3FFEh SP 1004h 10h 04h Podprogram, po jego wywołaniu, może zmodyfikować zawartość wskaźnika stosu tak, aby zarezerwować na stosie miejsce na przechowywanie zmiennych lokalnych. 3FFFh
1000h CALL Stos – zmienne lokalne 00h 20h 3FFAh SP 1004h var4 10h 04h Podprogram, po jego wywołaniu, może zmodyfikować zawartość wskaźnika stosu tak, aby zarezerwować na stosie miejsce na przechowywanie zmiennych lokalnych. Do tak zarezerwowanego miejsca na stosie program może się odwoływać dzięki znajomości położenia wierzchołka stosu i względnego przesunięcia każdej ze zmiennych w stosunku do wierzchołka. 3FFFh var3 var2 var1 SP+0 SP+1 SP+2 SP+3
1000h CALL Stos – zmienne lokalne 00h 20h 3FFEh SP 1004h 10h 04h Podprogram, po jego wywołaniu, może zmodyfikować zawartość wskaźnika stosu tak, aby zarezerwować na stosie miejsce na przechowywanie zmiennych lokalnych. Do tak zarezerwowanego miejsca na stosie program może się odwoływać dzięki znajomości położenia wierzchołka stosu i względnego przesunięcia każdej ze zmiennych w stosunku do wierzchołka. 3FFFh Przed zakończeniem swojego działania (instrukcją RET) podprogram musi przywrócić pierwotną zawartość wskaźnika stosu.
1000h CALL Stos – przekazywanie argumentów 00h 20h 3FFEharg1 SP 1004h arg2 arg3 Stos może też służyć do przekazywania argumentów podprogramów. W tym celu przed wywołaniem podprogramu, program wywołujący musi na stosie umieścić argumenty podprogramu. 3FFFh
1000h CALL Stos – przekazywanie argumentów 00h 20h 3FFBh SP 1004h arg3 Stos może też służyć do przekazywania argumentów podprogramów. W tym celu przed wywołaniem podprogramu, program wywołujący musi na stosie umieścić argumenty podprogramu. Do argumentów podprogram może się odwoływać dzięki znajomości położenia wierzchołka stosu i względnego przesunięcia każdego z argumentów w stosunku do wierzchołka. 3FFFh arg1 arg2 10h 04h SP+2 SP+3 SP+4
1000h CALL Stos – przekazywanie argumentów 00h 20h 4000h SP 1004h arg3 Stos może też służyć do przekazywania argumentów podprogramów. W tym celu przed wywołaniem podprogramu, program wywołujący musi na stosie umieścić argumenty podprogramu. Do argumentów podprogram może się odwoływać dzięki znajomości położenia wierzchołka stosu i względnego przesunięcia każdego z argumentów w stosunku do wierzchołka. 3FFFh Po zakończeniu podprogramu, program wywołujący musi usunąć umieszczone wcześniej na stosie argumenty. arg1 arg2
1000h CALL Stos – przekazywanie argumentów 00h 20h 3FFEh SP 1004h arg3 Istnieją również rozwiązania, w których przyjmuje się, że to podprogram powinien usunąć argumenty ze stosu. Jest to jednak w prostych mikroprocesorach zadanie trudniejsze, gdyż wymaga skopiowania adresu powrotu w miejsce początkowych argumentów. Żeby ułatwić realizację takiej konwencji, w niektórych procesorach istnieją specjalne instrukcje powrotu z podprogramu z usunięciem zadanej liczby słów/bajtów ze stosu. 3FFFh arg1 arg2 10h 04h 10h 04h