Scarica il file con gli appunti sullo Z80

         Documento PDF

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.

INI

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.

INIR

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

 

IND

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

INDR

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.

OUT ( C ),r

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.

OUTI

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

OUTD

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

OUTI

OTDR

Come OUTD, ma viene eseguito automaticamente più volte finche si annulla il contatore B.

Rimasugli

CCF

Complementa il flag di carry. Il vecchio flag di carry viene memorizzato nel flag H.

S

Z

 

H

 

P/V

N

C

 

 

 

*  

 

 

0

*  

 

SCF

Pone il flag di carry ad 1.

S

Z

 

H

 

P/V

N

C

 

 

 

0

 

 

0

1

 

NOP

IL microprocessore non esegue alcuna operazione. Viene usata per introdurre un ritardo nello svolgimento di un’istruzione.

HALT

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