Scarica il file zippato con tutti gli appunti z80

Documento PDF

 

 

 

Casella di testo: Istruzioni di tra-sferimento di dati

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD dd, (nn)

Con questa istruzione, il registro a 16 bit dd è caricato con il contenuto della coppia di locazioni di memoria di indirizzo nn ed nn+1.

La parte bassa del registro è caricata con il contenuto della locazione nn mentre la parte alta è caricata con il contenuto della locazione di indirizzo nn+1.

L’istruzione non ha alcun effetto sul registro dei flag

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Esempio:

LD BC, (1B00h)

 

Prima

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IL registro dd può essere uno dei seguenti

BC

DE

HL

SP

IX

IY

 

 

 

 

 

 

 

 

 

 

 

 

LD (nn), dd

Con questa istruzione, la coppia di locazioni di memoria di indirizzo nn ed nn+1 è caricato con il contenuto del registro a 16 bit dd.

La locazione di indirizzo nn è caricata con la parte bassa del registro dd e la locazione di indirizzo nn+1 è caricata con il contenuto della parte alta del registro.

L’istruzione non ha alcun effetto sul registro dei flag

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Esempio:

LD (1B00h), BC

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

IL registro dd può essere uno dei seguenti

BC

DE

HL

SP

IX

IY

 

 

 

 

 

 

 

 

 

 

LD dd, nn

La coppia di registri a 16 bit viene caricata con il dato immediato a 16 bit presente nell’istruzione.

L’istruzione non ha alcun effetto sul registro dei flag

Esempio:

LD SP, 3C20h

Prima

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD r, n

IL registro ad otto bit r viene caricato con il dato ad otto bit immediatamente espresso nell’istruzione.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio

LD B, 23h

Prima

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

IL registro r può essere uno dei seguenti:  A, B, C, D, E, H, L

 

 

Ld r, r’

Carica il registro ad otto bit r con il contenuto del registro ad otto bit r’.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio

LD H, A

Prima

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

IL registro r ed il registro r’ possono essere uno dei seguenti:  A, B, C, D, E, H, L

 

 

 

LD (BC), A

IL contenuto dell’accumulatore viene caricato in una locazione di memoria indirizzata in modo indiretto poiché il suo indirizzo è contenuto nel registro BC. Da notare che il registro BC si può usare per realizzare l’indirizzamento indiretto soltanto nei LOAD.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio:

LD (BC), A

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD A, (BC)

L’accumulatore viene caricato con il contenuto di una locazione di memoria indirizzata in modo indiretto poiché il suo indirizzo è contenuto nel registro BC. Da notare che il registro BC si può usare per realizzare l’indirizzamento indiretto soltanto nei LOAD.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio:

LD A, (BC)

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (DE), A

IL contenuto dell’accumulatore viene caricato in una locazione di memoria indirizzata in modo indiretto poiché il suo indirizzo è contenuto nel registro DE. Da notare che il registro DE si può usare per realizzare l’indirizzamento indiretto soltanto nei LOAD.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio:

LD (DE), A

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD A, (DE)

L’accumulatore viene caricato con il contenuto di una locazione di memoria indirizzata in modo indiretto poiché il suo indirizzo è contenuto nel registro DE. Da notare che il registro DE si può usare per realizzare l’indirizzamento indiretto soltanto nei LOAD.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio:

LD A, (DE)

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (HL), n

La locazione di memoria il cui indirizzo è contenuto nel registro HL (indirizzamento indiretto) viene caricata con il dato ad otto bit n espresso direttamente nell’istruzione.

Esempio: LD (HL), 18h

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (HL), r

La locazione di memoria il cui indirizzo è contenuto nel registro HL (indirizzamento indiretto) viene caricata con il dato ad otto bit contenuto nel registro r.

Esempio:LD (HL), B

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD r, (HL)

Il registro ad otto bit r viene caricato con la locazione di memoria il cui indirizzo è contenuto nel registro HL (indirizzamento indiretto).

Esempio:LD B, (HL)

 

 

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD r, (IX+d)

Il registro ad otto bit r viene caricato con la locazione di memoria il cui indirizzo si ottiene sommando il contenuto nel registro IX con lo piazzamento d  (indirizzamento indicizzato).

Esempio:LD B, (IX+2)

 

 

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (IX+d), r

La locazione di memoria il cui indirizzo si ottiene sommando il contenuto del registro IX e lo spiazzamento d (indirizzamento indicizzato) viene caricata con il contenuto del registro ad otto bit r

Esempio:LD (IX+2), B

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD r, (IY+d)

Il registro ad otto bit r viene caricato con la locazione di memoria il cui indirizzo si ottiene sommando il contenuto nel registro IY con lo piazzamento d  (indirizzamento indicizzato).

Esempio:LD B, (IY+2)

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (IY+d), r

La locazione di memoria il cui indirizzo si ottiene sommando il contenuto del registro IY e lo spiazzamento d (indirizzamento indicizzato) viene caricata con il contenuto del registro ad otto bit r

Esempio:LD (IY+2), B

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (IX+d), n

La locazione di memoria il cui indirizzo si ottiene sommando il contenuto nel registro IX con lo piazzamento d  (indirizzamento indicizzato) viene caricata con il dato ad otto bit espresso immediatamente nell’istruzione.

Esempio:LD  (IX+2), 20h

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD (IY+d), n

La locazione di memoria il cui indirizzo si ottiene sommando il contenuto nel registro IY con lo piazzamento d  (indirizzamento indicizzato) viene caricata con il dato ad otto bit espresso immediatamente nell’istruzione.

Esempio:LD  (IY+2), 20h

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD A, (nn)

L’accumulatore viene caricato con il contenuto della locazione di memoria il cui indirizzo è espresso direttamente nell’istruzione (indirizzamento diretto).

Esempio:LD A, (1A00)

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD  (nn), A

La locazione di memoria il cui indirizzo è espresso direttamente nell’istruzione (indirizzamento diretto), viene caricata con il contenuto dell’accumulatore.

Esempio:LD (1A00), A

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LD A, I

L’accumulatore viene caricato con il contenuto del registro I

Prima

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

O

 

X

O

 

Il flag S viene settato a seconda del segno del dato trasferito.

IL flag Z viene settato ad uno se il dato trasferito è nullo, altrimenti viene posto a zero.

I flag H ed N vengono posti sempre a zero

IL falg P/V assume il valore del registro IFF2

Gli altri flag non vengono modificati

LD I, A

IL registro I viene caricato con il contenuto dell’accumulatore

Prima

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Modifiche al registro dei flag

Il registro dei flag non viene modificato

 

 

 

 

 

LD A, R

L’accumulatore viene caricato con il contenuto del registro R

Prima

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

O

 

X

O

 

Il flag S viene settato a seconda del segno del dato trasferito.

IL flag Z viene settato ad uno se il dato trasferito è nullo, altrimenti viene posto a zero.

I flag H ed N vengono posti sempre a zero

IL falg P/V assume il valore del registro IFF2

Gli altri flag non vengono modificati

LD R, A

IL registro R viene caricato con il contenuto dell’accumulatore

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

Modifiche al registro dei flag

Il registro dei flag non viene modificato

 

 

 

 

 

 

 

LD SP, dd

Lo Stack Pointer viene caricato con il contenuto del registro a sedici bit dd.

Il registro dd può essere uno dei seguenti: HL, IX, IY.

Non viene modificato il registro dei flag.

Esempio:LD SP, IX

Prima

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

LDD

Questa istruzione viene utilizzata quando si vuole trasferire un blocco di dati da una zona all’altra della memoria

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In questo caso occorrono

*   un puntatore alla zona di memoria sorgente dei dati, cioè un registro a 16 bit contenente l’indirizzo della locazione da cui prelevare il dato che è il registro HL,

*   un puntatore alla zona di memoria destinazione dei dati, cioè un registro a 16 bit contenente l’indirizzo della locazione in cui spostare il dato, che è il registro DE

*   un registro che faccia da contatore per conoscere quando sarà stato terminato il processo di trasferimento dei dati, che è il registro BC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In questa istruzione si parte dalle locazioni di indirizzo più elevato e si prosegue verso le locazioni di indirizzo più basso.

Ogni volta che viene eseguita l’istruzione  viene letto il dato contenuto nella locazione puntata da HL, viene trasferito nella locazione puntata da DE, vengono decrementati Hl, DE ed il contatore BC.

(DE)ß  (HL)

DE=DE-1

HL=HL-1

BC=BC-1

Esempio

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Effetto sul registro dei flag

 

S

Z

 

H

 

P/V

N

C

 

 

 

O

 

X

O

 

 

*   IL flag H ed il flag N sono posti a zero

*   IL flag P/V viene utilizzato per sapere se si è completato il trasferimento dei dati, cioè se il contatore BC è arrivato a zero. Infatti se BC è diverso da zero dopo l’esecuzione dell’istruzione, il flag è posto ad uno, se BC è arrivato a zero , il flag viene posto a zero.

 

 

 

 

 

 

 

 

LDDR

Con l’istruzione LDD viene trasferito soltanto un dato. Per effettuare il trasferimento di tutto il blocco di dati occorre inserire l’istruzione in un ciclo, in modo da farne ripetere l’esecuzione fino a che il contatore BC non giunga a zero.

Esempio

LD HL , 1A63 ; limite blocco sorgente

LD DE, 1B63 ; limite blocco destinazione

LD BC, 0004 ; caricamento contatore

                                      ET: LDD

                                                    JP PE, ET ; PE =effettua il salto se P/V=1

Alternativamente si può utilizzare l’istruzione LDDR. Quest’istruzione esegue tutte le funzioni dell’istruzione LDD (trasferimento di un dato dal blocco sorgente al blocco destinazione, decremento dei puntatori DE ed Hl e del contatore BC) non una sola volta ma iterativamente fino a che il contatore non si sia azzerato.

Esempio: trasferimento di un blocco di quattro byte; blocco sorgente dall’indirizzo 1A60h all’indirizzo 1A63h; blocco destinazione dall’indirizzo 1B60h all’indirizzo 1B63h

 

 

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Effetto sul registro dei flag

 

S

Z

 

H

 

P/V

N

C

 

 

 

O

 

O

O

 

 

*   IL flag H, il flag PV ed il flag N sono posti a zero

 

 

 

 

 

 

 

 

 

 

 

LDI

Questa istruzione viene utilizzata quando si vuole trasferire un blocco di dati da una zona all’altra della memoria

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In questo caso occorrono

*   un puntatore alla zona di memoria sorgente dei dati, cioè un registro a 16 bit contenente l’indirizzo della locazione da cui prelevare il dato che è il registro HL,

*   un puntatore alla zona di memoria destinazione dei dati, cioè un registro a 16 bit contenente l’indirizzo della locazione in cui spostare il dato, che è il registro DE

*   un registro che faccia da contatore per conoscere quando sarà stato terminato il processo di trasferimento dei dati, che è il registro BC

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

In questa istruzione si parte dalle locazioni di indirizzo più basso e si prosegue verso le locazioni di indirizzo più elevato.

Ogni volta che viene eseguita l’istruzione  viene letto il dato contenuto nella locazione puntata da HL, viene trasferito nella locazione puntata da DE, vengono incrementati Hl, DE e decrementato il contatore BC.

(DE) ß (HL)

DE=DE+1

HL=HL+1

BC=BC-1

Esempio

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Effetto sul registro dei flag

 

S

Z

 

H

 

P/V

N

C

 

 

 

O

 

X

O

 

 

*   IL flag H ed il flag N sono posti a zero

*   IL flag P/V viene utilizzato per sapere se si è completato il trasferimento dei dati, cioè se il contatore BC è arrivato a zero. Infatti se BC è diverso da zero dopo l’esecuzione dell’istruzione, il flag è posto ad uno, se BC è arrivato a zero , il flag viene posto a zero.

 

 

 

 

 

 

 

 

LDIR

Con l’istruzione LDI viene trasferito soltanto un dato. Per effettuare il trasferimento di tutto il blocco di dati occorre inserire l’istruzione in un ciclo, in modo da farne ripetere l’esecuzione fino a che il contatore BC non giunga a zero.

Esempio

LD HL , 1A60 ; limite inferiore blocco sorgente

LD DE, 1B60 ; limite blocco destinazione

LD BC, 0004 ; caricamento contatore

                                        ET: LDI

                                                    JP PE, ET ; PE =effettua il salto se P/V=1

Alternativamente si può utilizzare l’istruzione LDIR. Quest’istruzione esegue tutte le funzioni dell’istruzione LDD (trasferimento di un dato dal blocco sorgente al blocco destinazione, incremento dei puntatori DE ed Hl e decremento del contatore BC) non una sola volta ma iterativamente fino a che il contatore non si sia azzerato.

Esempio: trasferimento di un blocco di quattro byte; blocco sorgente dall’indirizzo 1A60h all’indirizzo 1A63h; blocco destinazione dall’indirizzo 1B60h all’indirizzo 1B63h

 

 

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Effetto sul registro dei flag

 

S

Z

 

H

 

P/V

N

C

 

 

 

O

 

O

O

 

 

*   IL flag H, il flag PV ed il flag N sono posti a zero

 

 

 

 

 

 

 

 

 

 

 

 

PUSH qq

Con quest’istruzione la coppia di registri o registro a 16 bit qq viene spinta in cima allo stack. Ricordiamo che lo Stack Pointer punta all’ultima locazione riempita dello stack e che questo cresce occupando le locazioni di memoria che hanno indirizzo via via decrescente.                                                  

Allora la parte alta del registro qq va nella prima locazione libera, quindi nella locazione il cui indirizzo si ottiene dall’indirizzo contenuto in SP meno uno, mentre la parte bassa di qq va nella locazione successiva, quindi nella locazione il cui indirizzo si ottiene dall’indirizzo contenuto in SP meno due. Poiché lo stack cresce di due locazioni, lo Stack Pointer va decrementato di due unità

Non si ha alcun effetto sul registro dei flag.

Esempio: PUSH DE

 

 

 

 

 

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qq può essere uno dei seguenti registri: BC; DE; HL; AF; IX; IY

 

 

 

 

 

POP qq

Con quest’istruzione la coppia di registri o registro a 16 bit qq viene riempita con il contenuto delle due locazioni di memoria in cima allo. Ricordiamo che lo Stack Pointer punta all’ultima locazione riempita dello stack e che questo cresce occupando le locazioni di memoria che hanno indirizzo via via decrescente.       

Allora la parte alta del registro qq viene riempita con il contenuto della penultima locazione occupata, quindi nella locazione il cui indirizzo si ottiene dall’indirizzo contenuto in SP più uno, mentre la parte bassa di qq viene riempita con il contenuto della locazione successiva, quindi nella locazione il cui indirizzo si ottiene dall’indirizzo contenuto in SP. Poiché lo stack decresce di due locazioni, lo Stack Pointer va incrementato di due unità

Non si ha alcun effetto sul registro dei flag.

Esempio: POP DE

 

 

 

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

qq può essere uno dei seguenti registri: BC; DE; HL; AF; IX; IY

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Casella di testo: Istruzioni di scam-bio
 di dati

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EX AF, AF’

L'istruzione scambia il contenuto dei registri A ed F con  A' ed F'

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Esempio:

Contenuto dei registri prima dell'esecuzione dell'operazione EX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Contenuto dei registri dopo l'esecuzione dell'istruzione EX

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EXX

L'istruzione EXX consente di scambiare il contenuto dei registri BC, DE, HL e dei registri BC', DE', HL'.

Esempio.

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EX DE, HL

Questa istruzione scambia il contenuto dei registri DE ed HL

Esempio Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

EX (SP), dd

Il contenuto del registro a 16 bit dd viene scambiato con le due locazioni di memoria che stanno in cima allo stack

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

La parte bassa del registro viene scambiata con la locazione puntata dallo SP, la parte alta del registro viene scambiata con la locazione il cui indirizzo è dato da SP+1. Il registro dd può essere: HL, IX, IY. Poiché l’ampiezza dello stack non viene modificata in quanto non si aggiungono dati nelle locazioni vuote, né si prelevano dati svuotando locazioni, lo SP rimane inalterato.

L’istruzione non ha alcun effetto sul registro dei flag.

Esempio:EX (SP), IY

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Casella di testo: Istruzioni di ricer-ca

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CP A, s

Con quest’istruzione viene confrontato il contenuto dell’accumulatore con l’operando s. L’istruzione serve, ad esempio, se si vuole ricercare un dato in una zona di memoria, allora si pone nell’accumulatore il dato da cercare mentre come operatore s considereremo le varie locazioni della zona di memoria in cui stiamo effettuando la ricerca. Se l’operazione di confronto da un esito positivo vuol dire che vi è una locazione il cui contenuto coincide con quello dell’accumulatore, cioè in quella locazione esiste il dato cercato.

L’operazione di confronto viene effettuata dallo Z80 con un’operazione di sottrazione di cui, però, non viene memorizzato il risultato. La sottrazione viene effettuato soltanto perché in questomodo verrà modificato il registro dei flag. Se il flag Z sarà settato ad 1 vorrà dire che la sottrazione avrà dato un risultato nullo e quindi il contenuto dell’accumulatore sarà identico al contenuto dell’operando s. Controllando il flag S potremo invece sapere se il contenuto dell’accumulatore è maggiore o minore di quello dell’operando s. Infatti, se S= 0, la sottrazione ha dato un risultato positivo per cui il contenuto dell’accumulatore è maggiore di quello dell’operando s, se S= 1 l’operazione ha dato risultato negativo il che vuol dire che il contenuto dell’accumulatore è minore di quello dell’operando s.

L’operando s può essere uno dei seguenti:

 

CP r

Indirizzamento a registro

Si sottrae all’accumulatore il contenuto del registro ad otto bir r (A, B, C, D, E, H, L)

CP n

Indirizzamento immediato

Si sottrae all’accumulatore il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

CP (HL)

Indirizzamento indiretto

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

CP (IX+d)

Indirizzamento indicizzato

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

CP (IY+d)

Indirizzamento indicizzato

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

1

*  

 

IL flag N è posto sempre ad uno, gli altri flag dipendono dal risultato della sottrazione.

 

 

 

 

 

 

 

 

Esempio:                                                                                                                                                                            CP B

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Per capire l’esempio ricordiamo che

96|16 = 10010110|2

quindi rappresenta un numero negativo essendo l’MSB pari ad 1 mentre

42|16 = 01000010|2

per cui il dato contenuto nell’accumulatore è minore di quello contenuto nel registro B.

Esempio                                                                                                                                                                             CP (HL)

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

Casella di testo: S	Z	X	H	X	P/V	N	C
1	0	0	0	0	0	1	0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Esempio                                                                                                                                                                 CP (IX+1)

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Casella di testo: S	Z	X	H	X	P/V	N	C
1	0	0	1	0	0	1	0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Per capire l’esempio ricordiamo che

96|16 = 10010110|2

quindi rappresenta un numero negativo essendo l’MSB pari ad 1 mentre

3A|16 = 00111010|2

quindi il risultato sarà negativo (S=1) e vi sarà un prestito dal nibble superiore al nibble inferiore (H=1)

Esempio                                                                                                                                                                             CP 3A

Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CPD

Questa istruzione è molto utile quando si vuole ricercare un dato in un blocco di memoria. In A si pone il dato da cercare, l’accumulatore viene poi confrontato con le locazioni di memoria , il registro HL funge da puntatore poiché contiene di volta in volta l’indirizzo della locazione il cui contenuto si vuole confrontare con l’accumulatore, occorre poi un contatore in modo da sapere quando si è completato il confronto con tutte le locazioni di memoria appartenenti al blocco, il contatore è il registro BC. Con questa istruzione il confronto avviene partendo dalle locazioni di indirizzo più alto a decrescere.

Quando viene eseguita quest’istruzione l’accumulatore viene confrontato con il contenuto della locazione il cui indirizzo è contenuto nel registro HL. Poi vengono decrementati il puntatore HL ed il contatore BC.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

x

 

*  

 

x

1

*  

Il flag Z ad uno indica che si è trovata una locazione il cui contenuto è uguale a quello dell’accumulatore. Il flag PV posto a zero indica che il contatore BC si è azzerato ed è quindi terminato il controllo del blocco di dati.

Esempio Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Casella di testo: S	Z	X	H	X	P/V	N	C
0	1	0	0	0	1	1	0

 

 

 

 

 

 

 

 

Z va a uno poiché il dato contenuto nell’accumulatore coincide con il contenuto della locazione di memoria puntata da HL, PV è 1 poiché il registro BC non si è azzerato.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

CPDR

L’istruzione precedente necessita di essere inserita all’interno di un ciclo per poter essere eseguita su tutto il blocco di memoria in cui si vuole ricercare il dato. Alternativamente si può utilizzare l’istruzione CPDR, questa istruzione esegue tutte le azioni di CPD, ma a differenza di essa, le ripete fino a che si azzera il contatore oppure appena trova una locazione contenente lo stesso dato dell’accumulatore.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

x

 

*  

 

x

1

*  

Il flag Z è posto ad 1 se A=(HL)

IL flag PV è posto a 0 se BC=0 dopo l’esecuzione, altrimenti è posto ad 1

CPI

Questa istruzione è molto utile quando si vuole ricercare un dato in un blocco di memoria. In A si pone il dato da cercare, l’accumulatore viene poi confrontato con le locazioni di memoria , il registro HL funge da puntatore poiché contiene di volta in volta l’indirizzo della locazione il cui contenuto si vuole confrontare con l’accumulatore, occorre poi un contatore in modo da sapere quando si è completato il confronto con tutte le locazioni di memoria appartenenti al blocco, il contatore è il registro BC. Con questa istruzione il confronto avviene partendo dalle locazioni di indirizzo più basso a crescere.

Quando viene eseguita quest’istruzione l’accumulatore viene confrontato con il contenuto della locazione il cui indirizzo è contenuto nel registro HL. Poi viene incrementato il puntatore HL e decrementato il contatore BC.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

x

 

*  

 

x

1

*  

Il flag Z ad uno indica che si è trovata una locazione il cui contenuto è uguale a quello dell’accumulatore. Il flag PV posto a zero indica che il contatore BC si è azzerato ed è quindi terminato il controllo del blocco di dati.

 

 

 

 

 

 

 

 

 

 

 

 

 

Esempio Prima

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Dopo

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Z va a uno poiché il dato contenuto nell’accumulatore coincide con il contenuto della locazione di memoria puntata da HL, PV è 1 poiché il registro BC non si è azzerato.

CPIR

L’istruzione precedente necessita di essere inserita all’interno di un ciclo per poter essere eseguita su tutto il blocco di memoria in cui si vuole ricercare il dato. Alternativamente si può utilizzare l’istruzione CPIR, questa istruzione esegue tutte le azioni di CPD, ma a differenza di essa, le ripete fino a che si azzera il contatore oppure appena trova una locazione contenente lo stesso dato dell’accumulatore.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

x

 

*  

 

x

1

*  

Il flag Z è posto ad 1 se A=(HL)

IL flag PV è posto a 0 se BC=0 dopo l’esecuzione, altrimenti è posto ad 1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ADC A, s

Quest’istruzione esegue la somma fra il contenuto dell’accumulatore, il secondo operando s ed il flag di carry

ADC A, r

Indirizzamento a registro

Si somma all’accumulatore il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

ADC A, n

Indirizzamento immediato

Si somma all’accumulatore il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

ADC A, (HL)

Indirizzamento indiretto

Si somma all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

ADC A, (IX+d)

Indirizzamento indicizzato

Si somma all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

ADC A,(IY+d)

Indirizzamento indicizzato

Si somma all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

0

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un riporto fra il quarto e il quinto bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a zero trattandosi di una somma

*   Il flag c verrà settato se vi è un riporto sull’ottavo bit

Esempio:                                                                                                                                                          ADC A, 1A

Prima

 

 

Il contenuto del registro dei flag è dispari. Ciò vuol dire che il bit meno significativo (il flag di carry) è pari ad uno.

 

 

0

0

0

0

0

1

1

0

 

+

0

0

0

1

1

0

1

0

 

+

 

 

 

 

 

 

 

1

 

=

0

0

1

0

0

0

0

1

 

Abbiamo il riporto fra il primo ed il secondo nibble, per cui H=1, il risultato è positivo per cui S=0, il risultato è non nullo per cui Z=0, non vi è un riporto sull’ottavo bit per cui C=0, il risultato rientra nel range –128/+127 per cui PV=0.

Dopo

 

 

 

 

ADC HL, ss

Quest’istruzione esegue la somma fra il contenuto del registro a 16 bit HL, il secondo operando ss ed il flag di carry. Il secondo operando può essere soltanto un registro a 16 bit: BC, DE, HL, SP.

Modifiche al registro dei flag

 

 

 

 

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

0

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un riporto fra l’undicesimo ed il dodicesimo bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a zero trattandosi di una somma

*   Il flag C verrà settato se vi è un riporto sul sedicesimo bit

Esempio:                                                                                                                                                          ADC HL, DE

Prima

 

 

     Dopo

 

ADD A, s

Quest’istruzione esegue la somma fra il contenuto dell’accumulatore e il secondo operando s.

ADD A, r

Indirizzamento a registro

Si somma all’accumulatore il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

ADD A, n

Indirizzamento immediato

Si somma all’accumulatore il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

ADD A, (HL)

Indirizzamento indiretto

Si somma all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

ADD A,(IX+d)

Indirizzamento indicizzato

Si somma all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

ADD A,(IY+d)

Indirizzamento indicizzato

Si somma all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

 

 

 

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

0

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un riporto fra il quarto e il quinto bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a zero trattandosi di una somma

*   Il flag C verrà settato se vi è un riporto sull’ottavo bit

Esempio                                                                                                                                                                 ADD A, (HL)

Prima

 

Dopo

E’ stata effettuata la somma fra il contenuto dell’accumulatore pari a 02h ed il contenuto della locazione d’indirizzo 9620h (contenuto in HL) pari a B1h

02|16 = 00000010|10 +

B1|16= 10110001|10 =

 

B3|16= 10110011|10

Il risultato è negativo (S=1), diverso da zero (Z=0), non vi è stato un riporto fra il nibble inferiore ed il nibble superiore (H=0), senza overflow (PV=0), sena riporto (C=0). Essendo un’addizione N=0.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ADD HL, ss

Quest’istruzione esegue la somma fra il contenuto del registro a 16 bit HL ed il secondo operando ss. Il secondo operando può essere soltanto un registro a 16 bit: BC, DE, HL, SP.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

0

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un riporto fra l’undicesimo ed il dodicesimo bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a zero trattandosi di una somma

*   Il flag C verrà settato se vi è un riporto sul sedicesimo bit

Esempio:                                                                                                                                                          ADD HL, DE

Prima

 

 

     Dopo

 

ADD IX, rr

Quest’istruzione esegue la somma fra il contenuto del registro a 16 bit IX ed il secondo operando ss. Il secondo operando può essere soltanto un registro a 16 bit: BC, DE, HL, SP.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

 

 

 

*  

 

 

0

*  

 

*   Il flag S non viene modificato

*   Il flag Z non viene modificato

*   Il flag H verrà settato se vi sarà un riporto fra l’undicesimo ed il dodicesimo bit

*   Il flag PV non viene modificato

*   Il flag N è a zero trattandosi di una somma

*   Il flag C verrà settato se vi è un riporto sul sedicesimo bit

Esempio:                                                                                                                                                          ADD IX, SP

Prima

 

 

     Dopo

 

ADD IY, rr

Quest’istruzione esegue la somma fra il contenuto del registro a 16 bit IY ed il secondo operando ss. Il secondo operando può essere soltanto un registro a 16 bit: BC, DE, HL, SP.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

 

 

 

*  

 

 

0

*  

 

*   Il flag S non viene modificato

*   Il flag Z non viene modificato

*   Il flag H verrà settato se vi sarà un riporto fra l’undicesimo ed il dodicesimo bit

*   Il flag PV non viene modificato

*   Il flag N è a zero trattandosi di una somma

*   Il flag C verrà settato se vi è un riporto sul sedicesimo bit

Esempio:                                                                                                                                                          ADD IY, SP

Prima

 

 

     Dopo

 

INC  s

Quest’istruzione esegue l’incremento di un’unità del contenuto dell’ operando s.

INC r

Indirizzamento a registro

Si incrementa il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

INC (HL)

Indirizzamento indiretto

Si incrementa il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

INC  (IX+d)

Indirizzamento indicizzato

Si incrementa il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

INC (IY+d)

Indirizzamento indicizzato

Si incrementa il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

 

 

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

0

 

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un riporto fra il quarto e il quinto bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a zero trattandosi di una somma

*   Il flag C non viene modificato

 

INC rr

Quest’istruzione esegue l’incremento di un’unità del contenuto del registro a 16 bit rr. Esso può essere BC, DE, HL, SP, IX, IY

Non ha effetto sul registro dei flag

 

 

 

 

 

 

 

 

 

 

SBC A, s

Quest’istruzione esegue la sottrazione fra il contenuto dell’accumulatore, il secondo operando s ed il flag di carry

SBC A, r

Indirizzamento a registro

Si sottrae all’accumulatore il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

SBC A, n

Indirizzamento immediato

Si sottrae all’accumulatore il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

SBC A, (HL)

Indirizzamento indiretto

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

SBC A, (IX+d)

Indirizzamento indicizzato

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

SBC A,(IY+d)

Indirizzamento indicizzato

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

1

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un prestito fra il quinto e il quarto bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a uno trattandosi di una sottrazione

*   Il flag C verrà settato se vi è un prestito sull’ottavo bit

Esempio:                                                                                                                                                                SBC A, (HL)

           

Prima

           

           

Dopo

 

 

 

Infatti viene effettuata la sottrazione

B2-

0F-

   1=

A2

 

Questa sottrazione comporta un  prestito dal nibble superiore al nibble inferiore per cui sarà H=1, inoltre il risultato sarà negativo (infatti A2|16=10100010 quindi l’MSB è pari ad uno per cui è la rappresentazione di un numero negativo)

 

 

 

 

 

 

 

SUB A, s

Quest’istruzione esegue la sottrazione fra il contenuto dell’accumulatore ed il secondo operando s

SUB A, r

Indirizzamento a registro

Si sottrae all’accumulatore il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

SUB A, n

Indirizzamento immediato

Si sottrae all’accumulatore il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

SUB A, (HL)

Indirizzamento indiretto

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

SUB A, (IX+d)

Indirizzamento indicizzato

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

SUB A,(IY+d)

Indirizzamento indicizzato

Si sottrae all’accumulatore il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

1

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un prestito fra il quinto e il quarto bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a uno trattandosi di una sottrazione

*   Il flag C verrà settato se vi è un prestito sull’ottavo bit

Esempio:                                                                                                                                                                SUB A, (HL)

           

Prima

           

           

Dopo

 

 

 

Infatti viene effettuata la sottrazione

B2-

0F=

A3

 

Questa sottrazione comporta un  prestito dal nibble superiore al nibble inferiore per cui sarà H=1, inoltre il risultato sarà negativo (infatti A3|16=10100011 quindi l’MSB è pari ad uno per cui è la rappresentazione di un numero negativo)

 

 

 

 

 

 

 

 

SBC HL, ss

Questa istruzione esegue la sottrazione fra il contenuto del registro Hl, il contenuto del regiastro a 16 bit ss ed il flag di Carry. Il risultato viene memorizzato in HL

HL ßHL-ss-FC

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

1

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un prestito fra il terdicesimo e il dodicesimo bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a uno trattandosi di una sottrazione

*   Il flag C verrà settato se vi è un prestito sul sedicesimo bit

 

 

 

Esempio:                                                                                                                                                          SBC HL, DE

Prima

 

 

     Dopo

 

 

Poiché inizialmente nel registro dei flag vi è un numero pari (66) vuol dire che l’LSB corrispondente al flag di carry è pari a zero. Il risultato è un numero positivo (S=0, Z=0), vi è un prestito dal quarto al terzo nibble (H=1), N=1 poiché è una sottrazione.

 

 

 

 

 

 

 

 

 

 

 

 

 

DEC  s

Quest’istruzione esegue il decremento di un’unità del contenuto dell’ operando s.

DEC r

Indirizzamento a registro

Si decrementa il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

DEC (HL)

Indirizzamento indiretto

Si decrementa il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

DEC  (IX+d)

Indirizzamento indicizzato

Si decrementa il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

DEC (IY+d)

Indirizzamento indicizzato

Si decrementa il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

 

 

 

 

 

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

1

 

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un prestito fra il quarto e il quinto bit

*   Il flag PV verrà settato se vi sarà un errore di overflow

*   Il flag N è a 1 trattandosi di una sottrazione

*   Il flag C non viene modificato

 

DEC rr

Quest’istruzione esegue il decremento di un’unità del contenuto del registro a 16 bit rr. Esso può essere BC, DE, HL, SP, IX, IY

Non ha effetto sul registro dei flag

 

 

 

 

 

 

 

 

 

 

DAA

E’ l’istruzione di aggiustamento decimale dell’accumulatore. Il suo scopo è quello di trasformare il contenuto binario dell’accumulatore in un numero BCD.

Per comprendere quest’operazione ricordiamo che il codice BCD si differenzia da quello binario poiché un nibble di quattro bit , pur potendo costituire teoricamente 16 combinazioni diverse, ne sfrutta soltanto le prime 10 per rappresentare soltanto le cifre decimali da 0 a 9. A differenza del codice binario, quindi, non sono consentite le combinazioni corrispondenti alle cifre da A ad F.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

AND s

Viene effettuato l’And logico fra accumulatore ed operando s ed il risultato viene immagazzinato nell’accumulatore. And logico significa che ogni bit dell’accumulatore viene sostituito dall’and fra esso ed il suo corrispondente nell’operando s

AND A, r

Indirizzamento a registro

L’operando s è il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

AND A, n

Indirizzamento immediato

L’operando s è il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

AND A, (HL)

Indirizzamento indiretto

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

AND A,(IX+d)

Indirizzamento indicizzato

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

AND A,(IY+d)

Indirizzamento indicizzato

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

1

 

*  

0

0

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato sempre ad uno

*   Il flag PV verrà settato ad uno se il numero di bit ad 1 nel risultato è pari altrimenti è a zero

*   Il flag N è sempre a zero

*   Il flag C è sempre a zero

Esempio:                                                                                                                                                                AND 4B

Prima

 

 

36|16=00110110|2

AND

4B|16=01001011|2

=

02|16=00000010|2

Dopo

 

 

 

 

OR s

Viene effettuato l’or logico fra accumulatore ed operando s ed il risultato viene immagazzinato nell’accumulatore. Or logico significa che ogni bit dell’accumulatore viene sostituito dall’or fra esso ed il suo corrispondente nell’operando s

OR A, r

Indirizzamento a registro

L’operando s è il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

OR A, n

Indirizzamento immediato

L’operando s è il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

OR A, (HL)

Indirizzamento indiretto

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

OR A,(IX+d)

Indirizzamento indicizzato

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

OR A,(IY+d)

Indirizzamento indicizzato

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

0

 

*  

0

0

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà posto sempre a zero

*   Il flag PV verrà settato ad uno se il numero di bit ad 1 nel risultato è pari altrimenti è a zero

*   Il flag N è sempre a zero

*   Il flag C è sempre a zero

Esempio:                                                                                                                                                                OR 4B

Prima

 

 

36|16=00110110|2

OR

4B|16=01001011|2

=

02|16=01111111|2

Dopo

 

 

 

 

XOR s

Viene effettuato l’or esclusivo logico fra accumulatore ed operando s ed il risultato viene immagazzinato nell’accumulatore. XOr logico significa che ogni bit dell’accumulatore viene sostituito dall’or esclusivo fra esso ed il suo corrispondente nell’operando s

XOR A, r

Indirizzamento a registro

L’operando s è il contenuto del registro ad otto bit r (A, B, C, D, E, H, L)

XOR A, n

Indirizzamento immediato

L’operando s è il contenuto del dato ad otto bit immediatamente espresso nell’istruzione

XOR A, (HL)

Indirizzamento indiretto

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro HL

XOR A,(IX+d)

Indirizzamento indicizzato

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IX sommato allo spiazzamento d espresso nell’istruzione

XOR A,(IY+d)

Indirizzamento indicizzato

L’operando s è il contenuto della locazione di memoria il cui indirizzo è dato dal contenuto del registro IY sommato allo spiazzamento d espresso nell’istruzione

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

0

 

*  

0

0

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà posto sempre a zero

*   Il flag PV verrà settato ad uno se il numero di bit ad 1 nel risultato è pari altrimenti è a zero

*   Il flag N è sempre a zero

*   Il flag C è sempre a zero

Esempio:                                                                                                                                                                XOR 4B

Prima

 

 

36|16=00110110|2

XOR

4B|16=01001011|2

=

02|16=01111101|2

Dopo

 

 

 

 

CPL

L’accumulatore viene complementato ad uno, cioè ogni suo singolo bit viene invertito.

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

 

 

 

1

 

 

1

 

 

 

Esempio

Prima

 

 

36|16=00110110|2

COMPLEMENTA

C9|16=11001001|2

 

 

 

 

 

 

 

 

 

 

NEG

L’accumulatore viene complementato a due, poiché viene sottratto a zero

Modifiche al registro dei flag

S

Z

 

H

 

P/V

N

C

*  

*  

 

*  

 

*  

1

*  

 

*   Il flag S verrà settato a seconda del segno del risultato

*   Il flag Z verrà settato se il risultato è nullo

*   Il flag H verrà settato se vi sarà un prestito fra il quarto e il quinto bit

*   Il flag PV verrà settato se A era 80h prima dell’esecuzione dell’istruzione. Infatti 80|16=-128, ma 0-(-128)=+128 > +127 quindi si va in overflow

*   Il flag N è a 1

*   Il flag C sarà posto ad 1 se A era nullo prima dell’esecuzione dell’istruzione. Infatti proviamo ad effettuare l’esecuzione del complemento a due : 00000000|2à (complemento ad uno)11111111|2à 00000000|2 con un riporto sull’ottavo bit

 

Esempio

Prima

 

 

32|16=00110010|2 à( COMPLEMENTA AD UNO CD)|16=11001101|2 à

(COMPLEMENTA A DUE) 11001101|2 + 1= 11001110|2=CE|16

 

Dopo