vuoi
o PayPal
tutte le volte che vuoi
Introduzione al 68K
Nel 68K il puntatore a quest'area di memoria è rappresentato da uno specifico registro-indirizzi, che costantemente A7 punta alla testa. All'interno del processore, notiamo che è l'unico registro indirizzi ad essere duplicato, infatti al primo si accede in stato utente, al registro duplicato in stato supervisore. La differenza sta nel fatto che, quando si accede in stato supervisore, sono ammessi tutti i modi di indirizzamento supportati dal processore.
Domanda: Chi fornisce al sottoprogramma i dati su cui deve lavorare?
I dati, su cui il sottoprogramma deve andare ad agire, sono forniti dal programma, che ne ha invocato l'ausilio attraverso un'operazione, che prende il nome di scambio dei parametri. Tuttavia anche al momento del ritorno al programma principale, la subroutine deve fornire il frutto delle sue elaborazioni, restituendo i nuovi valori.
Per il C++ è ammesso lo scambio dei parametri per valore o per riferimento, allo stesso modo avviene nell'ASIM. Infatti, supposto di voler utilizzare i registri per memorizzare i parametri, nel caso dello scambio per valore si tratta di memorizzare in un registro dati una copia del valore da passare alla subroutine; nel caso dello scambio per riferimento, invece, si tratta di caricare l'indirizzo effettivo di una variabile e di porlo in un registro indirizzi. Nel primo esempio, una qualsiasi azione effettuata sul registro dati non andrà a modificare il valore contenuto nella variabile d'origine. Viceversa nel secondo esempio, la variabile d'origine viene acceduta tramite indirizzo, pertanto una qualsiasi operazione agente su di essa, ne modifica il valore.
VAR,D0MOVE.W
Viene effettuata la copia di VAR in D0. Non è ad essere modificato, infatti il programma agisce unicamente sulla copia posta in D0. Lo scambio effettuato è allora per valore.
verrà utilizzato per variabili di input, su cui non è necessario venga effettuato alcun cambiamento.<VAR,A0LEA>
Tramite il codice operativo viene caricato l'indirizzo effettivo della variabile e verrà modificato durante l'esecuzione del sottoprogramma, che accede ad esso a mezzo, appunto, dell'indirizzo. Dunque questo scambio è per riferimento e ne sarà fatto uso per variabili di output, per le quali è necessaria un'elaborazione e la registrazione, pertanto la modifica del valore.
Esercizio
Scrivere un programma che sposti attraverso un sottoprogramma i dati caricati nel registro D0 utilizzando la memoria per la registrazione dell'indirizzo di ritorno.
<SUBROUTINE>
Cominciamo con il guardare alla subroutine. Poiché l'indirizzo di memoria deve essere conservato in memoria, all'inizio della subroutine dobbiamo dichiarare lo spazio di una longword per permettere il ritorno al chiamante e poi...SOTT 1DS.L - Spazio destinato alla memorizzazione dell'indirizzo di ritorno al chiamante;
D0,D1MOVE.W - Viene eseguita l'operazione richiesta dalla traccia;
SOTT,A0MOVE.L - Viene caricato nel registro indirizzi A0 l'indirizzo di ritorno al chiamante, conservato proprio nella locazione di memoria identificata dall'etichetta SOTT;(A0);
JMP - Viene provocato il salto incondizionato all'indirizzo contenuto in A0.