Architettura degli Elaboratori II (canale P-Z) Modi di Indirizzamento Dott. Franco Liberati.

Post on 02-May-2015

222 views 1 download

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