- -+---- - -- +
| Chráněný režim (Protected Mode) |
+ ---- ----+- -
> Díl I. <
Tak vás tu vítám. Tenhle miniseriál by se měl zabývat alespoň základním
vysvětlením pojmů jako chráněný režim procesoru, DPMI, VCPI, A20 apod... Je
určen spíš začátečníkům a mírně pokročilým v této oblasti, ostřílení braši
v něm těžko najdou něco nového. Praktické informace budou pojaty z hlediska
programování v Assembleru, teoretické informace jsou však na programovacím ja-
zyku nezávislé. To by bylo k úvodu.
. . .
Kdokoliv, kdo zkoušel programovat paměťově náročnější věc (např. grafické
viewery, editory nebo přehrávače různých hudebních modulů), došel časem k ná-
zoru, že konvenční paměť nedostačuje. I pustil se tedy do zkoumání literatury
k EMS a XMS. Udělal si jednoduché nebo složitější rutinky pro práci s pamětí
nad 1 MB a byl skoro spokojen. Problém byl v tom, že v paměti musel být vždy
nějaký ovladač, který tu či onu paměť zpřístupňuje. Když nebyl - program ne-
mohl fungovat. A případně ještě neustálé testování, která z pamětí je vlastně
přístupná a využitelná. I tak se náš zkroušený programátor pustil do hledání
něčeho výhodnějšího. A doslechl se někde o chráněném režimu procesoru...
. . .
Na čem to běží? Chráněný režim je vlastní procesorům 286 a výše, plně
využitelný je však až od procesoru 386 (to je jeden z důvodů, proč nyní
spousta programů vyžaduje alespoň onu 386ku). Tento fakt je dán rozdílnou
architekturou obou procesorů. Teprve procesor 386 je totiž 32-bitový a obsahu-
je některé další důležité prvky, které zlepšují komfort při práci s chráněným
režimem (o některých důvodech se zmíním jindy). [Z tohoto důvodu se i já budu
zabývat chráněným režimem pro 386ky a výše. Některé příklady však poběží i na
286kách - na to upozorním.]
Další omezení se týká levnější varianty procesoru 386 a to 386SX, který
má vnější 16bitovou datovou sběrnici a 24bitovou adresovou sběrnici - adresová
sběrnice šíře 24 bitů dovoluje připojit fyzickou paměť kapacity maximálně 16
MB. Procesory 386DX a výše mají adresovou sběrnici 32bitovou a tudíž mohou
adresovat až 4 GB RAM.
A snad jen aby nevzniklo zbytečné nedorozumění - u nových her, u kterých
recenzenti uváděli, že pracují v protected modu, byla nejmenší možná velikost
paměti 4MB. Od té doby jsem slyšel od různých lidí "zaručené" zprávy, že chrá-
něný režim tuto velikost vyžaduje! NENÍ TO PRAVDA! Pro jeho spuštění stačí i
základní velikost nutná pro spuštění klasického EXE souboru, který vytvoříte
+ několik pár bajtů navíc - ale rozhodně ne 4MB. Tato situace se ovšem týká
čistého kódu v assembleru, neboť jiné překladače (kupříkladu Watcom C++ nebo
Borland Pascal) používají vlastní rutiny pro správu chráněného režimu a jejich
paměťové nároky jsou nejrůznější.
> Příklad <
Pro ty, které nudí teoretická stránka výkladu, jsem připravil nejjedno-
dušší otestování, jestli se procesor už v chráněném režimu nachází - tato si-
tuace může nastat v případě, že používáte nějaký manažer EMS paměti (např.
EMM386 nebo QEMM386).
V těchto příkladech bych rád pokračoval i v příštích dílech - pokud to
bude možné.
.286P ; Tento program vyžaduje alespoň procesor 286 - je nutné
; také nastavit instrukční sadu pro podporu chráněného
; režimu
. . . ; Nějaký předcházející kód...
Smsw AX ; Speciální instrukce chr. režimu pro načtení stavu proce-
; soru
Test AX,1 ; Otestování prvního bitu - je již počítač v chráněném re-
; žimu? (Jestli ano, 1. bit = 1)
Jnz @@V_Chráněném_režimu
. . . ; Další kód...
> Slovník pojmů <
Jelikož ne všechno v textu vysvětluji úplně, zařazuji na závěr textu
slovník použitých pojmů. Přesto však znalost některých předpokládám a nebudu
se jim věnovat.
• Chráněný režim (Protected mode) - speciální režim procesorů 80286 a výše,
dovolující využívat veškerou volnou paměť fyzicky dostupnou, řídit práva
jednotlivých programů při přístupu do paměti, vytvářet tzv. virtuální paměť,
apod. Při jeho používání je možné a nutné použít několika dalších instrukcí
pro podporu chráněného režimu. O tom by měl být tento miniseriál.
P.S.: Pokud by se někomu zdálo, že jsem něco uvedl špatně nebo nedostatečně,
budu rád, když se mi ozve, a já svoji chybu napravím - jsem taky jenom člověk.
Valor
výheň