Registr příznaků
Registr příznaků je jeden z procesorových registrů. Na rozdíl od většiny ostatních není interpretován jako číslo, ale každý z jeho bitů má zvláštní význam, jedná se o soubor příznaků procesoru. Provedení některých instrukcí může měnit hodnotu některých příznaků. Nastavení jednotlivých příznaků je pak buď možno přímo číst, nebo je nepřímo využíváno tak, že ovlivňuje chování některých instrukcí. Typickým příkladem jsou instrukce podmíněných skoků, které provedou skok v závislosti na stavu konkrétních příznaků – tedy v závislosti na výsledku předchozích instrukcí.
Velikost registru příznaků, počet, pozice i význam jednotlivých bitů závisí na typu procesoru, respektive na jeho architektuře. Například v rámci architektury x86 byl původně registr příznaku 16bitový a u procesorů typu 8086 byly ještě některé bity nevyužívané, ale od procesorů 80386 výš už byl 32bitový.[1]
Příznaky lze dělit na aritmetické-logické a na řídící. Příklady aritmeticko-logických příznaků jsou:
- příznak přenosu: Je nastavován například operacemi sčítání a odčítání, dojde-li k výpůjčce nebo k přenosu z nejvýznamnějšího bitu. Také jej mohou nastavovat bitové operace.
- příznak vynulování: Je nastavován, je-li výsledkem operace nula.
- příznak znaménka: Je nastavován, má-li výsledek operace nastaven nejvýznamnější bit (tedy znaménkový bit), tedy je-li při interpretaci jako číslo v dvojkovém doplňku záporný
- příznak přetečení: Je nastavován, pokud se výsledek operace nevejde do registru při počítání ve dvojkovém doplňku.
- příznak parity: Je nastavován podle toho, je-li počet nastavených bitů výsledku poslední operace sudý či lichý.
a příklady řídících příznaků jsou:
- příznak krokování: Je-li nastaven, je po každé instrukci zavoláno přerušení.
- příznak povolení přerušení: Je-li nastaven, jsou povolena maskovatelná přerušení
Příznakový registr procesoru Z80
registr F | |||||||
---|---|---|---|---|---|---|---|
S | Z | H | P/V | N | C |
Příznakový registr procesoru Z80 je také nazýván registr F a v instrukcích pro operace s tímto registrem pracujících jako s celkem (a nikoliv jenom s jednotlivými příznaky) je tímto písmenem také označen.
Příznaky umístěné v registru F jsou:
- příznak znaménka - SIGN, S - u osmibitových operací je nastaven pro čísla větší než 128, u šestnnáctibitových operací je nastaven pro čísla větší než 32768,[2]
- příznak nuly - ZERO, Z - obvykle je nastavován, pokud je výsledek operace nula, instrukce bit příznak nuly nastavuje, pokud je testovaný bit nulový, instrukce blokového vstupu a výstupu ini, ind, outi a outd příznak nastaví, pokud je hodnota v registru B rovna nule, instrukce blokového vstupu a výstupu s opakováním inir, indr, otir a otdr příznak nuly nastaví vždy na jedna a instrukce blokového hledání cpi a cpd a instrukce blokového hledání s opakováním cpir a cpdr nastavují příznak nuly, pokud se prohledávaném bloku paměti nachází hodnota shodná s hodnotou uloženou v registru A,[2]
- příznak polovičního přenosu - HALF CARRY, H[2]
- příznak parity a přetečení - PARITY & OVERFLOW, P/V - příznak kombinuje význam příznaku parity a příznaku přetečení, logické operace bit nastavují, pokud výsledek obsahuje pokud je ve výsledku sudý počet shodných bitů, a aritmetické operace příznak nastavují, pokud se při počítání s čísly jako sedmibitovými čísly změní hodnota nejvyššího bitu a instrukce
ld a,r
ald a,i
do příznaku kopírují hodnotu klopného obvodu IFF, který určuje, zda je povolené či zakázané přerušení,[2] - příznak odečítání - N - příznak je nastaven, pokud předcházející operace byla odečítání,
- příznak přenosu - CARRY, C - je nastaven, pokud je výsledek operace větší nebo menší, než maximální, resp. minimální hodnota, která může být uložena v registru či ve dvojici registrů, a je využíván pri operacích rotace a posuvu registru.[2]
Příznak polovičního přenosu a příznak odečítání nejsou přímo testovatelné.[2] Příznaky jsou v registru F uloženy v pořadí od sedmého bitu k nultému jako S, Z, nevyužitý bit, H, nevyužitý bit, P/V, N a C.[3]
Příznakový registr mikroprocesoru 8051
registr F | |||||||
---|---|---|---|---|---|---|---|
CY | AC | F0 | RS1 | RS0 | OV | --- | P |
Příznakový registr architektury MCS-51 je osmibitový a označuje se jako PSW (Program Status Word - stavové slovo). Jejich hodnota je přímo využita (čtení/nastvení) některými instrukcemi. Lze v něm adresovat bity jednotlivě (bit-addressable).
- Bit 7 - CY (Carry)- příznak přenosu. Nastaví se, došlo-li k přenosu nebo výpůjčce z nejvyššího bitu.
- Bit 6 - AC (Auxiliary Carry) - poloviční přenos. Nastaví se, pokud došlo k přenosu nebo výpůjčce mezi třetím a čtvrtým bitem (využívá se pro BCD aritmetiku).
- Bit 5 - F0 (Flag 0) - uživatelský příznak.
- Bit 4 - RS1 (Register Select 1) - vyšší bit volby banky registrů (určuje, z jaké oblasti paměti se budou jednotlivé registry využívat).
- Bit 3 - RS0 (Register Select 0) - nižší bit volby banky registrů.
- Bit 2 - OV (Overflow) - příznak přetečení.
- Bit 1 - bez názvu - uživatelský příznak (jednobitová paměť).
- Bit 0 - P (Parity) - příznak parity. Indikuje lichý počet jedniček v akumulátoru - nejvýznamnějším registru 8051. [4]
Příznakový registr v procesoru konzole GameBoy
registr F | |||||||
---|---|---|---|---|---|---|---|
Z | N | H | C | 0 | 0 | 0 | 0 |
Příznakový registr (také nazýván jako registr F) procesoru konzole GameBoy obsahuje pouze čtyři příznaky, jejich význam je totožný s odpovídajícími příznaky procesoru Z80. Při čtení spodních čtyř bitů registru jsou tyto bity vždy nulové, a to i v případě, že do nich byla zapsána jednička.[5]
Reference
V tomto článku byl použit překlad textu z článku Status register na anglické Wikipedii.
- VRÁTIL, Zdeněk. Assembler PC. [s.l.]: GETHON audio and computer, 1994.
- VILÍM, Tomáš. Assembler a ZX Spectrum, 1. díl. Ústí nad Labem: Proxima - Software, 1992. ((česky))
- 8ビット CPU Z80命令セット [online]. Rev. 2015-08-23 [cit. 2016-01-15]. Kapitola フラグレジスター. Dostupné online. ((japonsky))
- Intel, 02/1994. Dostupné online. (Angličtina)
- Duo's GameBoy ASMSchool [online]. [cit. 2016-01-12]. Kapitola GameBoy Opcode Summary. Dostupné online. ((anglicky))