Architettura degli Elaboratori II (canale P-Z) Modi di Indirizzamento Dott. Franco Liberati.
-
Upload
vittorio-caselli -
Category
Documents
-
view
222 -
download
1
Transcript of Architettura degli Elaboratori II (canale P-Z) Modi di Indirizzamento Dott. Franco Liberati.
Architettura degli Architettura degli Elaboratori IIElaboratori II
(canale P-Z)(canale P-Z)
Modi di IndirizzamentoModi di Indirizzamento
Dott. Franco LiberatiDott. Franco Liberati
Argomenti
Assoluto Immediato A Registro Incremento
SPOSTAMENTOSPOSTAMENTO
LOGICO-ARITMETICHELOGICO-ARITMETICHE
SALTOSALTO
SISTEMASISTEMA
Modi di indirizzamento
Un modo di indirizzamento è un modo per esprimere un indirizzo di memoriaNB: 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 indirizzamentoimm(register)
dove l’indirizzo è dato dalla somma del valore immediato imm più il contenuto del registro register
Esempio: lw $t0, 4($sp) (legge una word dall’indirizzo $sp + 4)
OPCODEOPCODE MODO DI INDIRIZZAMENTOMODO DI INDIRIZZAMENTO
Modi di IndirizzamentoModi di Indirizzamentoinin
SPIMSPIM
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 REGISTROlb $t0,($a0)
1000110110001101
00000010
00000010
$t0$t0
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
IMMEDIATOlb $t0, 0x00 00 00 8Dlb $t0, 0x00 00 00 8D
……
1000110110001101
00000010
00000010
$t0$t0
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 + 4lb $t0, 0x00 00 00 8D + 4
……1001000010010000100100011001000110010010100100101001001110010011
……
++
100100
1000110110001101
00000010
00000010
$t0$t0
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'espressioneEsempio: lw $t0, 4($sp)
IMMEDIATO A REGISTROEsempio: lw $t0, 4($sp)
……1001000010010000100100011001000110010010100100101001001110010011
……
++
100100
1000110110001101
00000010
00000010
$t0$t0
10001101 $sp$sp
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
……
……
operanA=10010001operanA=10010001
00000010
00000010
$t0$t0
1001000010010000100100011001000110010010100100101001001110010011
Esempio: lw $t0, operandA
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’espressioneEsempio: lw $t0, operandoB + 4
SIMBOLICO con spiazzamento
Esempio: lw $t0, operandB+4
……
……
operandoB=10001101operandoB=10001101
00000010
00000010
$t0$t0
1001000010010000100100011001000110010010100100101001001110010011
++
100100
SIMBOLICO con spiazzamento a registroRelocatable-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
……
……
array=10001100array=10001100
00000010
00000010
$t0$t0
1001000010010000100100011001000110010010100100101001001110010011
++
0000010100000101
$t1$t1 00000101
Esempio: lw $t0, array($t1)
SIMBOLICO con spiazzamento a a spiazzamento a registroRelocatable-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=10001100array=10001100
00000010
00000010
$t0$t0
1001000010010000100100011001000110010010100100101001001110010011
++
0000000100000001
$t1$t1 00000001
++0000010000000100