Architettura degli Elaboratori II (canale P-Z) Modi di Indirizzamento Dott. Franco Liberati
Argomenti Assoluto Immediato A Registro IncrementoSISTEMASALTO LOGICO- ARITMETICHE SPOSTAMENTO
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 lindirizzo è dato dalla somma del valore immediato imm più il contenuto del registro register Esempio: lw $t0, 4($sp) (legge una word dallindirizzo $sp + 4) OPCODE MODO DI INDIRIZZAMENTO
Modi di Indirizzamento in SPIM
Modi di indirizzamento Lassembler 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 allindirizzo 0x assumendo: array = 0x e $t0 = 4 )
A REGISTRO (base register) Specifica un indirizzo tramite registro base, assumendo un offset 0. Lindirizzo è dato dal contenuto del base register Esempio: lb $t0,($a0)
A REGISTRO lb $t0,($a0) $t0
IMMEDIATO (expression) Specifica un indirizzo assoluto con una espressione L'indirizzo è dato dal valore presente nel campo indirizzo. Esempio: lb $t0, 0x
IMMEDIATO lb $t0, 0x D … $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, 0x I numeri negativi vanno comunque preceduti anche dal simbolo +. Esempio: lb $t0, 0x c + -4
IMMEDIATO con spiazzamento lb $t0, 0x D + 4 … … $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'espressione Esempio: lw $t0, 4($sp)
IMMEDIATO A REGISTRO Esempio: lw $t0, 4($sp) … … $t $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= $t Esempio: lw $t0, operandA
SIMBOLICO con spiazzamento Relocatable-symbol ± expression Specifica un indirizzo base tramite una etichetta, mentre loffset viene specificato tramite unespressione Lindirizzo è dato dalla somma dellindirizzo associato alletichetta con il risultato dellespressione Esempio: lw $t0, operandoB + 4
SIMBOLICO con spiazzamento Esempio: lw $t0, operandB+4 … … operandoB= $t
SIMBOLICO con spiazzamento a registro Relocatable-symbol(index register) Specifica un indirizzo base tramite una etichetta, mentre loffset viene specificato tramite un registro indice Lindirizzo è dato dalla somma dellindirizzo associato alletichetta con il contenuto del registro indice. Esempio: lw $t0, array($t1)
SIMBOLICO con spiazzamento a registro … … array= $t $t Esempio: lw $t0, array($t1)
SIMBOLICO con spiazzamento a a spiazzamento a registro Relocatable-symbol ± expression(index register) Specifica un indirizzo base tramite una etichetta, mentre loffset viene specificato tramite un registro indice e unespressione Lindirizzo è dato dalla somma dellindirizzo associato alletichetta 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= $t $t