Ľudmila Jánošíková

Programovanie v jazyku symbolických adries

pre 32-bitové procesory Intel
Obsah Index
Pracovný režim procesora

V procesoroch Intel sa používa segmentová organizácia pamäti. Segment je časť pamäti, ktorá obsahuje buď inštrukcie alebo dáta. Poloha segmentu v pamäti však nie je pevne daná, ale určí ju buď operačný systém pri spustení programu, alebo vo výnimočných prípadoch sám programátor.

Logická adresa ľubovoľného miesta v pamäti pozostáva z dvoch zložiek:

  1. bázovej adresy segmentu, ktorá určuje polohu segmentu v pamäti a
  2. offsetu – relatívnej adresy vzhľadom k začiatku segmentu.
Zapisuje sa v tvare <bázová adresa segmentu> : <offset>.

Kombináciou bázovej adresy segmentu a offsetu dostaneme lineárnu adresu. Lineárna adresa nemusí byť totožná s fyzickou adresou, ktorá sa posiela na externú adresovú zbernicu. V prípade, že fyzický adresový priestor je menší než logický adresový priestor, musí sa lineárna adresa nejakým spôsobom transformovať na fyzickú adresu. Veľkosť (počet bitov) lineárnej aj fyzickej adresy je rovnaká.

Výhodou segmentovej organizácie pamäti je skrátenie adresovej časti inštrukcie. Namiesto toho, aby inštrukcia obsahovala celú adresu operandu, obsahuje len offset, pričom bázovú adresu segmentu nájde procesor v určenom registri. Ďalším dôvodom pre segmentovú organizáciu pamäti je oddelenie dátovej a inštrukčnej časti programu do rôznych segmentov s rôznym spôsobom prístupu, čo umožňuje ochranu dát pred úmyselným či neúmyselným poškodením. Napríklad je zakázaný zápis do segmentu, ktorý obsahuje inštrukcie.

Podľa toho, aký druh údajov je v segmente uložený, rozoznávame tri typy segmentov:

  • kódový segment – obsahuje strojový kód inštrukcií,
  • dátový segment – obsahuje dáta, s ktorými sa vykonávajú výpočty,
  • zásobníkový segment – obsahuje tiež dáta; slúži na uchovávanie návratových adries pri volaní procedúr, parametrov a lokálnych premenných v procedúrach, prípadne na odkladanie medzivýsledkov operácií.

Program i dáta môžu byť uložené vo viacerých segmentoch.

Reálny režim (real mode)

Procesor 8086, prvý 16-bitový procesor firmy Intel, bol schopný pracovať len v reálnom režime. Kvôli spätnej kompatibilite sa tento režim zachoval aj v nasledujúcich procesoroch. V reálnom režime má softvér neobmedzený prístup ku všetkým pamäťovým miestam a periférnym zariadeniam. Režim neposkytuje nástroje pre ochranu pamäti ani multitasking.

Procesor 8086 mal 20-bitovú adresovú zbernicu, ktorá dovolila adresovať 220 B = 1 048 576 B = 1 MB pamäti. V reálnom režime je teda fyzická adresa 20-bitová. Bázová adresa segmentu aj offset sú 16-bitové čísla. Lineárnu adresu dostaneme tak, že bázovú adresu segmentu vynásobíme 16-imi (posunieme o 4 bity doľava) a pripočítame offset (pozri obr. 4).

Obr. 4. Výpočet lineárnej adresy

V reálnom režime je fyzická adresa totožná s lineárnou adresou. Pretože bázová adresa má 16 bitov, môžeme v rámci jedného segmentu vytvoriť 216 rôznych adries, teda maximálna veľkosť segmentu je je 216 bajtov, čo je 64 kB.

Adresy sa obvykle udávajú v šestnástkovej (hexadecimálnej) sústave. Ukážeme preto ešte príklad na výpočet fyzickej adresy z logickej adresy v šestnástkovej sústave. Akému pamäťovému miestu zodpovedá adresa 020A:1BCD? Podľa predchádzajúceho návodu vynásobíme bázovú adresu 16-timi (v desiatkovej sústave), čomu zodpovedá vynásobenie číslom 10 v sústave šestnástkovej (posunutie o 1 rád doľava) a pripočítame offset:

020A0

1BCD

03C6D

Odpoveď: Fyzická adresa je 03C6D.

Chránený režim (protected mode)

Chránený režim sa prvýkrát objavil v procesore 80286, ale až od procesora 80386 sa začal využívať v operačných systémoch a aplikáciách. Procesor 80386 má 32 bitovú adresovú zbernicu, čo umožňuje adresovať 232 B = 22 * 230 B = 4 GB pamäti.

V chránenom režime má bázová adresa segmentu 32 bitov. Dĺžka offsetu sa určuje pri deklarácii segmentu v programe. Môže byť 16 alebo 32 bitov. Podľa toho sa potom určí maximálna veľkosť segmentu: pri 16-bitovom offsete môže mať segment nanajvýš 64 kB, pri 32-bitovom offsete je maximálna veľkosť segmentu 4 GB, teda z hľadiska tvorcu aplikačných programov neobmedzená.

Lineárnu adresu získame jednoduchým sčítaním bázovej adresy segmentu a offsetu. V chránenom režime sa lineárna adresa prepočíta na fyzickú adresu pomocou mechanizmu, ktorý sa nazýva stránkovanie. Stránkovanie umožňuje:

  1. transformovať logický adresový priestor do obmedzeného fyzického priestoru,
  2. multitasking (paralelné spracovanie viacerých úloh) tým, že poskytuje nástroje pre ochranu adresového priestoru procesu pred zásahmi z iných procesov.

Ak je veľkosť offsetu nastavená na 16 bitov, hovoríme o 16-bitovom režime bez ohľadu na to, či procesor pracuje v reálnom alebo v chránenom režime. Ak je veľkosť offsetu 32 bitov, hovoríme o 32-bitovom režime.

Virtuálny režim (virtual mode)

Z chráneného režimu sa môžeme prepnúť do virtuálneho režimu. Vo virtuálnom režime sa emuluje (predstiera) reálny režim procesora 8086. Do virtuálneho režimu sa procesor prepína napríklad vtedy, keď spracováva DOS-ovskú aplikáciu pod operačným systémom Windows pre 32-bitové procesory (napr. Windows 98 alebo XP). Programátorovi sa procesor 80386 (tiež nasledujúce procesory) vo virtuálnom režime javí ako procesor 8086. Lineárna adresa je 20-bitová (báza segmentu krát 16 plus offset), takže úloha má k dispozícii 1 MB pamäti. Lineárna 20-bitová adresa sa však neposiela na externú adresovú zbernicu, ale pomocou stránkovania sa prepočíta na 32-bitovú (80386, 80486 a Pentium), resp. 36-bitovú (Pentium Pro, Pentium 4) fyzickú adresu. To umožňuje mapovať adresový priestor 1 MB po stránkach kdekoľvek do 4, resp. 64 GB pamäti. V praxi to znamená, že pod operačným systémom Windows môže súčasne bežať viacej DOS-ovských aplikácií, z ktorých každá má svoj vlastný nezávislý adresový priestor.

Legacy a long režim

Tieto dva režimy sa zaviedli v 64-bitových procesoroch. Legacy režim tu je kvôli spätnej kompatibilite - je určený pre 32-bitový operačný systém a umožňuje spúšťať aplikácie vyvinuté pre všetky tri doteraz spomenuté režimy (reálny, chránený, virtuálny).

Long režim umožňuje operačnému systému a aplikáciám využívať 64-bitové registre a inštrukčnú sadu x86-64. V pôvodnom 64-bitovom režime (64-bit mode) sa už nepoužíva segmentácia. Lineárna 64-bitová adresa sa stránkovaním transformuje na 48-bitovú fyzickú adresu. Long režim tiež umožňuje spúšťať 32-bitové programy napísané pre chránený režim (v tzv. compatibility sub-mode), ale nedovoľuje spustiť 16-bitové aplikácie napísané pre reálny alebo virtuálny režim.

Prehľad režimov v 64-bitovom procesore je v nasledujúcej tabuľke.

Režim

Operačný systém

Veľkosť lineárnej adresy

Veľkosť univerzálnych registrov

Long mode

64-bit mode

64-bitový

64

64

Compatibility mode

32

32

Legacy mode

Protected mode

32-bitový

32

32

Virtual 8086 mode

32-bitový

20

16/32

Real mode

16-bitový (štartovací režim pre 16-, 32- a 64-bitový OS)

20

16

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

Technológia SIMD | Cvičenie
Vydala Žilinská univerzita v Žiline, 2000. ISBN 80-7100-723-4.
Otázky a pripomienky môžete poslať autorke.
Naposledy upravené 9.9.2011.