Ľudmila Jánošíková | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Programovanie v jazyku symbolických adries | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
pre 32-bitové procesory Intel | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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.
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 CFIndikač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 1add 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:
Podobne aj po vykonaní inštrukcií mov dh,2; ulož 2 do registra dhsub 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
Príznak OFIndikač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 aladd al,4; pripočítaj 4 k obsahu registra al nastavia OF na 1, pretože výsledok (131 = 83h) nie je v stanovenom intervale:
Podobne sa OF nastaví na 1 po vykonaní inštrukcií mov bl,0FEh; ulož 0FEh (-2) do registra blsub 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 SFIndikač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 alsub 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 alsub 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:
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 AFIndikač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 ZFIndikač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 axsub ax,2; odčítaj 2 od obsahu registra ax Príznak PFIndikač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 DFHodnotu 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 IFPrí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 TFPodobne 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 RFAj 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 NTPrí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 IOPLPrí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 VMKeď 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 ACKeď 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 VIFBit 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 VIPNastavením príznaku VIP (Virtual Interrupt Pending Flag) na 1 sa povoľuje činnosť príznaku VIF. Príznak IDPrí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. |
Načo je vám jazyk symbolických adries?
Architektúra moderných procesorov Registre
Služby operačného systému MS-DOS Služby operačného systému Windows 95/98/NT/XP |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4. Otázky a pripomienky môžete poslať autorke. Naposledy upravené 14.9.2007. |