- Assegnazione al PC dell’indirizzo del codice del sottoprogramma;
- Esecuzione del sottoprogramma;
- Ritorno al programma chiamante con ripristino del suo contesto;
Record di attivazione
Insieme di tutte le variabili di cui il sottoprogramma fa uso.
Ogni funzione ha associato il record di attivazione che contiene:
- Tutti i dati relativi all’ambiente locale del sottoprogramma;
- Contesto del chiamante;
- L’indirizzo di ritorno nel programma chiamante, cioè l’indirizzo di RAM dell’istruzione del chiamante che deve essere considerata al termine dell’esecuzione del sottoprogramma → valore del Program Counter;
- Altri dati utili.
Il record di attivazione è il modello di quello che abbiamo chiamato ambiente. Per ogni attivazione di sottoprogramma, si crea un nuovo record di attivazione.
Esempio di Codice
int moltiplica (int x, int y)
{
int r = x*y;
return r;
}
int power (int b, int e)
{
int i, p = 1;
for (i = 1; i <= e; i++)
p = moltiplica (p, b);
return p;
}
int main()
{
int i = 2, j = 3, k;
k = moltiplica (i, j);
k = power(i, j);
return 0;
}
Record di attivazione di moltiplica (x, y, r)
Record di attivazione del main (i, j, k)
Record di attivazione di power (b, e, i, p)