IA-32

IA-32 (zkratka z Intel Architecture, 32bit) je v informatice označení architektury 32bitových CISC procesorů, které se používají zejména v počítačích PC/AT kompatibilních. Prvním procesorem architektury IA-32 byl Intel 80386 a následovalo mnoho kompatibilních procesorů jiných firem. Předchůdcem architektury IA-32 byla 16bitová architektura (Intel 8086 a Intel 80286) a nástupcem 64bitová architektura x86-64.

Označení 
Firma Intel začala označení IA-32 používat až při přípravě architektury IA-64, dříve se používalo označení i386 (podle Intel 80386). Architekturu IA-32 je možné brát jako podmnožinu předchozí architektury x86, ale rozšíření, která procesor 80386 přinesl (především stránkování paměti, ochrana paměti, privilegovaný režim, 32bitové registry), byla natolik významná, že ji označujeme za další architekturu.

Kompatibilní procesory 
Po úspěchu procesorů architektury x86 a tohoto procesoru se do výroby kompatibilních procesorů pustily i další firmy. V průběhu vývoje AMD koupilo NexGen (procesor AMD K6 navazoval spíše na NexGen Nx586 než na AMD K5) a později i Cyrix, aby rozšířilo svoji řadu x86 procesorů.

S potřebou vyššího výkonu se začaly projevovat nevýhody komplikovanosti této architektury. Protože přejít na jinou architekturu nebyla reálná možnost, byly pozdější procesory stavěny vlastně ze dvou částí: jedné, která překódovávala instrukce i386 do jiné, RISCové architektury, a druhé, která instrukce této RISCové architektury zpracovávala s využitím instrukčního paralelismu, spekulativního vyhodnocování a dalších pokročilých metod.

Registry i386 
Procesor 8086 měl pouze 16bitové registry, tzn. neměl jejich 32bitová rozšíření charakterizovaná předponou E. Tato 32bitová rozšíření se objevila až u procesorů 80386.

Registry procesorů i386 se dají rozdělit mnoha způsoby, zde najdete jedno z nejpoužívanějších.

Univerzální 

Tyto registry jsou 32bitové s možností přístupu buď k celému registru, nebo k jeho spodním 16 bitům, nebo k vyššímu a nižšímu bajtu spodních šestnácti bitů. K horním 16 bitům registru přistupovat nejde.

Například k registru EAX lze přistupovat 32bitově (přístup k celému registru), nebo 16bitově k jeho spodní polovině (tato část se nazývá registr AX). Vyšších 8 bitů registru AX se nazývá registr AH (chová se jako osmibitový registr), jeho nižších 8 bitů se nazývá AL. Obdobně se chovají všechny ostatní univerzální registry (EBX – BX – BH – BL, …).

Univerzální registry může programátor využít jakkoli, zároveň má každý z nich nějakou zvláštní funkci:
 EAX – akumulátor (řada instrukcí ho má jako implicitní operand)
 EBX – bázový registr (tj. dá se využít pro adresaci)
 ECX – čítač (tj. určený pro počítání cyklů)
 EDX – rozšíření akumulátoru

Indexové 

Tyto registry slouží primárně pro adresaci v paměti. Jsou 32bitové, lze však samostatně přistupovat k jejich spodním 16 bitům (ty tvoří 16bitové registry). Např. spodních 16 bitů registru ESI se nazývá registr SI.
 ESI – source index – index pro zdroj (tj. pro čtení)
 EDI – destination index – index pro cíl (tj. pro zápis)
 EBP – určen jako ukazatel na záznam aktivní procedury na zásobníku (tím, že se implicitně spojoval s SS)
 ESP – ukazatel vrcholu zásobníku
 EIP – ukazatel kódu následující instrukce. Nelze k němu přímo přistupovat (jen pomocí instrukcí skoků)

Segmentové 

Slouží k ukládání adresy segmentu – pomocí nich se adresuje paměť. Jejich viditelná (přístupná) část je pouze 16bitová.
 CS – segment kódu
 DS – datový segment
 ES – extra segment
 SS – zásobníkový (stack) segment
 FS a GS – přibyly u novějších procesorů (od 80386 ???). Nemají zvláštní název (písmena byla vybrána podle abecedy pro doplnění řady CS, DS, ES, FS, GS)

EFLAGS 

Registr příznaků, je 32bitový, jeho spodních 16 bitů se nazývá FLAGS. Ukládají se do něj informace o stavu procesoru, úspěšnosti provedených instrukcí, atd.; není interpretován jako jedno číslo, ale jeho jednotlivé bity mají smysl příznaků:
 OF – Overflow Flag. Příznak přetečení. Nastaví se na 1, je-li výsledek aritmetické operace větší než cílová hodnota.
 DF – Direction Flag. Řídí směr zpracovávání řetězových operací. Při hodnotě 1 se řetězce zpracovávají odpředu.
 IF – Interrupt Flag. Je-li 1 je povoleno přerušení, jinak je přerušení zakázáno.
 TF – Trap Flag. Využívá se při krokování.
 SF – Sign Flag. Je to samé jako nejvyšší bit výsledku. Pro záporná čísla platí SF=1.
 ZF – Zero Flag. Je-li výsledek operace 0, ZF=1.
 AF – Auxiliary Carry Flag. Pomocný příznak přenosu.
 PF – Parity Flag. Příznak parity. Hodnota tohoto příznaku je 1, pokud dolních 8 bitů právě provedené operace obsahuje sudý počet „1“.
 CF – Carry flag. Příznak přenosu. Slouží pro přenos mezi čísly o více slovech.

Pojmenování 
Nejprve byly procesory pojmenovávány prostě svými čísly v produkční řadě. Taková jména ovšem není možné chránit copyrightem, proto se Intel rozhodl pro překlad do řečtiny a pojmenoval další procesor Pentium.

Omezení adresního prostoru 
Procesory architektury IA-32 mají adresní registr délky 32 bitů, takže mohou najednou adresovat až 4 GiB paměti RAM. Velmi brzo se ukázalo, že adresní prostor je silně omezen, a proto firma Intel v roce 1995 v procesoru Pentium Pro uvedla rozšíření PAE (Physical Address Extension), které umožňuje adresovat až 64 GiB RAM s tím, že z důvodu zpětné kompatibility je adresní registr stále 32bitový, avšak je možné si vybrat, jaká část paměti je zpřístupněna.

Omezení ve Windows NT 
Jádro ve všech 32bitových systémech řady Windows NT (Windows XP, Windows 7, Windows Server 2008 atd.) používá adresní model 2 + 2 GiB, ve kterém je vrchní polovina paměti vyhrazena pro jádro systému a spodní polovina pro proces. Obě části jsou tak jednoduše rozlišeny nejvyšším bitem v 32bitové adrese. Z toho vyplývá i maximální velikost dostupné paměti RAM v běžícím 32bitovém procesu (tj. 2 GiB).

Pokud je systém Windows NT spuštěn s příznakem /3, je adresa v operační paměti rozlišena dvěma nejvyššími bity, takže adresní prostor je rozdělen modelem 3 + 1 GiB a procesy mohou získat 3 GiB adresního prostoru. To platí jen pokud je ve spustitelném souboru nastaven příznak IMAGE_FILE_LARGE_ADDRESS_AWARE. Tímto příznakem dává spustitelný soubor najevo, že nebude brát adresy nad hranicí 2 GiB jako záporné číslo. Pokud je takový proces spuštěn v systému, kde není při startu uveden příznak /3, nestane se nic a proces bude mít dostupných jen 2 GiB adresního prostoru. Má-li systém při startu uveden příznak /3 a proces postrádá výše zmíněný příznak, jeho adresní prostor je standardních 2 GiB.

Je-li v počítači k dispozici více, než 3 GiB RAM a je při spuštění uveden příznak /PAE, je pomocí speciálních funkcí procesu dostupná i paměť nad aktuální limit (2 nebo 3 GiB). Má-li uživatel v počítači 4 GIB RAM (nebo více), nemusí být paměť mezi 3 a 4 GiB dostupná, protože do tohoto prostoru je mapován adresní prostor zařízení používajících sběrnici PCI (nebo PCI-Express), což využívá například grafická karta (také Síťová karta, řadič, …), která má vlastní RAM (má-li zařízení více paměti, je tato paměť dostupná po částech). Paměť RAM instalovaná v počítači nad hranicí 3 GiB je tak znepřístupněna a její zpřístupnění lze dosáhnout jen pomocí přemapování paměti nad hranicí 3 GiB nad adresu 4 GiB (což musí zajistit čipová sada) a zároveň systém musí využít PAE (viz výše zmíněný přepínač /PAE použitý při startu systému).

Používáte-li tedy 32bitový systém z řady Windows NT a máte-li v počítači osazeno maximálně 3 GiB paměti, není potřeba nijak zasahovat do jeho nastavení. Máte-li paměti více, využijte přepínač /PAE (bez tohoto přepínače sice operační systém PAE využívá, ale jen pro podporu NX bitu). Do souboru C:\boot.ini (jsou u něj nastaveny atributy skrytý a jen pro čtení – pro úpravu odškrtněte v „Možnosti složky“ → „Zobrazení“ záložku „Skrýt chráněné soubory operačního systému…“ a vypněte u souboru atribut „Jen pro čtení“) smažte přepínač „/3“, pokud jej boot.ini obsahuje (většinou jen u OS Server Edition). Přidejte za „multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional" /noexecute=optin /fastdetect“ přepínač „/PAE“. Po restartu byste měli vidět 4 GiB RAM (tj. 4,1955xx GB RAM). Pokud se v systému stále zobrazuje pouze 3,xx GiB RAM zapněte v setupu BIOSu funkci Mapování paměti nad 3 GiB (na základních deskách Asus se tato funkce nazývá „Memory Remap“).

Při použití 64bitového systému Windows NT není potřeba přepínač /3 ani /PAE používat a 32bitovému procesu bude zpřístupněna paměť 2 GiB nebo 3 GiB podle výše zmíněného příznaku IMAGE_FILE_LARGE_ADDRESS_AWARE ve spustitelném souboru. Procesy přeložené pro 64bitovou platformu získají tímto příznakem rozlehlý adresní prostor (7 TiB nebo 8 TiB podle příslušné platformy), tj. překládáte-li program jako 64bitový, má automaticky nastaven příznak IMAGE_FILE_LARGE_ADDRESS_AWARE.

Výrobci 
 Intel
 AMD
 Cyrix
 NexGen
 IBM
 Texas Instruments

Předchozí architektura 
 x86

Procesory této architektury 
 Intel
Intel 80386
 Intel 80486
 Intel Pentium
 Intel Pentium Pro
 Intel Pentium II
 Intel Pentium III
 Intel Pentium IV
Intel Atom
 AMD
 Am386
 Am486
 AMD K5
 AMD K6
 AMD Duron
 AMD Athlon
 NexGen
 NexGen Nx586
 Cyrix
 Cyrix M-II
 Cyrix M-III
 Cyrix Media GX

Navazující architektury 
 Kompatibilní
 x86-64
 Nekompatibilní
 IA-64

Reference 

Architektura procesoru
Instrukční sady