Stos procesora - jego budowa

czesc wam!

Stos procesora służy do przechowywania zmiennych lokalnych i informacji o aktualnie wywołanych funkcjach.

Ale czy ten stos procesora jest zrealizowany na zasadzie “normalnego” stosu FIFO :?: Tzn. np. ostatni element (poziom) zawiera np. zmienne lokalne i informacje o funkcji wywołanej najpóźniej (czyli tej, w której jesteśmy), a pierwszy dane funkcji od której zaczyna się wykonywanie programu (np. w C/C++ main()) :?:

Pod linkiem który podałeś wszystko dokładnie opisano:

wrzucenie do stosu push powoduje wpisanie danych pod adres ss:SP/ESP i zwiększenie adresu zapisanego w SP/ESP

pobieranie ze stosu pop powoduje zmniejszenie adresu zapisanego w SP/ESP i pobranie danych spod adres ss:SP/ESP

Jest to LIFO realizowane na tablice - stąd łatwo o przepełnienie.

W związku z tym można dostać się do elementów “pod spodem”.

Do tego istnieje rejestr BP/EBP do którego przeważnie wpisuje się SP/ESP na początku funkcji wtedy:

ss:[bP]/ss:[EBP] - adres powrotu

ss:[bP-2]/ss:[EBP-4] - pierwszy parametr

ss:[bP-4]/ss:[EBP-8] - drugi parametr

itp.

Małe sprostowanie, cytat z Wikipedii:

Nie rozumiem trochę…

Czym się różni ss:X od X :?:

Wiem jak działa stos tylko, że stos ma dwa znaczenia: stos jako kolejka LIFO i stos procesora, w którym zapamiętywane są informacje o funkcjach i zmiennych lokalnych.

I czy ten stos procesora tez jest zrealizowany na podstawie “stosu zwykłego” :?: Tzn. np. ostatni element (ten na samej górze) zawiera info o funkcji wywołanej ostatnio, czyli jakby tej w której jesteśmy. Przedostatni o funkcji poprzedniej itd.:

void fun_liczaca()

Na wierzchołku stosu leży adres powrotu z funkcji wywołanej a nie info o niej.

To gdzie są przechowywane zmienne lokalne na tym stosie :?:

Po adresie powrotu.

O ile wiem adres powrotu to adres miejsca, w którym kończy się funkcja.

Skoro w danym elemencie stosu jest przechowywany adres powrotu z danej funkcji to skoro za nim są zmienne lokalne, to co jest nie tak w moim rozumowaniu przedstawionym na kodzie :slight_smile: :?:

Na twoim kodzie nie przedstawiono ani parametrów ani zmiennych lokalnych ani adresu powrotu z funkcji, natomiast przedstawiono jakąś “informacje o” której nigdy nie było, niema i nie będzie na stosie.

Ta informacja to właśnie to co napisałeś - parametry i adres powrotu :slight_smile:

Czyli dobrze to rozumuję :?:

Skąd mam wiedzieć jak rozumiesz, skoro to co napisałeś jest bez sensu?