Metodi di indirizzamento Metodi di indirizzamento – 1

Transcript

Metodi di indirizzamento Metodi di indirizzamento – 1
Testo di rif.to:
[Congiu] – 4.3 (pg. 138–148)
Metodi di indirizzamento
02.b
Indirizzamento immediato
Indirizzamento di registro
Indirizzamenti in memoria
Metodi di indirizzamento – 1
Gli indirizzi degli operandi sono collocati in
appositi campi (gruppi di bit) delle istruzioni.
1
24
Esempio:
Il modo di considerare il contenuto del
campo INDIRIZZO determina il particolare
metodo di indirizzamento.
Architettura degli Elaboratori 1
© 2008
Metodi di indirizzamento – 2
2
In genere il primo word (operation word) di
ciascuna istruzione contiene, oltre alla codifica
dell’operazione da eseguire, le informazioni
relative ai metodi di indirizzamento da
utilizzare per accedere agli operandi.
24
Alcuni di questi metodi richiedono ulteriori
informazioni che vengono memorizzate in uno o
più word aggiuntivi (extension word).
© 2008
Architettura degli Elaboratori 1
Metodi di indirizzamento nel PD32
3
Nel PD32 le istruzioni hanno un operation long-word
(OL) di 32 bit.
24
Alcuni metodi di indirizzamento richiedono informazioni
contenute in un extension long-word (EL) di 32 bit.
Ogni indirizzo (IND1, IND2) è specificato da due campi:
● M (da 3 bit) che individua il modo di indirizzamento,
● R (da 3 bit) che individua l’eventuale registro usato.
Codifica dei modi di
indirizzamento nelle
istruzioni del PD32
Architettura degli Elaboratori 1
© 2008
Metodi di indirizzamento usati
4
Indirizzamento immediato
Assoluto diretto
Assoluto indiretto
24
in blu i metodi non presenti nel PD32
(attribuibili al PD132)
Diretto di registro
Indiretto con registro
Auto-incrementante (diretto e indiretto)
Auto-decrementante (diretto e indiretto)
Con registro indice
Indiretto con registro indice
Con registro base
Auto-relativo (diretto e indiretto)
© 2008
Architettura degli Elaboratori 1
Indirizzamento immediato
MOVL #28, R0
5
; 28 → R0
Nel PD32 l’indirizzamento immediato è individuato dal
valore 1 nel campo M. Il campo R non è usato.
24
L’operando immediato è contenuto in un EL di 32 bit.
Il suo valore è compreso tra -231 e 231-1.
Per accedere all’operando il processore deve eseguire il
fetch di questo EL.
Numero accessi alla memoria:
Architettura degli Elaboratori 1
fetch(OL) +fetch(EL) +0
fetch(OL) + 1 = 2
© 2008
Indirizzamento assoluto
ADDL
132, R0
6
; L[132] + R0 → R0
24
Nel PD32 l’indirizzamento assoluto corrisponde al valore
2 nel campo M. Il campo R non è usato.
L’indirizzo assoluto è contenuto in un EL di 32 bit.
Consente perciò di accedere a 232 = 4 GB di memoria.
Per accedere all’operando il processore, dopo aver
effettuato il fetch dell’EL, con cui ottiene l’indirizzo
dell’operando, deve effettuare un ulteriore accesso alla
memoria (al valore dell’operando).
Numero accessi alla memoria:
fetch(OL) +fetch(EL) +1
fetch(OL) + 2 = 3
© 2008
Architettura degli Elaboratori 1
Indirizzamento assoluto indiretto (PD132)
ADDL
@456, R0
7
; L[L[456]] + R0 → R0
Nel PD132 l’indirizzo del puntatore è contenuto in un EL
di 32 bit, con cui si possono individuare 230 = 1 G
puntatori (da 4 byte) situati in memoria.
24
Ciascun puntatore può accedere a 232 = 4 GB.
Per accedere all’operando il processore, dopo aver
effettuato il fetch dell’EL, con cui ottiene l’indirizzo di
un puntatore all’operando, deve effettuare due ulteriori
accessi alla memoria:
● il primo per leggere il puntatore all’operando,
● il secondo per accedere al valore dell’operando
Numero accessi alla memoria:
Architettura degli Elaboratori 1
fetch(OL) +fetch(EL) + 2
fetch(OL) + 3 = 4
© 2008
Confronto tra i tre metodi presentati
8
24
Confronto tra i 3 diversi modi di indirizzamento
© 2008
Architettura degli Elaboratori 1
Indirizzamento diretto di registro
ADDL R0, R1
9
; R0 + R1 → R1
24
Nel PD32 l’indirizzamento diretto di registro
corrisponde al valore 0 nel campo M.
Il campo R specifica il registro in cui si trova l’operando.
Per accedere all’operando non sono necessari accessi alla
memoria.
Numero accessi alla memoria:
Architettura degli Elaboratori 1
fetch(OL) + 0
fetch(OL) + 0 = 1
© 2008
Indirizzamento indiretto con registro
ADDL (R0), R1
10
; L[R0] + R1 → R1
24
Nel PD32 l’indirizzamento indiretto con registro
corrisponde al valore 3 nel campo M.
Il campo R specifica il registro in cui si trova un
puntatore all’operando.
Per accedere all’operando è necessario un accesso alla
memoria (all’indirizzo contenuto nel registro specificato).
Numero accessi alla memoria:
fetch(OL) + 1
fetch(OL) + 1 = 2
© 2008
Architettura degli Elaboratori 1
Indirizzamento auto-incrementante
ADDz (R0)+, R1
11
; M[R0] + R1 → R1
; R0 + d → R0
Nel PD32 questo indirizzamento è individuato dal valore 7
nel campo M. Il campo R specifica il registro in cui si trova
un puntatore all’operando (è un indirizzamento indiretto
con registro).
24
Dopo l’accesso all’operando, il puntatore viene incrementato
di una quantità d pari alla lunghezza (in byte) dell’operando
stesso (d = 1 per B, 2 per W, 4 per L).
Per accedere all’operando è necessario un accesso alla
memoria (all’indirizzo contenuto nel registro specificato).
Numero accessi alla memoria: fetch(OL) + 1
fetch(OL) + 1 = 2
Architettura degli Elaboratori 1
© 2008
Indirizzamento auto-decrementante
12
ADDz -(R0), R1
; R0 - d → R0
; M[R0] + R1 → R1
24
Nel PD32 questo indirizzamento è individuato dal valore 6
nel campo M. Il campo R specifica il registro in cui si trova
un puntatore all’operando (è un indirizzamento indiretto
con registro).
Prima di accedere all’operando, il puntatore viene
decrementato di una quantità d pari alla lunghezza (in byte)
dell’operando stesso (d = 1 per B, 2 per W, 4 per L).
Per accedere all’operando è necessario un accesso alla
memoria (all’indirizzo contenuto nel registro specificato).
Numero accessi alla memoria: fetch(OL) + 1
fetch(OL) + 1 = 2
Architettura degli Elaboratori 1
© 2008
Utilità dell’auto-in(de)cremento
13
Consente di percorrere liste di dati consecutivi (in avanti
o a ritroso).
24
Consente di realizzare gli accessi LIFO ad uno stack:
MOVW 1000, -(R7) ; W[1000] → push
MOVW (R7)+, R0
; pop → RO
; (R7 funge da stack pointer)
Architettura degli Elaboratori 1
© 2008
Indirizzamento autoinc. indiretto (PD132)
ADDW @(R0)+, R1
; W[L[R0]] + R1W → R1W
; R0 + 4 → R0
14
24
Questo metodo non esiste nel PD32.
Il dato puntato dal registro specificato è un puntatore
(un indirizzo, lungo 4 byte), perciò l’incremento è di 4.
Dopo il fetch, il primo accesso alla memoria ottiene un
puntatore all’operando; un secondo accesso è necessario
per ottenere il valore dell’operando.
Numero accessi alla memoria:
fetch(OL) + 2
fetch(OL) + 2 = 3
© 2008
Architettura degli Elaboratori 1
Indirizzamento autodec. indiretto (PD132)
15
ADDB @-(R0), R1
; R0 - 4 → R0
; B[L[R0]] + R1B → R1B
24
Questo metodo non esiste nel PD32.
Il dato puntato dal registro specificato è un puntatore
(un indirizzo, lungo 4 byte), perciò l’incremento è di 4.
Dopo il fetch, il primo accesso alla memoria ottiene un
puntatore all’operando; un secondo accesso è necessario
per ottenere il valore dell’operando.
Numero accessi alla memoria:
Architettura degli Elaboratori 1
fetch(OL) + 2
fetch(OL) + 2 = 3
© 2008
Indirizzamento con registro indice - 1
16
E’ un metodo di indirizzamento a due componenti:
24
MOVL X(R1), R2
; L[X+R1] → R2
X:
indirizzo base
R1:
registro indice (contiene l’offset)
Nel PD32 questo metodo di indirizzamento è individuato
dal valore 4 nel campo M.
Il registro che funge da registro indice è specificato nel
campo R.
© 2008
Architettura degli Elaboratori 1
Indirizzamento con registro indice - 2
17
L’indirizzo base X è contenuto in un EL.
Per accedere all’operando il processore, dopo aver
24
effettuato il fetch dell’EL, con cui ottiene l’indirizzo
base, lo somma all’offset contenuto nel registro indice,
per calcolare l’indirizzo dell’operando; effettua poi un
ulteriore accesso alla memoria (al valore dell’operando).
Numero accessi alla memoria: fetch(OL) +fetch(EL) +1
fetch(OL) + 2 = 3
Codifica, nel PD32,
dell’indirizzamento
con registro indice
Architettura degli Elaboratori 1
© 2008
Indirizzamento con registro indice - 3
18
ESEMPIO DI USO DI UN REGISTRO INDICE:
short[] A, B, C; //array di short (2 byte)
for (int i=0; i<100 ; i++) A[i]=B[i]+C[i];
24
102
Organizzazione in memoria
dei tre array A,B,C
Architettura degli Elaboratori 1
Indirizzamento con registro indice - 4
La somma dei due array può essere effettuata
mediante le seguenti istruzioni:
© 2008
19
24
MOVW 300(R1), R0 ;B[R1] → R0
(B[i])
ADDW 500(R1), R0 ;C[R1] + R0 → R0 (B[i]+C[i])
MOVW R0, 100(R1) ;R0 → A[R1]
(A[i])
eseguite iterativamente 100 volte, con il registro R1
contenente il valore 0 la prima volta e incrementando
questo valore di 2 unità ad ogni iterazione.
Architettura degli Elaboratori 1
© 2008
Indirizzamento con registro indice - 5
20
Organizzazione del ciclo iterativo che calcola la somma dei
due array:
24
MOVB #100, R2 ; valore iniziale del contatore
MOVL #0, R1
; … e del registro indice
LOOP: MOVW 300(R1), R0
ADDW 500(R1), R0
MOVW R0, 100(R1)
ADDL #2, R1
; incremento del registro indice
SUBB #1, R2
; decremento del contatore
JNZ LOOP
; criterio di fine iterazioni
……. …….
; istruzione successiva
Architettura degli Elaboratori 1
© 2008
Indirizzamento indiretto con RI (PD132)
• Forma pre-indexed:
il registro indice RI viene usato prima di effettuare
l’indirizzamento indiretto: in tal modo il longword
situato all’indirizzo X+RI viene interpretato come un
puntatore all’operando.
21
24
→ L’operando è M[L[X + RI]]
• Forma post-indexed:
il registro indice RI viene usato dopo aver considerato
l’indirizzo base X in modo indiretto: l’indirizzo
dell’operando si ottiene sommando il contenuto del
registro indice al contenuto del longword di memoria
situato all’indirizzo base.
→ L’operando è M[L[X] + RI]
Architettura degli Elaboratori 1
© 2008
Confronto tra pre e post-indexed (PD132)
22
24
Architettura degli Elaboratori 1
© 2008
Indirizzamento con registro base (PD132)
23
L’indirizzo viene calcolato come somma del contenuto di
un registro RB (il registro base) e di un offset D fornito
24
dall’istruzione.
→ L’operando è M[RB + D].
Alcune macchine ammettono sia l’indirizzamento con
registro base sia quello con registro indice. In tal caso
l’indirizzo dell’operando è dato dalla somma di tre
componenti:
● RB (che contiene l’indirizzo base),
● X (che contiene un offset, specificato nella
istruzione),
● RI (che contiene un indice).
→ L’operando è M[RB + X + RI]
Architettura degli Elaboratori 1
© 2008
Indirizzamento autorelativo
24
E’ anch’esso un metodo di indirizzamento a due
componenti. L’indirizzo dell’operando è dato dalla somma
del contenuto del program counter PC e di un offset D.
24
Nel PD32 l’indirizzamento auto-relativo è individuato dal
valore 5 nel campo M. Il campo R non è usato e l’offset D
è contenuto in un EL.
→ L’operando è M[PC + D].
Il valore del PC che interviene nella somma è quello
che punta al (primo) EL dell’istruzione.
Nel caso di indirizzamento auto-relativo indiretto
(PD132) la somma D + PC individua non l’operando ma un
puntatore ad esso.
Architettura degli Elaboratori 1
© 2008
Fine
02.b
Metodi di indirizzamento