Il registro dei flag (flag register), chiamato anche registro di stato, non è un “vero” registro, in quanto è costituito da un insieme di alcuni flip-flop tra loro non omogenei come significato, raggruppati solo per comodità in un apparente unico registro da 8 bit, di cui sono utilizzati solo 6 bit. I singoli bit, detti flag, indicano lo stato del sistema di calcolo dopo l'esecuzione di una operazione aritmetica o logica: ad esempio segnalano se c'è stato riporto, oppure se il risultato dell’operazione è zero.
La figura seguente mostra la composizione interna del registro dei flag:
bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | |
S | Z | - | H | - | P/V | N | C |
Il significato dei singoli bit è il seguente:
Comprendere il funzionamento del registro dei flag è fondamentale per capire come funziona lo Z80. Come si è detto, il registro dei flag tiene traccia del risultato dell'ultima operazione aritmetica o logica che è stata eseguita (se il risultato è zero, positivo, negativo, etc.).
Non tutte le istruzioni agiscono sul registro dei flag, ma solo quelle che implicano la ALU (Unità Aritmetico Logica). Le principali istruzioni che modificano il flag register sono le seguenti:
Istruzioni che modificano il Flag Register | |
Tipologia | Esempi |
Aritmetiche | ADD, SUB |
Incremento/decremento | INC, DEC |
Confronto | CP |
Logiche | AND, OR, XOR |
Bit test | BIT |
Rotazione | SLL, SLA, SRA |
L'elenco precedente non è esaustivo ma può dare un'idea. Rimandiamo il lettore a questa tabella più dettagliata per vedere come ogni singola istruzione agisce (oppure no) sul registro dei flag.
Conviene sottolineare fin da subito alcune stranezze o anomalie del funzionamento dello Z80. Per esempio le istruzioni di decremento e incremento a 8 bit (es. DEC B) modificano il registro dei flag, ma non le corrispondenti istruzioni a 16 bit (es. DEC BC). Le istruzioni di input che passano attraverso il registro A (es. IN A,(nn)) non modificano il registro dei flag, mentre le corrispondenti istruzioni che usano C come puntatore lo modificano (es. IN D,(C)).
Il contenuto del registro dei flag viene poi utilizzato dalle istruzioni di salto condizionato per decidere se effettuare il salto oppure no. Facciamo qualche rapido esempio:
In alcuni casi bisogna usare l'istruzione di confronto CP, come nel seguente esempio, dove l'istruzione LD A, B non setta il registro dei flag:
Sito realizzato in base al template offerto da
http://www.graphixmania.it