Anteprima
Vedrai una selezione di 1 pagina su 4
Calcolatori Elettronici I – Modi di indirizzamento Pag. 1
1 su 4
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

INDIRIZZAMENTO INDIRETTO INDIRECT ADDRESSING

L'indirizzamento indiretto fa uso dei registri indirizzo, che sono atti a contenere indirizzi di memoria. All'interno dei registri indirizzo viene memorizzato l'indirizzo effettivo della variabile a cui il registro fa riferimento e viene modificato tramite esso. I registri indirizzo assumono la funzione di puntatori.

Esempio:

MOVE.B (A0),D0

All'interno del registro A0 è memorizzato l'indirizzo della cella da cui si deve prelevare il dato. Attraverso l'istruzione si ha come effetto lo spostamento del contenuto della zona puntata da A01100 (vale a dire la locazione di memoria 5) nel registro dati D0.

Volendo tradurre in linguaggio naturale quell'istruzione avremmo: prendi il contenuto della cella il cui indirizzo è specificato in A01100 e spostalo nel registro dati D0.

PREDECREMENTO E...

POSTINCREMENTO

Questi due tipi di indirizzamento sono molto simili. Entrambi sono utilizzati su dei registri indirizzo, il primo ha la funzione di decrementare il contenuto del registro indirizzo, prima che esso venga utilizzato; il secondo, invece, viene prima utilizzato e poi incrementato.

Esempio (A0)+,D0

MOVE.W A0 D055 (1)

A0 D056 (2)

In principio all'interno del registro indirizzi vi è memorizzato il valore 5, tramite l'operazione di esso viene MOVE trasportato all'interno del registro quindi il contenuto di viene incrementato.

D0, A0-(A0),D0

MOVE.W A0 5(1) D0

A0 44 (2)

Se all'inizio contiene il valore 5, esso viene prima decrementato e poi passato al registro A0 D0.

INDIRIZZAMENTO CON BASE INDEXED ADDRESSING

Poniamo di aver definito un array e di voler accedere ad una determinata cella, se stessimo programmando in C++ la notazione che avremmo utilizzato sarebbe stata vet[n]. Possiamo avere un risultato analogo anche nell'assembly utilizzando l'indexed addressing.

In realtà quando scriviamo stiamo richiedendo di avere accesso ad vet[n], posizioni successive rispetto all'indirizzo in cui è memorizzato (ossia il primo elemento dell'array). vet[1000+4] è equivalente a vet[0+4]. Infatti viene visto dal compilatore come l'indirizzo di memoria del primo elemento memorizzato e nelle parentesi quadre c'è il numero di posizioni che deve contare per accedere all'elemento richiesto. Infatti potremmo tradurlo prendendo il quarto elemento successivo a vet. Se abbiamo capito questo ragionamento, allora basterà solamente imparare la nuova sintassi perché come questo procedimento vale per il C++, così vale per l'assembly.

Esempio #4:

A0 MOVE.L A(A0),D0
MOVE.W

Supponiamo di aver definito un array A e di voler prelevare l'elemento. Muoviamo prima tramite indirizzamento immediato il valore 4 nel registro dopo di che il compilatore prenderà l'indirizzo in cui si è registrato A0, il primo elemento dell'array.

elemento dell'array e calcolerà la posizione da considerare attraverso il valore immagazzinato in infineA0,avrà effetto il MOVE.

Esercizio

Dato un array di word contenente interi, porre i valori della terza e della quarta word rispettivamente nei registri D0 e D1 utilizzando l'indirizzamento diretto, indiretto e con base.

vettore800 4452

Supponiamo di aver definito un array monodimensionale di nome e che esso sia stato memorizzato alla locazione di memoria 800.

INDIRIZZAMENTO DIRETTO

VET+4,D0

MOVE.W VET+6,D1

MOVE.W

Facciamo alcune osservazioni sul codice. In primis ricordiamo che scrivere la label del vettore è assolutamente equivalente a scrivere l'indirizzo del primo elemento del vettore, dunque è come se avessimo scritto 800+4,D0.

Attenzione! Il compilatore accetta l'addizione a sinistra della virgola solo se a tempo di compilazione sono noti i valori di entrambi gli operandi in questo caso di e 4. Il primo abbiamo detto essere totalmente

equivalente all'indirizzo di memoria, il VET secondo è un numero perciò il compilatore accetta questa sintassi. Diversamente non è possibile utilizzare questo tipo di notazione. L'operazione di somma è effettuata dal compilatore e non dal processore.

Dettagli
Publisher
A.A. 2012-2013
4 pagine
SSD Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher flaviael di informazioni apprese con la frequenza delle lezioni di Calcolatori elettronici I e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Casola Valentina.