La modalità di indirizzamento dei dati è la tecnica con cui, all’interno di un’istruzione si individua l’operando su cui l’istruzione stessa deve agire
Lo Z80 possiede dieci modi diversi di indirizzamento dei dati.
Immediato. In questo caso il
dato da elaborare è espresso già all’interno dell’istruzione. Ad esempio,
nell’istruzione ADD A, 20h il dato da sommare all’accumulatore è il
numero 20h che è già espresso all’interno dell’istruzione
Immediato esteso. E’ il caso
simile al precedente in cui il dato si compone di due byte. Ad esempio LD HL,
3125h
Con registri. In questo caso il
dato è contenuto in un registro del microprocessore. Ad esempio ADD A; B: il
dato da sommare all’accumulatore è contenuto nel registro B.
Implicito. L’operando è
implicito, cioè non espresso. Ad esempio, nell’istruzione CPL che complementa
l’accumulatore è implicito che l’operando sia l’accumulatore stesso.
Diretto o assoluto o esteso.
L’operando è un dato contenuto in una locazione di memoria il cui indirizzo è
espresso direttamente nell’istruzione. Ad esempio LD A, (452Fh): in
questo caso l’operando è contenuto nella locazione di memoria di indirizzo 452Fh
, indirizzo che appare nell’istruzione.
Indiretto. L’operando è un dato
contenuto in una locazione di memoria il cui indirizzo è contenuto in un
registro a 16 bit detto anche puntatore. Per lo Z80 questo registro è HL anche
se per un’istruzione di load che coinvolga l’accumulatore si possono usare come
puntatori anche i registri BC e DE. Ad esempio, ADD A, (HL). Per eseguire
quest’operazione il microprocessore deve leggere il contenuto del registro HL,
accedere in memoria a questo indirizzo, prelevare il contenuto della locazione
così individuata e sommarlo all’accumulatore.
Indicizzato. In questo caso
l’operando è un dato contenuto in una locazione di memoria. L’indirizzo di
questa locazione si ottiene sommando il contenuto di un registro indice (IX o
IY) con uno spiazzamento, cioè un numero a otto bit (che può valere, quindi,
tra –128 a +127) espresso direttamente nell’istruzione.
Es. LD A, (IX+2)
Facciamo un esempio per mostrare l’utilità di questo tipo di indirizzamento. Supponiamo di voler scrivere un segmento di programma il cui scopo sia di manipolare un’area di memoria di cento dati, sostituendo ogni dato con la somma dei dati contenuti nelle due locazioni che lo seguono. Proviamo a scrivere questo segmento di programma senza utilizzare l’indirizzamento indicizzato.
LD B, 64H
;64H = 10010 è
il numero delle locazioni su cui volgiamo operare, B funge dunque da contatore
LD HL, 1A00H
; supponiamo che 1A00H sia
l’indirizzo della prima locazione del blocco su cui volgiamo operare
;la prima locazione da sommare si trova dopo la locazione corrente
LD A, (HL)
INC HL
;la seconda locazione si trova
ancora un indirizzo dopo
ADD A, (HL)
DEC HL
DEC HL
;ora devo sostituire il dato
nella locazione di partenza per cui devo far retrocedere di due posizioni
LD (HL), A
INC HL
DEC B
JP NZ, ET
; controllo se ho eseguito 100
volte l’operazione
la versione con l’indirizzamento indicizzato è molto più semplice e non costringe a spostare il puntatore avanti e indietro
LD B, 64H
;64H = 10010 è
il numero delle locazioni su cui volgiamo operare, B funge dunque da contatore
LD IX, 1A00H
; supponiamo che 1A00H sia
l’indirizzo della prima locazione del blocco su cui volgiamo operare
ET: LD A, (IX+1)
ADD A, (IX+2)
LD (IX), A
INC IX
DEC B
JP NZ, ET
Relativo. Si usa nelle
istruzioni di salto relativo, in cui la locazione cui saltare si ottiene
sommando al contenuto del Program Counter uno spiazzamento costituito da un
byte (che può assumere un valore compreso fra –128 e +127)
Pagina zero. Già introdotto
quando abbiamo parlato delle istruzioni di restart RST. Abbiamo visto che
l’indirizzo viene formato esprimendo esplicitamente soltanto la parte bassa (le
ultime due cifre esadecimali) mentre la parte alta si presuppone implicitamente
pari a zero.
A bit. Istruzioni come Bit, SET
e RESET sono in grado di agire sul singolo bit di un operando. Ad esempio, RES
3, (HL) significa che si vuole resettare il bit 3 (il quarto bit) della
locazione di memoria il cui indirizzo è contenuto in HL.