Állapotnyilvántartás - Status register
A státusz regiszter , flag regiszter vagy állapot regiszter ( CCR ) gyűjteménye állapot flag bit egy processzor . Ilyen regiszterek például a FLAGS regiszter az x86 architektúrában , a programállapot-szó (PSW) regisztráció zászlói az IBM System / 360 architektúrában a z / Architecture révén , és az alkalmazásprogram-állapot regiszter (APSR) az ARM Cortex-A architektúrában. .
Az állapotregiszter egy hardverregiszter , amely információkat tartalmaz a processzor állapotáról . Az egyes biteket hallgatólagosan vagy kifejezetten olvassa és / vagy írja a processzoron végrehajtott gépi utasítás. A státuszregiszter lehetővé teszi, hogy egy utasítás az előző utasítás kimenetelétől függően cselekedhessen.
Jellemzően az állapotregiszterben szereplő jelzőket az aritmetikai és a bitmanipulációs műveletek hatásaként módosítják. Például egy Z bit beállítható, ha a művelet eredménye nulla, és törölhető, ha nem nulla. Más utasításosztályok is módosíthatják a jelzőket az állapot jelzésére. Például egy string utasítás teheti meg annak jelzésére, hogy az utasítás azért fejeződött-e be, mert talált egyezést / nem egyezik, vagy mert megtalálja a karakterlánc végét. A jelzőket egy későbbi feltételes utasítás olvassa fel, így a megadott művelet (a processzortól függően egy ugrás, hívás, visszatérés stb.) Csak akkor történik, ha a jelzők a korábbi utasítás meghatározott eredményét jelzik.
Egyes CPU architektúrák, mint például a MIPS és az Alpha , nem használnak külön zászlóregisztert. Mások implicit módon nem állítanak be és / vagy nem olvasnak zászlót. Az ilyen gépek vagy egyáltalán nem adják át az implicit állapotinformációkat az utasítások között, vagy egy kifejezetten kiválasztott általános célú regiszterben továbbítják.
Az állapotregiszternek gyakran lehetnek más mezői is, például speciálisabb jelzők, megszakító engedélyező bitek és hasonló típusú információk. Egy megszakítás során az aktuálisan végrehajtott szál állapota megőrizhető (és később visszahívható), ha az állapotregiszter aktuális értékét a programszámlálóval és más aktív regiszterekkel együtt a gépi verembe vagy más fenntartott memóriaterületre tárolja.
Közös zászlók
Ez egy lista a leggyakoribb CPU állapotregiszter-zászlókról, amelyeket szinte minden modern processzor megvalósít.
| Zászló | Név | Leírás |
|---|---|---|
| Z | Nulla zászló | Azt jelzi, hogy egy számtani vagy logikai művelet (vagy néha terhelés) eredménye nulla volt. |
| C | Carry flag | Lehetővé teszi az egyetlen szónál nagyobb számok hozzáadását / kivonását úgy, hogy szükség esetén bináris számjegyet visz a kevésbé jelentős szóból a lényegesebb szó legkevesebb bitjébe. Arra is használják, hogy meghosszabbítsa a biteltolódásokat, és hasonló módon forog sok processzoron (néha dedikált X zászlón keresztül ). |
| S / N | Jel zászló negatív zászló |
Jelzi, hogy egy matematikai művelet eredménye negatív. Egyes processzorokban az N és S jelzők különböző jelentéssel és felhasználással rendelkeznek egymástól: Az egyik azt jelzi, hogy az utolsó eredmény negatív volt, míg a másik azt jelzi, hogy kivonás vagy összeadás történt-e. |
| V / O / W | Túlcsordulás zászló | Jelzi, hogy egy művelet aláírt eredménye túl nagy ahhoz, hogy elférjen a regiszter szélességében, a kettő komplementer ábrázolásával. |
Egyéb zászlók
Néhány processzoron az állapotregiszter a következő jelzőket is tartalmazza:
| Zászló | Név | Leírás |
|---|---|---|
| H / A / DC |
Half carry flag Kiegészítő zászló Digit Carry Decimal Adjust flag |
Azt jelzi, hogy a legutóbbi aritmetikai művelet eredményeként egy kis hordozhatóság keletkezett a rágcsálók között (általában egy bájtos operandus 4 bites fele között). Egy ilyen jelző általában hasznos a BCD aritmetikai műveletek végrehajtásához bináris hardveren. |
| P | Paritás zászló | Azt jelzi, hogy az utolsó eredmény beállított bitjeinek száma páratlan vagy páros-e. |
| én | Megszakító zászló | Egyes processzoroknál ez a bit jelzi, hogy a megszakítások engedélyezve vannak-e vagy maszkolva vannak-e. Ha a processzornak több megszakítási prioritási szintje van, például a PDP-11 , akkor több bit használható az aktuális szál prioritásának jelzésére, lehetővé téve azt csak magasabb prioritású hardverrel megszakítva. Más architektúrákon egy kicsit jelezheti, hogy egy megszakítás jelenleg aktív, és hogy az aktuális szál egy megszakításkezelő része . |
| S | Felügyeleti zászló | Két vagy több védelmi gyűrűt biztosító processzoroknál az állapotregiszterben egy vagy több bit jelzi az aktuális szál gyűrűjét (mennyire megbízható, vagy az operációs rendszert kell-e használnia olyan kérésekhez, amelyek akadályozhatnak más szálakat). Csak két gyűrűt tartalmazó processzoron egyetlen bit különböztetheti meg a felügyelőt a felhasználói módtól. |
CPU architektúrák számtani jelzők nélkül
Az állapotjelzők lehetővé teszik az utasítások működését egy korábbi utasítás eredménye alapján. A csővezetékes processzorokban, mint például a szuperskaláros és a spekulatív processzorokban, ez olyan veszélyeket okozhat, amelyek lassítják a feldolgozást, vagy további hardvert igényelnek a körülöttük történő működéshez.
Néhány nagyon hosszú utasításos szövegszerkesztő eltekint az állapotjelzőktől. Egyetlen utasítás végrehajt egy tesztet, és jelzi, hogy a teszt melyik kimenetelén hajtson végre egy műveletet, például hasonlítsa össze a- t b-vel és ugorjon c-re, ha egyenlő. A teszt eredményét a rendszer nem menti el a további utasításokhoz.
Az állapotregiszter másik alternatívája az, ha a processzor utasításai az állapotinformációkat egy általános célú nyilvántartásba helyezik, amikor a program kéri. A MIPS , az AMD 29000 , a DEC Alpha és a RISC-V példák olyan architektúrákra, amelyek összehasonlítási utasításokat nyújtanak, amelyek az összehasonlítás eredményét egy általános célú regiszterben tárolják, egyetlen bitként vagy 0 vagy 1 számértékként. Feltételes elágazások az általános célú nyilvántartásban szereplő érték.
Az összehasonlítási utasítások általában tesztelik az egyenlőséget vagy az aláírt / aláíratlan nagyságot. Más körülmények teszteléséhez a program ekvivalencia képletet használ. Például a MIPS-nek nincs "hordozó bitje", de egy többszavas összeadást végrehajtó program tesztelheti, hogy a regiszterek egyszavas összeadása túlcsordult-e annak tesztelésével, hogy az összeg alacsonyabb-e, mint egy operandus:
# alow = blow + clow
addu alow, blow, clow
# set tmp = 1 if alow < clow, else 0
sltu tmp, alow, clow
addu ahigh, bhigh, chigh
addu ahigh, ahigh, tmp
Az sltu utasítás tmp 1 vagy 0 értékre áll a két másik operandus meghatározott összehasonlítása alapján. (Itt az általános célú regisztert tmp nem használják állapotregiszterként egy feltételes ugrás szabályozásához; inkább a magas rendű szóhoz hozzáadják az 1 lehetséges értékét, amely az alacsony rendű összeadásból eredő hordozhatóságot jelzi.)
Ez a séma kevésbé kényelmes, ha három vagy több szót ad hozzá, mivel a számítás során két kiegészítés van b + c + tmp , amelyek bármelyike hordozást generálhat, amelyet két sltu utasítással kell detektálni . Szerencsére ezt a két hordozást hozzá lehet adni egymáshoz a túlcsordulás veszélye nélkül, így a helyzet stabilizálódik, és hozzáadott szavanként öt utasítás áll rendelkezésre.