Scarica il file con gli
appunti sullo Z80
Istruzioni di IN e OUT
IN A,(N)
Quest’istruzione consente il dialogo fra microprocessore e periferica
d’indirizzo N. In particolare essa consente di leggere un byte dalla periferica
d’indirizzo specificato direttamente nell’istruzione e di caricarlo nel
registro A.
Non ha alcun effetto sul registro dei flag.
ES.
IN A, (B2)

IN r, (C)
Quest’istruzione è del tutto identica alla precedente. La
differenza principale consiste nel fatto che la periferica non può essere indirizzata
in maniera diretta, esprimendo direttamente il suo indirizzo all’interno
dell’istruzione. Esso deve essere contenuto nel registro C. Il registro C
funge, insomma, da puntatore alla periferica. Si ricordi che, per lo Z80, le
periferiche hanno un indirizzo ad 8 bit per cui un registro ad 8 bit può
funzionare da puntatore. Altra differenza rispetto all’istruzione precedente è
che viene modificato il registro dei flag.
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
|
|
|
0 |
|
|
0 |
|
S indica il segno del byte restituito
dalla periferica
Z indica se il byte restituito dalla
periferica è nullo o diverso da zero
Il flag PV funge da flag di parità: se
il numero di bit ad uno nel byte ricevuto è pari il flag sarà posto ad uno. Se
il numero di bit ad uno del byte ricevuto è dispari il flag sarà posto a zero.
Quest’istruzione serve anch’essa per prelevare e memorizzare
dati da una periferica. La periferica è sempre indirizzata in modo indiretto
tramite il registro C, cioè il suo indirizzo è dato dal contenuto del registro
C. essa è, però, utilizzata nell’ipotesi che si vogliono prelevare molti dati
in sequenza dalla periferica. Essa preleva il dato dalla periferica e lo
memorizza allora in un’area di memoria puntata dal registro HL, cioè
(HL) ß (C )
Poiché si presuppone che debbano essere prelevati altri dati
, essa usa come contatore il registro B, quindi esso viene decrementato
automaticamente
B ß B-1
Anche Hl viene incrementato in modo che il prossimo dato
venga inserito nella locazione successiva.
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
? |
|
|
? |
|
? |
1 |
|
S , H e P/V assumono un contenuto
casuale
N viene posto sempre ad 1
Z è posto ad 1 se B diventa nullo dopo l’esecuzione
dell’istruzione, altrimenti è posto a zero.
E’ identico ad INI, però, a differenza di questo, viene
eseguito automaticamente più volte, finché si annulla il contatore B.
Modifica il registro dei flag nel modo seguente
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
? |
1 |
|
? |
|
? |
1 |
|
S , H e P/V assumono un contenuto
casuale
N viene posto sempre ad 1
Z è posto ad 1 poiché B si è annullato
Assolve le stesse funzioni dell’istruzione INI , ma in questo
caso si presuppone che HL stia puntando alla locazione di indirizzo più elevato
del banco di memoria destinato ad ospitare i dati, per cui Hl viene
decrementato anziché incrementato. Modifica il registro dei flag nella stessa
maniera. Viene eseguito una sola volta come INI
Come IND, ma viene eseguito automaticamente più volte finche
si annulla il contatore B.
OUT (N), A
Quest’istruzione consente il dialogo fra microprocessore e
periferica d’indirizzo N. In particolare essa consente di inviare un byte alla periferica d’indirizzo
specificato direttamente nell’istruzione, e proveniente dal registro A.
Non ha alcun effetto sul registro dei flag.
Quest’istruzione è del tutto identica alla precedente. La
differenza principale consiste nel fatto che la periferica non può essere
indirizzata in maniera diretta, esprimendo direttamente il suo indirizzo
all’interno dell’istruzione. Esso deve essere contenuto nel registro C. Il
registro C funge, insomma, da puntatore alla periferica. Si ricordi che, per lo
Z80, le periferiche hanno un indirizzo ad 8 bit per cui un registro ad 8 bit
può funzionare da puntatore. Non modifica il registro dei flag.
Quest’istruzione serve per inviare dati ad una periferica.
La periferica è sempre indirizzata in modo indiretto tramite il registro C,
cioè il suo indirizzo è dato dal contenuto del registro C. Essa è, però,
utilizzata nell’ipotesi che si vogliono inviare molti dati in sequenza alla
periferica. Essa preleva il dato da un’area di memoria puntata dal registro
HL, e lo invia alla periferica cioè
(C ) ß (HL)
Poiché si presuppone che debbano essere prelevati altri dati
, essa usa come contatore il registro B, quindi esso viene decrementato
automaticamente
B ß B-1
Anche HL viene incrementato in modo che il prossimo dato
venga inserito nella locazione successiva.
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
? |
|
|
? |
|
? |
1 |
|
S , H e P/V assumono un contenuto
casuale
N viene posto sempre ad 1
Z è posto ad 1 se B diventa nullo dopo l’esecuzione dell’istruzione,
altrimenti è posto a zero.
OTIR
E’ identico ad INI, però, a differenza di questo, viene
eseguito automaticamente più volte, finché si annulla il contatore B.
Modifica il registro dei flag nel modo seguente
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
? |
1 |
|
? |
|
? |
1 |
|
S , H e P/V assumono un contenuto
casuale
N viene posto sempre ad 1
Z è posto ad 1 poiché B si è annullato
Come OUTD, ma viene eseguito automaticamente più volte
finche si annulla il contatore B.
Complementa il flag di carry. Il vecchio flag di carry viene
memorizzato nel flag H.
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
|
|
|
|
|
|
0 |
|
Pone il flag di carry ad 1.
|
S |
Z |
|
H |
|
P/V |
N |
C |
|
|
|
|
0 |
|
|
0 |
1 |
IL microprocessore non esegue alcuna operazione. Viene usata
per introdurre un ritardo nello svolgimento di un’istruzione.
La CPU si pone in uno stato di idle, cioè di ozio ed esegue
solo cicli di rinfresco delle memorie dinamiche. Esce da questo stato soltanto
con un’interruzione o con un resettaggio del microprocessore