Flag

Article on other languages:

bussola Disambiguazione – Se stai cercando l'album di James Taylor, vedi Flag (album).

Un flag (parola inglese che significa bandierina) in informatica è una variabile che può assumere solo due stati ("vero" o "falso", "on" e "off", "1" e "0", "acceso" e "spento") e che segnala, con il suo valore, se un dato evento si è verificato oppure no, o se il sistema è in un certo stato oppure no (vedi anche voce in Glossario informatico).

Per esempio, nelle CPU sono presenti molti flag associati a operazioni matematiche, rappresentati con dei bit singoli organizzati in un importante registro apposito, il registro dei flag: fra i vari flag c'è il flag di zero, che assume il valore 1 ogni volta che l'ultima operazione matematica eseguita dalla CPU ha dato un risultato pari a zero, mentre assume il valore 0 se il risultato è stato un numero diverso da zero. Il valore dei vari flag viene usato nelle istruzioni di salto condizionato della CPU per decidere se saltare o meno.

L'operazione di porre il valore di un flag a "vero" viene detta impostare il flag, mentre porlo nello stato di "falso" viene detto resettare il flag.

Flag della CPU 386

Ecco, come esempio dei flag di una CPU, il registro dei flag della CPU Intel 80386 e il loro significato:

Bit Sigla Descrizione
0 CF Flag di Carry: viene posto a 1 dalla CPU se l'ultima operazione ha generato un riporto (e in alcune altre occasioni)
1 1 valore fisso
2 PF Flag di parità: viene posto a 1 dalla CPU se l'ultima operazione ha dato come risultato un numero binario pari, in senso boleano (cioè l'ultimo bit è 0)
3 0 valore fisso
4 AF Flag di Carry ausiliario: viene usato al posto del Carry normale nelle istruzioni di aritmetica BCD
5 0 valore fisso
6 ZF Flag di Zero: viene posto a 1 dalla CPU se l'ultima operazione ha dato zero come risultato
7 SF Flag di Segno: viene posto a 1 dalla CPU se il risultato dell'ultima operazione ha segno negativo (se interpretato in complemento a due)
8 TF Flag di Trap: quando viene posto a 1, dopo ogni istruzione eseguita la CPU esegue automaticamente una istruzione INT 01 (Interrupt 1): viene impostato dai debugger per seguire l'esecuzione passo-passo dei programmi in fase di debugging. Viene modificato dal programma in esecuzione.
9 IF Interrupt Flag: durante tutto il tempo che questo flag è posto a 0 (Tramite l'istruzione CLI), la CPU non risponde più ai normali interrupt (a eccezione dei "Non-Maskable Interrupts"). Viene modificato dal programma in esecuzione.
10 DF Flag Direzione: se posto a 1, le cosiddette "istruzioni di stringa" (per esempio LODSB) verranno eseguite in avanti, cioè con indirizzi di memoria crescenti: altrimenti accadrà il contrario. Viene modificato dal programma in esecuzione.
11 OF Flag di Overflow: viene posto a 1 dalla CPU quando il risultato dell'ultima operazione è maggiore del massimo valore che il registro di destinazione può contenere.
12 IOPL (primo bit) I/O Privilege level: a seconda del valore dei suoi due bit, il programma in esecuzione può eseguire le istruzioni di I/O sulle porte hardware. Se entrambi sono a 0 e il programma tenta di eseguire simili operazioni viene bloccato e viene generato un errore di protezione. Viene modificato dal sistema operativo. Non essendo un valore booleano, l'IOPL non è realmente un flag, tuttavia è ugualmente localizzato in questo registro.
13 IOPL (secondo bit)
14 NT Nested Task: questo flag è posto a 1 dalla CPU, e significa che il codice in esecuzione è la subroutine di servizio di un interrupt o di una eccezione e non può essere interrotta per passare ad un altro programma finché non termina (con l'istruzione IRET, che azzera anche il flag NT). Utile solo in multitasking in modo protetto.
15 0 valore fisso
16 RF Resume Flag: se viene posto a 1, disabilita temporaneamente le eccezioni di debug. Utile per l'esecuzione passo-passo dei programmi: viene usato insieme al flag TF
17 VM Virtual 8086 mode: se posto a 1, questo flag indica che si sta eseguendo il programma in modo "8086 virtuale" (emulazione).

This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.