Sottoprogrammi
Per definizione un algoritmo è una sequenza finita di passi che porta alla risoluzione di una classe di problemi. All’interno del nostro algoritmo può essere necessario ripetere una determinata azione, su dati di tipo diverso. Riscrivere in più punti una stessa porzione di codice risulterebbe un’operazione onerosa per la macchina e uno spreco di memoria. Infatti è possibile implementare al di fuori del programma principale del codice, che opera su dati di volta in volta differenti. Questo insieme di istruzioni è detto sottoprogramma.
L’utilizzo di questa peculiarità, che troviamo comune in tutti i linguaggi di programmazione, non solo permette un facile riutilizzo delle istruzioni e degli algoritmi già implementati, ma consente anche di spaccare il problema principale in più pezzi, in modo da riuscire a dominarne la complessità. Il programma che invoca una subroutine è detto chiamante, dualmente la subroutine invocata è detta chiamato.
Domanda sull'architettura 68K
Domanda: In particolare per il 68K come avviene l’invocazione del sottoprogramma e il ritorno al chiamante?
In via concettuale, quando il processore esegue un algoritmo, legge le istruzioni in modo sequenziale, grazie al program counter. Il program counter è un registro che contiene l’indirizzo di memoria in cui l’istruzione corrente è memorizzata. In assenza di questo registro, nessun processore potrebbe eseguire le proprie istruzioni una dopo l’altra.
Abbiamo detto però che il sottoprogramma non è scritto all’interno del chiamante, bensì al di fuori, pertanto il program counter deve effettuare un salto dall’indirizzo di memoria corrente all’indirizzo di memoria in cui è registrata la prima istruzione del sottoprogramma. Tuttavia, finita l’esecuzione della subroutine, deve ritornare al chiamante e lo fa accedendo all’indirizzo di memoria, che conteneva prima della chiamata, preventivamente salvato in un altro registro.
Il sottoprogramma in realtà all’interno del 68K non è altro che un’etichetta alla quale saltare, dopo aver conservato però l’indirizzo di ritorno. La memorizzazione degli indirizzi è ammessa per il 68K in registri, memoria oppure stack. Delle tre soluzioni, la terza è sicuramente quella più funzionale, infatti, le prime due presentano dei limiti.
Immaginiamo di avere un programma principale P, un sottoprogramma S1 e un sottoprogramma S2. P invoca S1, che a sua volta invoca S2. Se intendessimo memorizzare l’indirizzo di ritorno all’interno di un solo registro, non saremmo più capaci di tornare a P.
PP S1 D0230 S1 D0100 indirizzo
-
Sottoprogrammi
-
Calcolatori elettronici I - Sottoprogrammi e parametri su Stack
-
Sottoprogrammi
-
Calcolatori elettronici I - Sottoprogrammi e parametri su Stack