Darker
08-09-2008, 06:22
Ciao ragazzi :)
Nonostante i libri ed i siti consultati fino ad ora non riesco a capire cosa succede allo stack quando si verifica il protocollo di chiamante/chiamato.
Poiché non sono bravo a capire dalle definizioni (a quanto pare...) ho preparato un esempio:
Supponiamo che una funzione "A" chiami una funzione "B" (che, dopo un certo tempo, termina la sua esecuzione e torna ad "A", fornendo il risultato dell'elaborazione).
Fase 1: Sullo stack (che cresce ad indirizzi di memoria crescenti) ci sono:
- Il Base Pointer (BP) della funzione "A" che punta alla base dello stack
- Lo Stack Pointer (SP) della funzione "A" che punta alla prima locazione libera dello stack
- Il Link Pointer (LP) che contiene l'indirizzo di ritorno (della funzione che ha invocato A, suppongo. Questo punto non chiaro).
Fase 2: "A" invoca "B": Cosa passa "A" a "B"? Cosa salva "B" e come fa a tornare ad "A"? LP che sta sullo stack di "A", che roba è? In pratica, che cavolo succede allo stack?
Grazie anticipatamente :)
Nonostante i libri ed i siti consultati fino ad ora non riesco a capire cosa succede allo stack quando si verifica il protocollo di chiamante/chiamato.
Poiché non sono bravo a capire dalle definizioni (a quanto pare...) ho preparato un esempio:
Supponiamo che una funzione "A" chiami una funzione "B" (che, dopo un certo tempo, termina la sua esecuzione e torna ad "A", fornendo il risultato dell'elaborazione).
Fase 1: Sullo stack (che cresce ad indirizzi di memoria crescenti) ci sono:
- Il Base Pointer (BP) della funzione "A" che punta alla base dello stack
- Lo Stack Pointer (SP) della funzione "A" che punta alla prima locazione libera dello stack
- Il Link Pointer (LP) che contiene l'indirizzo di ritorno (della funzione che ha invocato A, suppongo. Questo punto non chiaro).
Fase 2: "A" invoca "B": Cosa passa "A" a "B"? Cosa salva "B" e come fa a tornare ad "A"? LP che sta sullo stack di "A", che roba è? In pratica, che cavolo succede allo stack?
Grazie anticipatamente :)