Un registro molto importante è il registro EFLAGS. Questo registro è un campo di bit, formato da un gran numero di [I]flags[/I], ossiavalori binari (0 oppure 1) con scopi disparati.
A parte un certo numero di flags utili, di fatto, solo per la programmazione di sistema, ve ne sono 6 (gli [I]status flags[/I]) che vengono impostati ad 1 oppure 0 a seconda del risultato di molte istruzioni. È fondamentale conoscerli.
[B]Carry Flag[/B] ([B]CF[/B], bit 0) - Flag di riporto. Viene messo ad 1 quando c'è un riporto (nel caso di una somma) o un prestito (nel caso di una sottrazione) dal bit più significativo di una operazione. Ad esempio, EAX contiene il valore esadecimale 0x9000000 e si esegue l'istruzione ADD EAX, EAX, il risultato (0x120000000) viene troncato ai 32 bit meno significativi (0x20000000), e la presenza del riporto viene segnalata dal processore impostando il Carry Flag ad 1. Nelle operazioni di shift o di rotazione, invece, il significato è diverso, ma lo vedremo più avanti.
[B]Parity Flag[/B] ([B]PF[/B], bit 2) - Flag di parità. Viene settato quando il byte meno significativo del risultato di molte operazioni contiene un numero pari di bit 1. Viene generalmente usato nei sistemi di trasmissione dati come sistema di controllo; per chi è alle prime armi può essere sufficiente conoscerne l'esistenza. L'uso effettivo è piuttosto raro.
[B]Auxiliary Carry Flag[/B] ([B]AF[/B], bit 4) - Viene impostato ad 1 quando c'è un riporto o un prestito dal terzo bit di una operazione di tipo BCD ([I]Binary Coded Decimal[/I]), azzerato in caso contrario. L'uso è raro, questo flag può essere certamente ignorato dai novizi.
[B]Zero Flag[/B] ([B]ZF[/B], bit 6) - Viene impostato ad 1 se il risultato di una operazione è zero, altrimenti viene azzerato.
[B]Sign Flag[/B] ([B]SF[/B], bit 7) - Flag del segno. Viene messo ad 1 se, dopo un'operazione aritmetica, il bit più significativo (il bit del segno) è 1. In caso contrario viene azzerato.
[B]Overflow Flag[/B] ([B]OF[/B], bit 11) - Viene messo ad 1 quando il risultato di un'operazione è troppo grande ([I]overflow[/I]) o troppo piccolo ([I]underflow[/I]) per essere contenuto nel registro di destinazione; è azzerato altrimenti. Più precisamente, esso viene impostato ad 1 se il bit del segno (il più significativo) del risultato è diverso da quello di entrambi gli operandi. Nel caso di somme o sottrazioni è facile convincersi che questa condizione equivale ad un overflow/underflow.
L'importanza degli [I]status flag[/I]s risulterà chiara quando analizzeremo le istruzioni di controllo del flusso (ma sono utili anche per altre istruzioni).