Ľudmila Jánošíková

Programovanie v jazyku symbolických adries

pre 32-bitové procesory Intel
Obsah Index
Reálna aritmetika

Operácie s číslami v pohyblivej rádovej čiarke zabezpečuje výkonná jednotka procesora označená FPU (Floating-Point Unit). FPU umožňuje prácu s nasledujúcimi typmi dát:

  • 16-bitové celé číslo so znamienkom;
  • 32-bitové celé číslo so znamienkom;
  • 64-bitové celé číslo so znamienkom;
  • 32-bitové reálne číslo v jednoduchej presnosti, kde 23 bitov zaberá mantisa v priamom kóde v rozsahu <1;2) (len číslice za rádovou čiarkou), 8 bitov exponent v kóde transformovanej nuly (exponent čísla + 127) a najvyšší bit je znamienko čísla;
  • 64-bitové reálne číslo v dvojnásobnej presnosti, kde 52 bitov zaberá mantisa v priamom kóde v rozsahu <1;2) (len číslice za rádovou čiarkou), 11 bitov exponent v kóde transformovanej nuly (exponent čísla + 1023) a najvyšší bit je znamienko čísla;
  • 80-bitové reálne číslo v rozšírenej presnosti, kde 64 bitov zaberá mantisa v priamom kóde vrátane číslice pred rádovou čiarkou, 15 bitov exponent v kóde transformovanej nuly (exponent čísla + 16383) a najvyšší bit je znamienko čísla;
  • 80-bitové BCD číslo v zhustenom formáte (18 číslic a znamienko).

Základnou časťou FPU je osem 80-bitových registrov označených R0 až R7 a organizovaných ako zásobník, ktorý rastie od registra R7 k registru R0. Do týchto registrov sa ukladajú operandy inštrukcií. V inštrukciách sa registre označujú st(0) až st(7), pričom index je relatívny voči vrcholu zásobníka. Ďalej FPU obsahuje register známok, stavový register a riadiaci register (všetky 16-bitové) a 32-bitové ukazovatele (adresy) spracovávanej inštrukcie a operandu v pamäti.

Register známok (tag register) obsahuje 8 známok (pre každý register R0 až R7 jednu). Známka je dvojbitová hodnota, ktorá nás informuje o obsahu registra:

Hodnota Význam
00 Register obsahuje platné číslo.
01 Obsahom registra je nula.
10 Obsah registra je špeciálny: denormalizované číslo, nenormalizované číslo, nekonečno alebo neplatné číslo.
11 Register je prázdny.
Poznámka
Denormalizované číslo má najmenší exponent a nenormalizovanú mantisu, t.j. exponent je 0 a najvyšší bit mantisy (číslo pred rádovou čiarkou) je tiež 0.
Nenormalizované číslo má nenormalizovanú mantisu (najvyšší bit mantisy je 0).
Nekonečno znamená, že výsledok operácie je väčší (menší) ako najväčšie (najmenšie) zobraziteľné číslo.
Neplatné číslo vznikne napr. pri pokuse o odmocninu zo záporného čísla.

Konfigurácia stavového registra (status register) je na obr. 18. Bity 0 až 5 sú výnimky (exceptions), ktoré nás informujú o výsledku predchádzajúcej operácie. Ukazovateľ zásobníka obsahuje číslo registra, ktorý je na vrchole zásobníka. Bity C0, C2 a C3 sú podmienkové bity, ktoré sa nastavujú pri porovnaní čísiel. Chybná operácia je napr. odmocnina zo záporného čísla. Pretečenie vznikne pri pokuse uložiť príliš veľké číslo v rozšírenej presnosti do premennej v menšej presnosti (jednoduchej alebo dvojnásobnej), podobne podtečenie vznikne pri pokuse uložiť príliš malú hodnotu, ktorá nie je zobraziteľná v menšej presnosti. Výnimka presnosti vznikne vtedy, keď výsledok nie je presne zobraziteľný, napr. 1/3. Chyba zásobníka vznikne pri pretečení zásobníka (pri pokuse uložiť do zásobníka deviatu hodnotu) alebo pri podtečení zásobníka (pri pokuse vybrať hodnotu z prázdneho zásobníka). Podľa bitu C1 pritom rozlíšime, ktorá z týchto dvoch situácií nastala: C1 má hodnotu 1, ak došlo k pretečeniu a hodnotu 0, ak došlo k podtečeniu. Príznak výnimky sa nastaví, keď vznikne nejaká výnimka 0 až 5 a nie je zamaskovaná (pozri riadiaci register). Tento bit predstavuje žiadosť FPU o prerušenie.

Obr. 18. Stavový register FPU

Obr. 19. Riadiaci register FPU

Konfigurácia riadiaceho registra (control register) je na obr. 19. Bity 0 až 5 maskujú výnimky 0 až 5 zaznamenané v stavovom registri: ak maska obsahuje 0, pri vzniku príslušnej výnimky FPU generuje prerušenie. Hodnota 1 v maske spôsobí, že FPU výnimku len zaznamená v stavovom registri. Bity 8 a 9 určujú presnosť v priebehu výpočtu (štandardné nastavenie je 11):

Bity 9 a 8 Presnosť
00 24 bitov
01 nepoužitá
10 53 bitov
11 64 bitov

Bity 10 a 11 určujú spôsob zaokrúhľovania (štandardné nastavenie je 00):

Bity 11 a 10 Zaokrúhľovanie
00 k najbližšiemu alebo párnemu číslu
01 dole
10 hore
11 odrezanie (zaokrúhľovanie k 0)

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

BCD aritmetika| Inštrukčný súbor FPU
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4.
Otázky a pripomienky môžete poslať autorke.
Naposledy upravené 14.11.2007.