Architettura degli
Elaboratori II
(canale P-Z)
Modi di Indirizzamento
Dott. Franco Liberati
Argomenti




Assoluto
Immediato
A Registro
Incremento
Modi di indirizzamento

Un modo di indirizzamento è un modo per esprimere un indirizzo di
memoria
NB: alla fine il risultato è sempre un indirizzo di memoria dove si
andrà a leggere (load) o scrivere (store) un dato.

La struttura è

Nel linguaggio macchina MIPS, esiste un solo modo di indirizzamento
imm(register)
dove l’indirizzo è dato dalla somma del valore immediato imm più il
contenuto del registro register
OPCODE
MODO DI INDIRIZZAMENTO
Esempio:
lw $t0, 4($sp) (legge una word dall’indirizzo $sp + 4)
Modi di Indirizzamento
in
SPIM
Modi di indirizzamento

L’assembler fornisce per comodità più modi di
indirizzamento

Un indirizzo si può esprimere come somma di:
una etichetta + una espressione + un registro
Esempio:
lw $t1, array + 0x100($t0)
(mette nel registro $t1, la word sita all’indirizzo 0x10010104
assumendo: array = 0x10010000 e $t0 = 4)
A REGISTRO
(base register)
 Specifica un indirizzo tramite registro base, assumendo un
offset 0.
 L’indirizzo è dato dal contenuto del base register
Esempio: lb $t0,($a0)
A REGISTRO
lb $t0,($a0)
10001101
00000010
$t0
00000010
IMMEDIATO
(expression)
 Specifica un indirizzo assoluto con una espressione
L'indirizzo è dato dal valore presente nel campo indirizzo.
Esempio: lb $t0, 0x00 40 00 00
IMMEDIATO
lb $t0, 0x00 00 00 8D
10001101
…
00000010
$t0
00000010
IMMEDIATO con spiazzamento
expression
 Specifica un indirizzo assoluto con una espressione fatta
solo di somme e sottrazioni di costanti espresse in
decimale o esadecimale.


L'indirizzo è dato dal risultato dell'espressione (costante).
Esempio: lb $t0, 0x00 40 00 00+4
I numeri negativi vanno comunque preceduti anche dal
simbolo +.
Esempio: lb $t0, 0x10 01 00 0c + -4
IMMEDIATO con spiazzamento
lb $t0, 0x00 00 00 8D + 4
10001101
+
100
$t0
00000010
00000010
…
10010000
10010001
10010010
10010011
…
IMMEDIATO A REGISTRO
expression(base register)
 Specifica un indirizzo tramite registro base e un offset
tramite una espressione
 L'indirizzo è dato dal contenuto del base register + il
risultato dell'espressione
Esempio: lw $t0, 4($sp)
IMMEDIATO A REGISTRO
Esempio: lw $t0, 4($sp)
10001101
10001101
+
100
$t0
00000010
00000010
$sp
…
10010000
10010001
10010010
10010011
…
SIMBOLICO
Relocatable-symbol
 Specifica un indirizzo (rilocabile) tramite una etichetta.
 L'assemblatore genera le istruzioni necessarie per gestire
l'etichetta e aggiunge al modulo oggetto generato le
informazioni di rilocazione.
 Esempio: lw $t0, operandA
SIMBOLICO
Esempio: lw $t0, operandA
operanA=10010001
00000010
$t0
00000010
…
10010000
10010001
10010010
10010011
…
SIMBOLICO con spiazzamento
Relocatable-symbol ± expression
 Specifica un indirizzo base tramite una etichetta, mentre
l’offset viene specificato tramite un’espressione
 L’indirizzo è dato dalla somma dell’indirizzo associato
all’etichetta con il risultato dell’espressione
Esempio: lw $t0, operandoB + 4
SIMBOLICO con spiazzamento
Esempio: lw $t0, operandB+4
operandoB=10001101
+
100
$t0
00000010
00000010
…
10010000
10010001
10010010
10010011
…
SIMBOLICO con spiazzamento a
registro
Relocatable-symbol(index register)
 Specifica un indirizzo base tramite una etichetta, mentre
l’offset viene specificato tramite un registro indice
 L’indirizzo è dato dalla somma dell’indirizzo associato
all’etichetta con il contenuto del registro indice.
Esempio: lw $t0, array($t1)
SIMBOLICO con spiazzamento a
registro
Esempio: lw $t0, array($t1)
array=10001100
+
00000101
$t1
00000101
$t0
00000010
00000010
…
10010000
10010001
10010010
10010011
…
SIMBOLICO con spiazzamento a
a spiazzamento a registro
Relocatable-symbol ± expression(index register)
 Specifica un indirizzo base tramite una etichetta, mentre
l’offset viene specificato tramite un registro indice e
un’espressione
 L’indirizzo è dato dalla somma dell’indirizzo associato
all’etichetta con il contenuto del registro indice e il risultato
dell'espressione.
Esempio: lw $t0, array + 4($t1)
SIMBOLICO con spiazzamento a
a spaziamento a registro
Esempio: lw $t0, array+4($t1)
array=10001100
+
+
00000100
00000001
$t1
00000001
$t0
00000010
00000010
…
10010000
10010001
10010010
10010011
…
Scarica

indir - GEOCITIES.ws