Ľudmila Jánošíková

Programovanie v jazyku symbolických adries

pre 32-bitové procesory Intel
Obsah Index
Register príznakov

Register príznakov je 32-bitový register, ktorý obsahuje informácie o výsledku poslednej aritmetickej alebo logickej operácie, o stave procesora a o stave práve spracovávanej úlohy. Konfiguráciu registra príznakov vidíme na obr. 6.

31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16
0 0 0 0 0 0 0 0 0 0 ID VIP VIF AC VM RF

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 NT IOPL OF DF IF TF SF ZF 0 AF 0 PF 1 CF

Obr. 6. Register príznakov

Bity 0, 2, 4, 6, 7 a 11 sú indikačné bity, ktoré sa nastavujú po vykonaní aritmetickej alebo logickej inštrukcie. Informujú nás o tom, aký je výsledok tejto operácie. Podľa ich hodnoty sa potom môžeme rozhodnúť, ako bude výpočet ďalej pokračovať.

Príznak CF

Indikačný bit prenosu CF (Carry Flag) sa nastaví na 1, keď výsledok aritmetickej operácie s číslom bez znamienka sa nezmestí do určeného registra alebo pamäťového miesta, t.j. keď došlo k prenosu z najvýznamnejšieho rádu výsledku. V opačnom prípade sa nastaví na 0. Napr. po vykonaní inštrukcií

mov al,0FFh; ulož 0FFh do registra al 1
add al,4; pripočítaj 4 k obsahu registra al

sa nastaví príznak CF na 1, lebo výsledok sčítania 0FFh + 4 = 103h sa nezmestí do 8-bitového registra AL:

1111 1111 (= 0FFh)
0000 0100 (= 4h)
(1) 0000 0011 (= 103h)

Podobne aj po vykonaní inštrukcií

mov dh,2; ulož 2 do registra dh
sub dh,0FFh; odčítaj 0FFh od obsahu registra dh

sa nastaví príznak CF na 1, pretože odčítame väčšie číslo od menšieho.

Príznak CF nám teda hovorí, či je po sčítaní alebo odčítaní čísiel bez znamienka všetko v  poriadku. Okrem toho príznak CF

  • indikuje výsledok porovnania dvoch čísiel bez znamienka,
  • spolu s príznakom OF informuje o výsledku násobenia,
  • pri posuve alebo rotácii obsahu registra alebo pamäťového miesta obsahuje hodnotu vysunutého bitu,
  • nastavujú inštrukcie bt, btc, btr, bts, ktoré do CF kopírujú zvolený bit registra alebo pamäťového miesta.

Príznak OF

Indikačný bit pretečenia OF (Overflow Flag) nás informuje o tom, či výsledok aritmetickej operácie s číslami so znamienkom je v stanovenom rozsahu. Napr. pre operandy veľkosti bajtu to znamená, že výsledok musí byť v intervale á-128; 127ñ. OF má pri operáciách so znamienkovými operandami rovnakú funkciu ako CF pri operáciách s bezznamienkovými operandami. Nastaví sa na 1, keď pri aritmetickej operácii došlo k pretečeniu do najvyššieho (znamienkového) bitu, ale nedošlo k pretečeniu zo znamienkového bitu, alebo keď došlo k pretečeniu len zo znamienkového bitu. Inými slovami, OF sa nastavuje pri nonekvivalencii prenosov do/zo znamienkového bitu. Nasledujúce inštrukcie

mov al,127; ulož 127 (7Fh) do registra al
add al,4; pripočítaj 4 k obsahu registra al

nastavia OF na 1, pretože výsledok (131 = 83h) nie je v stanovenom intervale:

0111 1111 (= 7Fh)
0000 0100 (= 4h)
1000 0011 (= 83h)

Podobne sa OF nastaví na 1 po vykonaní inštrukcií

mov bl,0FEh; ulož 0FEh (-2) do registra bl
sub bl,7Fh; odčítaj 7Fh (127) od obsahu registra bl

lebo -2 - 127 = -129 < -128.

Príznaky OF a CF indikujú spoločne veľkosť výsledku násobenia: CF a OF sa nastavia na 1, ak výsledok nie je zobraziteľný v pôvodnom rozsahu operandov.

Príznak SF

Indikačný bit znamienka SF (Sign Flag) sa používa, keď spracovávané údaje budeme považovať za čísla so znamienkom. Indikuje, či výsledok operácie so znamienkovými číslami je kladný (v takom prípade sa SF nastaví na 0), alebo záporný (SF sa nastaví na 1). SF má rovnakú hodnotu ako najvýznamnejší (znamienkový) bit výsledku. Napr. po vykonaní inštrukcií

mov al,2; ulož 2 do registra al
sub al,5; odčítaj 5 od obsahu registra al

bude v registri AL hodnota 0FDh (= -3) a príznak SF sa nastaví na 1. Na druhej strane príkazy

mov al,3; ulož 3 do registra al
sub al,0FFh; odčítaj 0FFh (-1) od obsahu registra al

nastavia SF na 0, lebo výsledkom operácie odčítania bude číslo 4 v registri AL:

0000 0011 (= 3h)
- 1111 1111 (= 0FFh)
(1) 0000 0100 (= 4h)

Po tejto operácii bude príznak OF nastavený na 0, pretože hoci došlo k pretečeniu do znamienkového bitu, nastal aj prenos zo znamienkového bitu. Príznak CF bude mať hodnotu 1. Vidíme, že jednou operáciou sa môže súčasne nastaviť viacej indikačných bitov.

Príznak AF

Indikačný bit pomocného prenosu AF (Auxiliary Carry Flag) sa používa pri operáciách s číslami v desiatkovej sústave, ktoré sú uložené v zhustenom formáte BCD. Vo formáte BCD je každá číslica desiatkového čísla zapísaná v štyroch bitoch ako číslo v sústave dvojkovej. Príznak AF sa nastaví na 1, keď pri sčítaní alebo odčítaní došlo k prenosu z 3. do 4. bitu.

Príznak ZF

Indikačný bit ZF (Zero Flag) sa nastaví na 1, keď je výsledok operácie 0, napr. po nasledujúcich inštrukciách:

mov ax,2; ulož 2 do registra ax
sub ax,2; odčítaj 2 od obsahu registra ax

Príznak PF

Indikačný bit parity PF (Parity Flag) sa nastaví na 1, keď v najnižšom bajte výsledku predchádzajúcej operácie má párny počet bitov hodnotu 1. Používa sa najmä pri prenose dát medzi zariadeniami.

Príznak DF

Hodnotu bitu DF (Direction Flag) nastavujeme inštrukciami v programe pred spracovaním polí dát (reťazcov, matíc atď.). Ak je bit DF nastavený na 0, tak sa po spracovaní jedného prvku poľa obsah indexového registra zväčší o počet bajtov, ktoré zaberá jeden prvok poľa. Ak je bit DF nastavený na 1, tak sa hodnota indexu zmenšuje o dĺžku prvku poľa, teda pole sa spracováva od konca.

Príznak IF

Príznak IF (Interrupt Enable Flag) tiež nastavujeme inštrukciami v programe. Keď je nastavený na 1, môže byť spracovanie programu procesorom prerušené signálom od periférneho zariadenia (klávesnice, modemu atď.). Ak nastavíme príznak IF na 0, zakážeme výskyt externého prerušenia. Pri vstupe do obslužného programu prerušenia sa príznak IF automaticky nastavuje na 0 a po skončení obslužného programu sa jeho pôvodná hodnota zase obnovuje.

Príznak TF

Podobne ako IF, aj príznak TF (Trap Flag) sa nastavuje príkazom v programe alebo príkazmi vyvolania obslužného programu prerušenia a návratu z obslužného programu. Keď nastavíme tento príznak na 1, prejde procesor do tzv. krokovacieho režimu, v ktorom sa vyvoláva interné prerušenie po každej inštrukcii. Tento režim sa využíva pri ladení programov.

Príznak RF

Aj príznak RF (Resume Flag) sa používa pri ladení programov. Nastavenie tohto bitu na 1 spôsobí, že prípadný breakpoint pri spracovaní nasledujúcej inštrukcie bude ignorovaný. Nastavuje sa na 1 po ukončení obslužného programu breakpointu, takže program môže pokračovať od rovnakej inštrukcie, ktorá predtým breakpoint spôsobila. Po úspešnom vykonaní inštrukcie sa príznak RF vynuluje.

Príznak NT

Príznak NT (Nested Task) spolu s príznakom IOPL podporujú multiprogramovanie. Ak je príznak NT nastavený na 1, indikuje, že spracovávaná úloha je vnorená v inej úlohe. Príznak sa mení pri odovzdávaní riadenia medzi úlohami.

Príznak IOPL

Príznak IOPL (Input/Output Privilege Level) je dvojbitový, môže teda nadobúdať hodnoty 0 až 3. Súvisí s prioritou úloh vo viacúlohovom prostredí. Každá úloha má pridelenú prioritu: najvyššiu prioritu 0 má jadro operačného systému a riadiace programy zariadení (device drivers), nižšiu prioritu majú ostatné časti operačného systému, najnižšiu (3) aplikačné programy a knižnice. Príznak IOPL určuje maximálnu hodnotu priority, pri ktorej ešte môže úloha meniť príznak IF a pristupovať k vstupno-výstupnému adresovému priestoru. Teda za istých okolností môže operačný systém zakázať aplikačným programom zásahy do styku s vonkajšími zariadeniami. Príznak IOPL sa mení v chránenom režime prepnutím úloh.

Príznak VM

Keď je príznak VM (Virtual 8086 Mode) nastavený na 1, znamená to, že procesor je vo virtuálnom režime. Príznak sa mení prepnutím úloh.

Príznak AC

Keď je bit AC (Alignment Check) nastavený na 1 a zároveň bit AM v riadiacom registri CR0 má hodnotu 1, je povolená kontrola pamäťových odkazov na zarovnanie.

Príznak VIF

Bit VIF (Virtual Interrupt Flag) je virtuálny príznak povolenia prerušenia. Aktivuje sa príznakom VIP. Ak je aktivovaný, má rovnaký význam ako príznak IF.

Príznak VIP

Nastavením príznaku VIP (Virtual Interrupt Pending Flag) na 1 sa povoľuje činnosť príznaku VIF.

Príznak ID

Príznak ID (Identification Flag) určuje, či je procesor schopný vykonávať inštrukciu cpuid, ktorá identifikuje typ procesora. Ak procesor môže meniť tento bit, potom je to niektorý z procesorov Pentium alebo neskoršia verzia procesora 80486.


1 Znak „h“ za zápisom čísla znamená, že číslo je v sústave šestnástkovej.

Hore

Načo je vám jazyk symbolických adries?

Architektúra moderných procesorov

Registre

Spôsoby adresovania

Premenné a návestia

Symbolické konštanty

Inštrukčný súbor

Segmentové direktívy

Moduly

Služby operačného systému MS-DOS

Služby operačného systému Windows 95/98/NT/XP

Systémová úroveň vstupu a výstupu

Prostriedky pre prípravu programu

Čítač inštrukcií | Cvičenie
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4.
Otázky a pripomienky môžete poslať autorke.
Naposledy upravené 14.9.2007.