Sei sulla pagina 1di 30

1 Livello dell’Instruction Set Architecture (ISA)

Modalità di indirizzamento
Modalità di indirizzamento
22

Il formato di una istruzione contiene


¤ Operazione
¤ Riferimenti espliciti agli operandi
Ogni operando esplicito viene riferito usando una
modalità di indirizzamento
Indirizzamento di operandi
26

Un operando può essere memorizzato:


¤ Nell’istruzionestessa
¤ In memoria principale
¤ In un registro

A seconda di dove si trova l’operando e di come


è referenziato, si ottiene una diversa modalità di
indirizzamento
Ogni architettura supporta un certo numero di
modalità di indirizzamento
Modalità di indirizzamento
23

Come può l’unità di controllo determinare qual è


la modalità di indirizzamento utilizzata in una
data istruzione?
¤ La modalità di indirizzamento o è implicita nel
codice operativo dell’istruzione macchina o è
specificata mediante uno o più bit che costituiscono
un “campo modalità” il cui valore determina quale
modo di indirizzamento si sta utilizzando in quella
istruzione
Formato d’istruzione dell’8086
24

1 byte 1 byte
xxxxxxxx
opcode
2 bit 3 bit 3 bit

MOD. REG. R/M

modalità di indirizzamento

NB: La decodifica della istruzione comporta la lettura dei campi Opcode, MOD e R/M
Formato d’istruzione dell’8086
25

1 byte
opcode Istruzione di 1 byte – operandi impliciti

opcode reg Istruzione di 1 byte – operando in un registro

opcode mod reg r/m Istruzione di 2 byte

opcode mod reg r/m


Istruzione di 4 byte
Indirizzamento immediato
27

L’operando è contenuto direttamente nel campo


operandi dell’istruzione
Opcode operando

¤ MOV AX,2475
¤ ADD AX,3

VANTAGGIO: L’esecuzione dell’istruzione è immediata, poiché


non richiede un ciclo di lettura dalla memoria (operand fetch)
SVANTAGGIO: il valore dell’operando è limitato dalla
lunghezza del campo operandi (generalmente inferiore a una
word)
Indirizzamento implicito
28

L’operando (o il riferimento ad esso) è in un


particolare registro specificato implicitamente
nel codice operativo dell’istruzione
¤ Accumulatore (AX)
¤ Stack pointer (SP)

Opcode Opcode

Operando
Operando Indirizzo
accumulatore SP stack
Indirizzamento implicito (8086)
29

Indirizzamento implicito ad accumulatore


DIV A divide AX per A
MUL BX moltiplica AX per BX

Indirizzamento implicito a stack pointer


Push AX SPßSP-2; [SP]ß AX;
Pop BX BXß [SP]; SPßSP+2
Indirizzamento a registro
30

L’operando è in un registro specificato nel campo


indirizzi dell’istruzione
Opcode registro operando
registro
¤ VANTAGGI
■ Accesso molto rapido ai registri
■ Campo indirizzi di pochi bit

Esempi
¤ MOV DX,AX
¤ MOV AH,BL
Indirizzamento diretto
31

L’operando è in memoria principale all’indirizzo


specificato nel campo indirizzi dell’istruzione
istruzione

Opcode indirizzo operando Locazione di


memoria

Esempio: MOV AX, Var

SVANTAGGIO
¤ Richiede un ciclo di lettura in memoria per accedere al dato
Indirizzamento diretto (8086)
32

Il campo indirizzi dell’istruzione contiene


l’offset all’interno del segmento
¤ Il riferimento al segmento dati è implicito
Esempio
MOV AX,VAR
DS
Data
MOV AX Offset(VAR) segment
16 bit + 00000000
VAR
11111111
AX
11111111 00000000
AH AL Ordinamento little endian
Indirizzamento indiretto con registro
33

L’operando è in memoria principale


Nel registro riferito nel campo indirizzi
dell’istruzione è presente l’offset dell’operando
istruzione
Locazione
Opcode registro operando di memoria

indirizzo
registro

¤ Campo indirizzi più piccolo


¤ Si evita un doppio accesso alla memoria
Indirizzamento indiretto con registro (8086)
34

Si utilizza il registro base (BX) o un registro


indice (DI, SI)
¤ Indirizzamento indiretto con registro base
¤ Indirizzamento indiretto con registro indice
Indirizzamento indiretto con registro base (8086)
35

• Esempio
MOV BX,OFFSET VAR
MOV AX,[BX]

MOV AX BX DS

BX Offset VAR +
00000000 VAR
11111111
AX 11111111 00000000
AH AL
Indirizzamento indiretto 

con registro indice (8086)
36

• Esempio
MOV SI,OFFSET VAR
MOV AX,[SI]

MOV AX SI DS

SI Offset VAR +
00000000 VAR
11111111
AX 11111111 00000000
AH AL
Indirizzamento indicizzato
37

L’operando è in memoria
L’offset dell’operando è ottenuto sommando
due valori:
¤ un valore è contenuto in un registro specificato
nell’istruzione
¤ un valore è contenuto nell’istruzione

Opcode registro val2

val1 + operando Locazione di


memoria
registro
Indirizzamento indicizzato (8086)
38

Due tipi di indirizzamento indicizzato a seconda


del registro utilizzato:
¤ Indicizzato con registro base
■ Il valore nel registro è un indirizzo di base, mentre il
valore nell’istruzione è un displacement da sommare
all’indirizzo base
¤ Indicizzato con registro indice
■ Il valore nel registro è un displacement (indice), mentre
il valore nell’istruzione è un indirizzo di base
Indirizzamento indicizzato con registro base
(8086)
39

L’offset dell’operando si ottiene sommando un valore


(displacement) al contenuto del registro base (BX)
MOV BX, OFFSET VAR
DS
MOV AL,[BX]+4

base
Offset di VAR + VAR
BX
4

MOV AL BX 4 + 01001100

AX 01001100
AH AL
Indirizzamento indicizzato con registro base
(8086)
40

Esempio
¤ MOV AL, [BX]+4
Forme equivalenti
¤ MOV AL, 4[BX]
¤ MOV AL, [BX+4]
Indirizzamento indicizzato con registro indice
(8086)
41

L’offset dell’operando si ottiene sommando il


contenuto di un registro indice (SI o DI) ad un
valore contenuto nell’istruzione

Adatto per accedere agli elementi di un array


¤ L’istruzione contiene l’offset del 1° elemento dell’ array
¤ Il registro indice contiene il displacement rispetto al primo
elemento, cioè l’indice dell’elemento
Indirizzamento indicizzato con registro indice
(8086)
42

MOV DI, 4 DS
MOV AL,VAR[DI]

MOV AL DI Offset VAR + VAR

DI Displacement=4 + 01001100

AX 01001100
AH AL
Indirizzamento indicizzato con base + indice
(8086)
43

L’offset dell’operando si ottiene come somma di due valori:


¤ Il contenuto di un registro base (BX)
¤ Il contenuto di un registro indice (SI o DI)

Il riferimento ai due registri è specificato nell’istruzione


Utile per accedere agli elementi di una matrice
¤ il registro base può contenere l’offset d’inizio di una riga
della matrice
¤ il registro indice può contenere il displacement di un
elemento all’interno della riga
Indirizzamento indicizzato con registro
base+indice (8086)
44

MOV AX,[BX+DI] DS

Offset riga 1 mat[1][1]


BX (16 bit)
mat[1][2]
MOV AX BX DI + + 00000000 mat[1][3]
11111111
mat[2][1]
Displacement
DI (16 bit) mat[2][2]
MATRICE
2x3 mat[2][3]
AX 11111111 00000000
AH AL
Indirizzamento indicizzato con registro
base+indice (8086)
45

Esempio
¤ MOV AX, [BX+DI]
Forme equivalenti
¤ MOV AX, [BX][DI]
¤ MOV AX, [BX]+[DI]
Indirizzamento indicizzato con 

base+ indice+displacement (8086)
46

L’offset dell’operando si ottiene come somma di tre


valori:
¤ il contenuto del registro base (BX)
¤ il contenuto di un registro indice (SI o DI)
¤ un displacement, che può essere un identificatore di
variabile oppure una costante numerica
Sia i riferimenti ai registri base e indice che il
displacement sono specificati nell’istruzione
Indirizzamento indicizzato con
base+indice+displacement (8086)
47

DS
MOV AX, mat[BX+DI]
MOV AX BX DI Offset mat mat[1][1]

mat[1][2]
+ + 00000000 mat[1][3]
DI (16 bit) 11111111
mat[2][1]

mat[2][2]
BX (16 bit) MATRICE
2x3 mat[2][3]
AX 11111111 00000000
AH AL
Modalità di indirizzamento dell’8086
48

Indirizzamento immediato
Indirizzamento implicito
¤A registro
¤A stack
Indirizzamento a registro
Indirizzamento diretto
Indirizzamento indiretto con registro
Indirizzamento indicizzato
¤ Con registro base
¤ Con registro indice
¤ Con registro base+indice
¤ Con registro base+indice+displacement
Metodi di indirizzamento (1)
49

Nell’istruzione Nel registro In memoria


IMMEDIATO operando
DIRETTO offset operando

IMPLICITO a registro operando


IMPLICITO a stack offset operando
A REGISTRO n. registro operando
INDIRETTO
CON REGISTRO n. registro offset operando
Metodi di indirizzamento (2)
50

Nell’istruzione Nel registro In memoria


n. registro offset + operando
Indicizzato
con registro BASE Displ.

Indicizzato n. registro Displ. + operando


con registro INDICE indirizzo

Indicizzato n. registro valore


con registro + operando
BASE+INDICE n. registro valore
Indicizzato n. registro valore
con registro + operando
BASE+INDICE+displ. n. registro valore
Displ.

Potrebbero piacerti anche