Stavový registr - Status register

Stavový registr , flag registr , nebo registr stavový kód ( CCR ) je sbírka status vlajky bitů na s procesorem . Příklady takových registrů zahrnují FLAGS zaregistrovat na architektuře x86 , vlajky v programovém stavovém slovu (PSW) Registrace v IBM System / 360 architektura skrze z / Architecture , a stavový aplikační program registr (APSR) v ARM Cortex-A architektury .

Stavový registr je hardwarový registr, který obsahuje informace o stavu procesoru . Jednotlivé bity jsou implicitně nebo explicitně čteny a / nebo zapisovány podle pokynů strojového kódu prováděných na procesoru. Stavový registr umožňuje instrukci provést akci závislou na výsledku předchozí instrukce.

Příznaky ve stavovém registru se obvykle upravují jako účinky aritmetických a bitových manipulačních operací. Například bit Z může být nastaven, pokud je výsledek operace nulový, a vymazán, pokud je nenulový. Další třídy instrukcí mohou také upravit příznaky, které indikují stav. Například řetězcová instrukce může tak učinit, aby označila, zda byla instrukce ukončena, protože našla shodu / nesoulad nebo protože našla konec řetězce. Příznaky jsou čteny následnou podmíněnou instrukcí, takže k zadané akci (v závislosti na procesoru, skoku, volání, návratu atd.) Dojde pouze v případě, že příznaky označují specifikovaný výsledek dřívější instrukce.

Některé architektury CPU, například MIPS a Alpha , nepoužívají vyhrazený registr příznaků. Jiní implicitně nenastavují a / nebo nečtou příznaky. Takové stroje buď nepředávají implicitní informace o stavu mezi instrukcemi vůbec, nebo je předávají v explicitně vybraném registru pro všeobecné účely.

Registr stavu může často obsahovat i další pole, například specializovanější příznaky, bity umožňující přerušení a podobné typy informací. Během přerušení může být stav aktuálně prováděného vlákna zachován (a později vyvolán) uložením aktuální hodnoty stavového registru spolu s čítačem programu a dalšími aktivními registry do zásobníku stroje nebo do jiné vyhrazené oblasti paměti.

Společné vlajky

Toto je seznam nejběžnějších příznaků registru stavu CPU implementovaných téměř ve všech moderních procesorech.

Vlajka název Popis
Z Nulová vlajka Označuje, že výsledek aritmetické nebo logické operace (nebo někdy načtení) byl nula.
C Nést vlajku Umožňuje sčítání / odčítání čísel větších než jedno slovo přenášením binární číslice od méně významného slova k nejméně významnému bitu významnějšího slova podle potřeby. Používá se také k rozšíření bitových posunů a otáčení podobným způsobem na mnoha procesorech (někdy se provádí prostřednictvím vyhrazeného příznaku X ).
S / N Podepsat příznak
Negativní příznak
Označuje, že výsledek matematické operace je negativní. V některých procesorech jsou příznaky N a S odlišné s různými významy a použitím: Jeden označuje, zda byl poslední výsledek záporný, zatímco druhý označuje, zda došlo k odečtení nebo přidání.
V / O / W Vlajka přetečení Označuje, že podepsaný výsledek operace je příliš velký, aby se vešel do šířky registru pomocí reprezentace dvou doplňků .

Ostatní vlajky

U některých procesorů obsahuje stavový registr také příznaky, jako jsou tyto:

Vlajka název Popis
H / A / DC Vlajka napůl nesoucí
Pomocná vlajka
Číslice Nést
Desetinné upravit příznak
Označuje, že mezi nibbles (obvykle mezi 4bitovými polovinami bajtového operandu) byl vytvořen přenos bitů jako výsledek poslední aritmetické operace. Takový příznak je obecně užitečný pro implementaci aritmetických operací BCD na binárním hardwaru.
P Vlajka parity Označuje, zda je počet nastavených bitů posledního výsledku lichý nebo sudý.
Přerušit příznak U některých procesorů tento bit označuje, zda jsou přerušení povolena nebo maskována. Pokud má procesor více úrovní priority přerušení , jako je PDP-11 , může být použito několik bitů k označení priority aktuálního vlákna, což umožňuje jeho přerušení pouze hardwarem nastaveným na vyšší prioritu. Na jiných architekturách bit může naznačovat, že přerušení je aktuálně aktivní a že aktuální vlákno je součástí obsluhy přerušení .
S Vlajka supervizora Na procesorech, které poskytují dva nebo více ochranných kroužků , označuje jedna nebo více bitů ve stavovém registru prsten aktuálního vlákna (jak je důvěryhodný, nebo zda musí používat operační systém pro požadavky, které by mohly bránit jiným vláknům). Na procesoru s pouhými dvěma zazvoněními může jeden bit odlišit režim supervizora od režimu uživatele.

Architektury CPU bez aritmetických příznaků

Příznaky stavu umožňují instrukci jednat na základě výsledku předchozí instrukce. U zřetězených procesorů, jako jsou superskalární a spekulativní procesory, to může vytvářet rizika, která zpomalí zpracování nebo budou vyžadovat další hardware.

Některé velmi dlouhé instrukční textové procesory upustí od stavových příznaků. Jedna instrukce provede test a indikuje, na kterém výsledku tohoto testu má být provedena akce, například Porovnat a s b a Přejít na c, pokud je rovno. Výsledek testu se neukládá pro další pokyny.

Další alternativou stavového registru je, že instrukce procesoru ukládají informace o stavu do univerzálního registru, když si to program vyžádá. MIPS , AMD 29000 , DEC Alpha a RISC-V jsou příklady architektur, které poskytují pokyny k porovnání, které ukládají výsledek porovnání do registru pro všeobecné účely, protože jediný bit nebo číselná hodnota 0 nebo 1. Podmíněné větve fungují na základě hodnota v registru pro všeobecné účely.

Pokyny k porovnání obvykle testují rovnost nebo velikost podepsaného / nepodepsaného. K testování dalších podmínek používá program vzorec ekvivalence. Například MIPS nemá žádný „přenosový bit“, ale program provádějící víceslovné sčítání může otestovat, zda jednoslovné sčítání registrů přeteklo testováním, zda je součet nižší než operand:

        # 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

Tyto sltu instrukční sady tmp : 1 nebo 0 na základě určeném srovnání svých dalších dvou operandů. (Zde se univerzální registr tmp nepoužívá jako stavový registr k řízení podmíněného skoku; do slova vyššího řádu se spíše přidá možná hodnota 1, označující přenos z přidání nízkého řádu.)

Toto schéma se stává méně pohodlným při přidávání tří nebo více slov, protože při výpočtu existují dvě přidání b + c + tmp , která mohou generovat přenos, který musí být detekován dvěma sltu instrukcemi. Naštěstí mohou být tyto dva nosiče přidány k sobě bez rizika přetečení, takže situace se stabilizuje na pět instrukcí za přidané slovo.

Viz také

Reference