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