ELEMANIA
Z80 - Formato delle istruzioni
Formato delle istruzioni dello Z80

Il formato generale delle istruzioni dello Z80 comprende un codice operativo seguito da un operando (opzionale) secondo lo schema:

[opcode][operand]

Il codice operativo nella maggior parte dei casi è costituito da un byte (8 bit), ma vi sono alcune istruzioni con codice operativo composto da più byte. Per quanto riguarda l'operando, esso può essere, a seconda dei casi, essere assente oppure essere formato da uno o due byte (che seguono il codice operativo).

Istruzioni senza operandi (solo codice operativo)

Questo è il caso più semplice. Si tratta di istruzioni composte solo da un codice operativo a 8 bit.

Per esempio l'istruzione NOP (No Operation) con codice operativo 00h (cioè 00000000 in binario) è un'istruzione che, come dice il nome, non fa assolutamente nulla, nel senso che non effettua nessuna operazione e non modifica il contenuto dei registri interni del µP. L'unico effetto della NOP è introdurre un ritardo (pari a 4 cicli di clock) nell'esecuzione del codice. Questa istruzione può essere utile appunto per introdurre ritardi, per allineare l'occupazione del programma in memoria (cioè per rendere per esempio pari il numero totale di locazioni occupate) o come segnaposto da sostituire in un secondo tempo con altre istruzioni.

Un altro esempio di istruzione di questo tipo è

INC B

con codice operativo 04h. L'effetto di questa istruzione è quello di incrementare di uno il contenuto del registro B.

Istruzioni con un byte di operando

Queste istruzioni occupano 2 byte di memoria: il primo per il codice operativo e il secondo per l'operando. Occorreranno dunque due fasi di fetch per prelevare l'intera istruzione dalla memoria e, per questa ragione, questo tipo di istruzioni è più lenta del tipo precedente.

Un esempio di questo tipo di istruzioni è

LD B, n

che carica nel registro B il valore numerico n (un byte). Il codice operativo di questa istruzione è, 06h, seguito dal valore numerico da caricare. Per esempio LD B,2 (0602h) carica nel registro B il valore numerico due.

Istruzioni con operandi a 16 bit

In questo caso il codice operativo è seguito da due byte di operando, i quali specificano generalmente un indirizzo in memoria. Per esempio l'istruzione

LD A, (nn)

carica nell'accumulatore A il contenuto della locazione di memoria nn (si notino le parentesi tonde che stanno a indicare che in A non viene caricato il valore nn, ma il valore memorizzato all'indirizzo nn). Il codice operativo di questa istruzione è 3Ah e dunque per esempio LD A, (00) ovvero 3A0000h carica in A il valore contenuto in memoria all'indirizzo 0000h.

Istruzioni con codice operativo a più byte

Sicomme l'utilizzo di soli 8 bit di codice operativo porterebbe a un set di istruzioni troppo limitato (28=256 istruzioni), alcune istruzioni dello Z80 hanno un codice operativo a 2 byte. In queste istruzioni il primo byte è sempre CB, DD, ED, o FD, mentre il secondo byte specifica l'istruzione vera e propria. Questa particolare scelta di progetto è motivata dalla necessità di riservare alcune combinazioni binarie (CB, DD, ED e FD appunto) per l'espansione del codice operativo (in altre parole, queste combinazioni binarie non possono essere usate per esprimere codici operativi di istruzioni da 1 byte, altrimenti il µP non potrebbe sapere in quali casi caricare l'eventuale seconda parte del codice operativo).

Per esempio l'istruzione

RL B

senza operandi e con codice operativo CB10h ruota (shift) verso sinistra (left) il contenuto del registro B.

Un caso più complesso è rappresentato dall'istruzione

LD IY, (nn)

la quale carica nel registro IY il contenuto della locazione di memoria di indirizzo nn. Il codice operativo di questa istruzione è FD2Ah, seguito da un operando a 16 bit, per un totale di 4 byte occupati. Per esempio LD IY, (FFFFh) ovvero FD2AFFFFh carica in IY il contenuto dell'indirizzo di memoria FFFFh.

Istruzioni "speciali"

Vi sono infine alcune istruzioni particolari che presentano il seguente formato non standard:

[DDCBh oppure FDCBh][operand][opcode]

Il primi 2 byte di queste istruzioni contengono il codice DDCBh oppure FDCBh, seguito da un byte di operando e infine da un byte di codice operativo vero e proprio.

Per esempio

RES 2, (IY+n)

resetta (mette a zero) il secondo bit della locazione di memoria con indirizzo IY+n (cioè con indirizzo che si ottiene sommando n al contenuto del registro IY). Questa istruzione in esadecimale è codificata con

FDCB**96h

dove ** stanno per il byte n. Per esempio FDCB0596h resetta il bit 2 della locazione di memoria il cui indirizzo si ottiene sommando 5 al contenuto di IY.

 

precedente - successiva

Sito realizzato in base al template offerto da

http://www.graphixmania.it