Steag

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
Notă despre dezambiguizare.svg Dezambiguizare - Dacă sunteți în căutarea altor semnificații, consultați Flag (dezambiguizare) .

În informatică , un steag (cuvânt englezesc care înseamnă literalmente steag ) este o variabilă (de obicei booleană ) care poate lua doar două stări („adevărat” sau „fals”, „pornit” și „oprit”, „1” și „ 0 "," activat "și" oprit ") și care semnalează, cu valoarea sa, dacă un eveniment dat a avut loc sau nu, sau dacă sistemul se află într-o anumită stare sau nu [1] [2] . Este folosit de un programator pentru a efectua anumite operații numai la atingerea unei anumite stări sau la apariția unui anumit eveniment.

Operațiunea de setare a valorii unui steag la „adevărat” se numește setarea steagului , în timp ce plasarea acestuia în starea „falsă” se numește resetarea sau ștergerea steagului .

Pentru a verifica dacă starea dorită a fost atinsă, se efectuează una sau mai multe verificări asupra valorii steagului din cod . Valoarea pavilionului este modificată numai când se atinge starea dorită. Când, la verificarea valorii steagului, aceasta se dovedește a fi așa-numita valoare santinelă (de obicei adevărată pentru steagurile booleene), se efectuează operațiunile necesare [3] .

Un exemplu tipic este utilizarea unei variabile de steag booleene numite „găsite” în cadrul unui algoritm de căutare . Această variabilă este setată inițial la „fals” și apoi modificată la „adevărat” numai atunci când este găsit elementul căutat. Odată ce algoritmul iterativ a verificat valoarea pozitivă a steagului „găsit”, acesta se încheie cu succes.

Alte exemple de utilizare a semnalizatoarelor sunt variabilele de semafor folosite în cadrul sistemelor de operare pentru a sincroniza accesul la resurse .

Semnalizări în procesoare

În procesoare există multe semnalizatoare asociate cu operații matematice , reprezentate cu biți simpli organizați într-un registru special important, registrul de semnalizare [4] . Printre aceste stegulețe se află steagul zero , care ia valoarea 1 de fiecare dată când ultima operație matematică efectuată de CPU a dat un rezultat egal cu zero, în timp ce ia valoarea 0 dacă rezultatul a fost un număr diferit de zero. Valoarea diferitelor semnalizatoare este utilizată în instrucțiunile de salt condițional ale procesorului pentru a decide dacă sări sau nu.

Steagul CPU Intel 80386

Aici, ca exemplu al semnalizărilor unui procesor, registrul de semnalizare al procesorului Intel 80386 și semnificația acestora:

!Pic Piesă tematică Descriere
0 CF Carry flag: este setat la 1 de CPU dacă ultima operație a generat un carry (și în alte ocazii)
1 1 Valoare fixa
2 PF Steag paritate: este setat la 1 de CPU dacă ultima operație a dus la un număr binar par, în sens boolean (adică ultimul bit este 0)
3 0 Valoare fixa
4 AF Indicator de transport auxiliar: utilizat în locul transportului normal în instrucțiunile aritmetice BCD
5 0 Valoare fixa
6 ZF Steag zero: este setat la 1 de CPU dacă ultima operație a dat zero ca rezultat
7 SF Semnificație: este setată la 1 de CPU dacă rezultatul ultimei operații are un semn negativ (dacă este interpretat în complementul celor doi )
8 TF Trap flag: când este setat la 1, după fiecare instrucțiune executată CPU execută automat o instrucțiune INT 01 (întrerupere 1): este setată de către depanatori să urmeze execuția pas cu pas a programelor care sunt depanate . Este modificat de programul care rulează.
9 DACĂ Indicator de întrerupere: în tot timpul în care acest semnal este setat la 0 (prin instrucțiunea CLI), CPU nu mai răspunde la întreruperile normale (cu excepția „ Întreruperilor care nu pot fi mascate ”). Este modificat de programul care rulează.
10 DF Direction Flag: dacă este setat la 1, așa-numitele „instrucțiuni de șir” (de exemplu LODSB ) vor fi executate înainte , adică cu adrese de memorie crescânde: altfel se va întâmpla opusul. Este modificat de programul care rulează.
11 DE Overflow Flag: este setat la 1 de către CPU atunci când rezultatul ultimei operații este mai mare decât valoarea maximă pe care o poate conține registrul de destinație.
12 IOPL (primul bit) Nivelul I / O Privilege: în funcție de valoarea celor doi biți, programul care rulează poate executa instrucțiuni I / O pe porturile hardware. Dacă ambele sunt setate la 0 și programul încearcă să efectueze operațiuni similare, acesta este blocat și se generează o eroare de protecție. Este modificat de sistemul de operare. Nefiind o valoare booleană, IOPL nu este cu adevărat un steag, totuși este încă localizat în acest registru.
13 IOPL (al doilea bit)
14 NT Sarcină imbricată: acest indicator este setat la 1 de către CPU și înseamnă că codul care se execută este subrutina de serviciu a unei întreruperi sau a unei excepții și nu poate fi întreruptă pentru a trece la un alt program până când nu se termină (cu instrucțiunea IRET, șterge steagul NT). Util numai în multitasking-ul protejat.
15 0 Valoare fixa
16 RF Reluare semnal: dacă este setat la 1, dezactivați temporar excepțiile de depanare. Util pentru executarea pas cu pas a programelor: este utilizat împreună cu pavilionul TF
17 VM Modul virtual 8086: dacă este setat la 1, acest indicator indică faptul că programul rulează în modul „virtual 8086” (emulare).

Notă

  1. ^ (EN) Penn și Don Brumm Brumm, 80386 Language Assembly: A Complete Tutorial and Subroutine Library , McGraw-Hill School Education Group, 1988, p. 606, ISBN 978-0-8306-9047-3 .
  2. ^ (EN) Steve Oualline, Practical C Programming , O'Reilly Media, Inc., 1997, p. 403, ISBN 978-1-56592-306-5 .
  3. ^ (EN) Ian Griffiths, Matthew Adams și Jesse Liberty, Programare C # 4.0: Construirea aplicațiilor Windows, Web și RIA pentru .NET 4.0 Framework , O'Reilly Media, Inc., 2010, p. 81, ISBN 978-1-4493-9972-6 .
  4. ^ (EN) Michael A. Miller, The 68000 Microprocessor Family: Architecture, Programming, and Applications , Merrill, 1992, p. 323, ISBN 978-0-02-381560-7 .
Informatică Portal IT : accesați intrările Wikipedia care se ocupă cu IT