Obsah
1. Čtyřicet let existence architektury 386
2. Vznik konceptu mikroprocesoru
3. První generace mikroprocesorů firmy Intel: od čipu 4004 k 8080 (BOBO)
4. Mikroprocesory Intel 8086 a Intel 8088 – vznik nové platformy
5. Stručný popis programátorského modelu mikroprocesorů Intel 8086
6. Od čipu Intel 8086 k mikroprocesorům 80386
7. Změna v politice výroby Intel 80386
9. Efektivnější vykonávání instrukcí v modernějších generacích mikroprocesorů Intel
10. Rozšíření bitové šířky registrů mikroprocesorů Intel 80386
11. Nové segmentové registry u mikroprocesorů Intel 80386
12. Programátorský model mikroprocesoru 80386
13. Nové instrukce pro přenosy a konverze dat dostupné u mikroprocesorů Intel 80386
14. „Bitový procesor“ a instrukce pro nastavení výsledku na základě příznakových bitů
15. Nové možnosti provádění podmíněných a nepodmíněných skoků
17. Virtuální režim 8086 a podpora stránkování
18. Vznik nových operačních systémů využívajících vlastností mikroprocesoru 80386
19. Prodloužení života DOSových aplikací
1. Čtyřicet let existence architektury 386
V říjnu roku 1985, tedy prakticky přesně před čtyřiceti lety, byl oficiálně představen 32bitový mikroprocesor pojmenovaný Intel 80386. Jednalo se o čip, který sice do značné míry navazoval na původní mikroprocesory Intel 8086 (resp. pro úplnost: ve světě osobních mikropočítačů IBM PC se spíše jednalo o čip Intel 8088) i na Intel 80286, ovšem současně nabízel i poměrně velké množství dalších vlastností, které mj. zjednodušovaly provozování sofistikovanějších operačních systémů.
Architektura 386 (oficiálně se označovala IA-32 – Intel Architecture, 32-bit), resp. možná přesněji řečeno módy činnosti, sada registrů a instrukční sada mikroprocesorů Intel 80386, byla po komerční stránce velmi úspěšná a vlastně do jisté míry přetrvala dodnes, protože se stále vydává software, který tuto architekturu podporuje (i když jsou k dispozici mnohem pokročilejší 64bitové architektury, a to jak CISCové, tak i RISCové).
Z pohledu společnosti Intel, která tento mikroprocesor vyvinula a současně i vyráběla (to dnes již není zcela samozřejmá kombinace), se jednalo o velmi dobrý produkt, který navíc na trh přišel ve správný čas – vznik 386ky totiž bylo možné vnímat i jako poměrně důraznou odpověď na počítače postavené okolo konkurenčních mikroprocesorů Motorola 68k (zejména Atari ST, Amiga, Macintosh a Sun-1 – všechny byly vydány ještě před oficiálním představením Intelu 80386). Architektura původních mikroprocesorů 8086/8088 i 80286 (a tím pádem i platformy PC) byla totiž v porovnání s počítači postavenými na Motorole 68k, poměrně zastaralá.
V dnešním článku si připomeneme nejvýznamnější vlastnosti mikroprocesorů řady Intel 80386, které zahájily éru architektury 386.
2. Vznik konceptu mikroprocesoru
V roce 1970 se začal v rámci projektu CADC (Central Air Data Computer) vytvářet systém, který je některými historiky považován za první skutečný mikroprocesor. Jednalo se o procesor nazývaný MP944, jež byl určený pro stíhačky F-14 Tomcat amerického námořnictva. Z důvodu vojenského utajení (probíhala studená válka) se odborná veřejnost dozvěděla technické podrobnosti o tomto procesoru až v roce 1998, tj. skoro třicet let po vytvoření této technologie. Ve skutečnosti se nejednalo o mikroprocesor v pravém slova smyslu, spíše o čipovou sadu, jejíž jednotlivé čipy byly propojena s využitím rychlé sériové linky (což je ovšem nadčasový design).
Aritmeticko-logická jednotka zpracovávala dvacetibitová slova (tato značná bitová šířka byla vyžadována kvůli přesnosti některých senzorů) sériovým způsobem, tj. do jednotky vcházelo nové slovo, které bylo bit po bitu zpracováváno, zatímco na výstupu se postupně vysunoval výsledek předchozí operace. Vzhledem k oddělení ALU od řídicích obvodů se tedy opravdu nejedná o skutečný mikroprocesor, jak ho chápeme dnes (tedy o čip, který integruje ALU s řadičem i s pracovními registry).
Pro vznik a vývoj mikroprocesorů byla nejdůležitější právě sedmdesátá léta minulého století, tedy období, kdy se již poměrně velké množství lidí mohlo seznámit s takzvanými minipočítači (ty se začaly rozšiřovat na university, ale i do běžných podniků). Rychlost vývoje integrovaných obvodů se v tomto období tak prudce zvýšila, že na začátku sedmdesátých let jen několik lidí na světě vůbec dokázalo předvídat strategický význam těchto elektronických součástek.
Na konci sedmdesátých let (tedy za pouhé jedno desetiletí) již byly celé dvě generace mikroprocesorů na ústupu, mikroprocesory si našly cestu do průmyslu i domácností, a začala bitva několika firem o místo na trhu s šestnáctibitovými a třicetidvoubitovými mikroprocesory.
Na stránkách Roota jsme si již některé milníky ve vývoji mikroprocesorů popsali, včetně dnes již legendárních čipů MOS 6502, Zilog Z80 a Motorola 6809. Zajímavé je, že například mikroprocesory řady MOS 6502 se (i když v modifikované podobě) stále před několika lety vyráběly, v mnoha modemech jsme se mohli setkat s rozšířenou variantou mikroprocesoru Zilog Z80 atd. To zajisté svědčí o nadčasovém designu a kvalitě jejich tvůrců (v těchto případech se konkrétně jedná o Federica Faggina a Chucka Peddleho).
Ovšem jen jedna řada čipů přežila – i když ve značně modifikované podobě – i v mainstreamových počítačích. Jedná se právě o řadu Intel 8086, která je dnes neodmyslitelně spjata právě s vývojem platformy PC. Do této řady patří i Intel 386.
Obrázek 4: Detailní pohled na iniciály Federica Faggina na masce i4004.
3. První generace mikroprocesorů firmy Intel: od čipu 4004 k 8080 (BOBO)
Za první skutečný mikroprocesor na světě je všeobecně považován čip nazvaný Intel 4004, jehož duchovním tvůrcem je známý Federico Faggin. Společnost Intel měla v roce 1970, kdy začal vývoj 4004, pouhých 150 zaměstnanců a soustředila se převážně na výrobu polovodičových pamětí – velmi úspěšná byla například paměť 1103 s kapacitou 1024 bitů a s pouhými třemi tranzistory na jednu buňku.
Samotný nadřízený Faggina, kterým nebyl nikdo jiný než Andy Groove, v mikroprocesorech neviděl žádnou velkou budoucnost a prý ani neexistoval dlouhodobější plán pro komerční využití mikroprocesorů. Pouze pro potřeby výrobců kalkulaček (ovšem těch stolních, ne kapesních :-) však Intel začal s vývojem čipu, který byl – na návrh Faggina – pojmenován 4004. Ostatní podpůrné součástky (specializované integrované obvody) taktéž začínaly číslicemi 400. Faggin se jakožto hlavní tvůrce dokonce „podepsal“ do výrobní masky čipu, takže každý mikroprocesor Intel 4004 nese jeho iniciály – viz oba obrázky uvedené v předchozí kapitole i pod tímto odstavcem.
Obrázek 5: Všech pět vrstev mikroprocesoru Intel 4004.
Z dnešního pohledu jsou parametry tohoto mikroprocesoru až směšné. Jednalo se o čtyřbitový mikroprocesor, který však ve své instrukční sadě obsahoval i operace s osmibitovými operandy (číslice byly uloženy v kódu BCD, takže čtyřbitová ALU dávala v tomto kontextu smysl). Celkem bylo programátorovi dostupných 46 instrukcí, jejichž sémantika i syntaxe zápisu byla inspirována (možná i více než pouze inspirována) instrukční sadou Datapoint terminal CPU firmy Computer Terminal Corp. I v dnešních procesorech řady x86 se s velmi podobnou instrukční sadou setkáme, proto je termín „Intelí syntaxe“ poněkud nepřesný, protože jde o syntaxi starší než samotné mikroprocesory. Intel 4004 je tedy skutečný pradědeček dnešní platformy x86, i když s ní není ve striktním slova smyslu kompatibilní.
Ve skutečnosti nebyl mikroprocesor Intel 4004 komerčně moc úspěšný, ale firma Intel se začala tímto odvětvím průmyslu intenzivněji zabývat, což jí vydrželo až do dneška (píše se ovšem rok 2025 a budoucnost je nejistá). V roce 1972, tj. pouhých pět měsíců po uvedení Intel 4004 (to se nám to zrychluje) představila společnost Intel jeho osmibitového nástupce. Jednalo se o mikroprocesor 8008. V jeho instrukční sadě se již mnoho programátorů bez problému vyzná, protože po rozšíření se s ní můžeme setkat i v 8080 a Zilog Z80. Tento čip již při použití stejné desetimikronové technologie obsahoval 3500 tranzistorů, pracoval na frekvenci 800 kHz a mohl adresovat již 16 kB paměti. Samotný výpočetní výkon byl oproti 4004 skoro dvojnásobný, především však byla použita osmibitová sběrnice a řada podpůrných obvodů, se kterými se můžeme setkat i u pozdějších procesorů.
Za dva roky poté, tj. v roce 1974, společnost Intel uvedla další mikroprocesor nazvaný Intel 8080. Ten již pracoval s hodinovou frekvencí 2 MHz, obsahoval cca 4500 tranzistorů a mohl adresovat až 64 kB paměti. Jednou z předností tohoto procesoru bylo použití nové třímikronové technologie výroby. Intel 8080 byl použit v mnoha počítačích (Altair 8800, ale například i tuzemské domácí mikropočítače), i když ke své práci potřeboval kromě standardního pětivoltového napájení ještě jedno vyšší napětí (pro oscilátory) a také dva podpůrné obvody – Intel 8224 a Intel 8228. Jednou ze zajímavostí je, že se tento mikroprocesor vyráběl i v naší Tesle pod označením MHB 8080A (dlužno říci, že to bylo v době, kdy se ve světě přecházelo na šestnáctibitové a třicetidvoubitové mikroprocesory).
Posledním čistě osmibitovým procesorem firmy Intel byl čip Intel 8085 vytvořený v roce 1976. Jednalo se v podstatě o vylepšený Intel 8080, který pracoval na 5 MHz, obsahoval cca 6500 tranzistorů, měl přímo na čipu některé další obvody (sériová linka apod.) a především nepotřeboval nestandardní napětí, takže se jeho zařazení do počítačů a dalších zařízení zjednodušilo. Tento mikroprocesor ovšem přišel až v době, kdy na trhu kralovaly mikroprocesory jiných firem, Zilog a MOS Technologies.
Obrázek 5: První verze školního počítače IQ-151 postaveného na mikroprocesoru 8080. Povšimněte si kulatých tlačítek, které jsou pro tento počítač typické a taktéž klávesy RESET. Ta nebyla od ostatních kláves nijak oddělena, pravděpodobně proto, aby se studenti naučili dávat si pozor, kterou klávesu mačkají :-) (už se asi nikdy nedozvíme, kolik programů bylo „díky“ vhodně umístěné klávese RESET ztraceno). Skříň počítače byla vyrobena z oranžově nalakovaného plechu, jehož milou vlastností byl přenos tepla z chladiče umístěného v zadní části počítače (žebra chladiče jsou částečně vidět i na této fotografii) na celou jeho plochu, což mj. znamenalo, že se televizor nemohl stavět přímo na počítač, ale musely se používat různé dřevěné špalíky a podobné hi-tech řešení.
Programátorský model 8080:
| # | Typ registrů | Počet registrů | Bitová šířka registru | Názvy registrů |
|---|---|---|---|---|
| 1 | Akumulátor | 1 | 8 bitů | A |
| 2 | Univerzální registry | 6 | 8 bitů | B, C, D, E, H, L |
| 3 | Ukazatel zásobníku | 1 | 16 bitů | SP |
| 4 | Příznakový registr | 1 | 5/8 bitů | FLAGS |
| 5 | Programový čítač | 1 | 16 bitů | PC |
Některé registry se pro provedení určitých operací (adresování atd.) spojovaly v šestnáctibitové registrové páry:
| Označení | Pár |
|---|---|
| PSW | A+Flags |
| BC | B+C |
| DE | D+E |
| HL (M) | H+L |
4. Mikroprocesory Intel 8086 a Intel 8088 – vznik nové platformy
Jak jsme si již řekli v úvodní kapitole, byl mikroprocesor Intel 80386 navržen takovým způsobem, aby byl zpětně kompatibilní s mikroprocesory Intel 8086 a Intel 8088, takže se alespoň ve stručnosti o těchto dvou mikroprocesorech zmiňme, protože jsou nedílnou součástí historie IT. Dnes se pochopitelně jedná o historické čipy, které byly na trh uvedeny již v letech 1978 a 1979. O přibližně dva roky později použila společnost IBM mikroprocesor Intel 8088 jako základní prvek osobního mikropočítače IBM PC, z něhož se postupně vyvinula celá platforma PC, jež se dodnes vyvíjí a používá (se všemi výhodami a zápornými vlastnostmi tohoto vývoje).
Obrázek 6: Motherboard IBM PC s mikroprocesorem Intel 8088..
V srpnu roku 1981, tedy před 44 lety, se začal prodávat šestnáctibitový osobní mikropočítač IBM PC. Z dnešního pohledu se sice jednalo o velmi málo výkonný stroj, ovšem v době vzniku IBM PC patřil tento mikropočítač v oblasti osobních mikropočítačů mezi špičku, alespoň co se týká hrubého výpočetního výkonu. Obsahoval šestnáctibitový mikroprocesor Intel 8088 (s vnější sběrnicí zúženou na osm bitů) taktovaný na 4,77 MHz. Kapacita operační paměti se pohybovala od 16 kB do 256 kB (takže se ani zdaleka nedotýkala tehdy teoretické hranice 640 kB, na kterou se narazilo sice později, ale o to tvrději). Pro vykreslování grafiky se používala grafická karta CGA, pro profesionální textové aplikace pak karta MDA s odlišným monitorem. Zvukový výstup obstarával nechvalně známý PC Speaker.
Důležité byly přitom dva fakty – IBM PC vyráběla společnost IBM, která byla pro mnoho korporací známým a dlouhodobým partnerem (a určitě byla vnímána zcela jinak, než například „herně neseriózní“ společnost Atari). A navíc IBM PC byla do určité míry otevřená architektura se standardizovanou sběrnicí umožňující modulární design (což se ukázalo již na možnosti výběru video karty – obě nabízené karty sice byly špatné, ale ne stejně špatné, takže si uživatel mohl vybírat menší zlo).
Obrázek 7: Hra Alley Cat v podání karty CGA.
Osobní mikropočítače IBM PC byly oficiálně postaveny na mikroprocesorové architektuře Intel 8086, díky čemž je tato architektura vlastně stále živá (16bitový reálný režim zde totiž stále existuje resp. donedávna existoval kvůli bootstrapingu). Jednalo se o plně šestnáctibitovou architekturu, která však ideově navazovala na předchozí dvě generace osmibitových mikroprocesorů společnosti Intel, tj. na již výše zmíněnou řadu Intel 8008 a především pak úspěšný Intel 8080, který se na určitou dobu stal průmyslovým standardem.
Nicméně samotné IBM PC (tedy vůbec první počítač z této rodiny) nepoužívalo mikroprocesor Intel 8086, ale jeho „osekanou“ a levnější variantu nazvanou Intel 8088. Ona osmička na konci číselného označení čipu naznačuje, že i když se interně jednalo o šestnáctibitový mikroprocesor, externí datová sběrnice byla pouze osmibitová. Interně byl ovšem Intel 8088 prakticky totožný s Intelem 8086, a to včetně aritmeticko-logické jednotky (ALU) i execution unit (EU). Odlišovala se jen jediná komponenta, a to konkrétně bus interface unit (BIU).
Otázkou zůstává, jak se na mikroprocesor Intel 8088 dívat – jedná se o osmibitový či šestnáctibitový čip? Z pohledu aritmeticko-logické jednotky a interní datové sběrnice jde o šestnáctibitový čip, z pohledu externího pak o čip osmibitový. A programátoři vlastně ani nerozliší mezi plnohodnotným čipem Intel 8086 a jeho „skrouhnutou“ variantou Intel 8088 (až na pomalejší běh programů).
5. Stručný popis programátorského modelu mikroprocesorů Intel 8086
Programátorský model mikroprocesoru Intel 8086 (naprosto stejné je to ovšem i pro Intel 8088) do určité míry vychází z jeho předchůdců, tedy z čipů 8080 a 8085. Došlo ovšem k rozšíření sady pracovních i specializovaných registrů, k určité unifikaci jejich role (což zjednodušilo instrukční sadu – to může znít paradoxně, ale je tomu tak) a k rozšíření pracovních registrů na šířku šestnácti bitů. Navíc se rozšířily i adresovací režimy a při adresování se kromě základní šestnáctibitové adresy počítá i adresa segmentu získaná z takzvaných segmentových registrů CS, DS, ES či SS. Oproti mikroprocesoru Intel 8080 se tedy jedná o poměrně výrazný skok vpřed, ovšem v porovnání s dalšími mikroprocesory této éry patří 8086 spíše mezi jednodušší mikroprocesory (což ovšem nemusí být vždy špatně).
Pracovat je možné s těmito čtrnácti pracovními, adresovými, segmentovými a specializovanými registry:
| # | Typ registrů | Počet registrů | Bitová šířka registru | Názvy registrů |
|---|---|---|---|---|
| 1 | Univerzální registry | 4 | 16 bitů | AX, BX, CX, DX |
| 2 | Indexové registry | 2 | 16 bitů | SI, DI |
| 3 | Bázové registry | 2 | 16 bitů | BP, SP |
| 4 | Segmentové registry | 4 | 16 bitů | CS, DS, ES, SS |
| 5 | Příznakový registr | 1 | 16 bitů | FLAGS |
| 6 | Programový čítač | 1 | 16 bitů | IP |
První čtyři registry jsou sice nazvány univerzální, ovšem jejich role není v praxi zcela zaměnitelná. Každý z těchto registrů má totiž kromě své základní role ještě další roli/role a vystupuje jako implicitní operand u mnoha instrukcí. Instrukční sada není v žádném případě ortogonální, naopak se jedná o snad nejméně ortogonální sadu v oblasti šestnáctibitových čipů, se všemi výhodami, ale i mnoha nevýhodami, které to přinášelo jak programátorům, tak i výrobcům překladačů:
Různé role „univerzálních“ pracovních registrů:
| Registr | Rozdělení | Význam |
|---|---|---|
| AX | AH/AL | akumulátor |
| BX | BH/BL | bázová adresa |
| CX | CH/CL | čítač (counter) |
| DX | DH/DL | data, rozšíření akumulátoru |
Dnešní čipy řady x86 a x86–64 obsahují tisíce instrukcí, ovšem původní čip 8086 podporoval pouze cca 120 instrukcí, které jsou vypsány v následující tabulce:
AAA CMPSB JA JNC LAHF MUL REP SCASB
AAD CMPSW JAE JNE LDS NEG REPE SCASW
AAM CWD JB JNG LEA NOP REPNE SHL
AAS DAA JBE JNGE LES NOT REPNZ SHR
ADC DAS JC JNL LODSB OR REPZ STC
ADD DEC JCXZ JNLE LODSW OUT RET STD
AND DIV JE JNO LOOP POP RETF STI
CALL HLT JG JNP LOOPE POPA ROL STOSB
CBW IDIV JGE JNS LOOPNE POPF ROR STOSW
CLC IMUL JL JNZ LOOPNZ PUSH SAHF SUB
CLD IN JLE JO LOOPZ PUSHA SAL TEST
CLI INC JMP JP MOV PUSHF SAR XCHG
CMC INT JNA JPE MOVSB RCL SBB XLATB
CMP INTO JNAE JPO MOVSW RCR XOR
IRET JNB JS
JNBE JZ
6. Od čipu Intel 8086 k mikroprocesorům 80386
Doba, ve které vznikaly první tři generace mikroprocesorů řady 80×86, se vyznačovala překotným vývojem mj. i právě v oblasti mikroprocesorové techniky. Již jsme se zmínili o konkurenčních čipech Motorola 68000, které byly oproti původní dvojici Intel 8086/8088 sofistikovanější i výkonnější; i proto se ostatně prosadily v prakticky všech ostatních typech osobních mikropočítačů (jedinou výjimkou bylo právě IBM PC).
Ovšem postupně se vyvíjely i mikroprocesory odvozené od původního poměrně primitivního Intelu 8086 (resp. jeho ořezané varianty Intel 8088). Rozšiřovala se instrukční sada o nové instrukce a adresovací režimy, přidávaly se nové pracovní registry, rozšiřovala se bitová šířka pracovních registrů, přidávaly se nové režimy činnosti mikroprocesoru (chráněný režim 286, odlišný chráněný režim 386, virtuální režim 386) atd.
Ovšem současně se kromě těchto kvantitativních změn vylepšovala i interní architektura mikroprocesorů, což například vedlo k urychlení instrukcí. U řady instrukcí jsme tak postupně došli od jejich vykonání v několika desítkách strojových cyklů například na jediný strojový cyklus a poté na možnost dokončit v jednom cyklu více souběžně prováděných instrukcí.
V následující tabulce je shrnut vývoj mikroprocesorů platformy 80×86 od prvních čipů uvedených firmou Intel až po 80386. Povšimněte si postupně rostoucích hodinových frekvencí i zvyšujícího se počtu tranzistorů (za deset let vzrostl počet tranzistorů o celý řád):
| Mikroprocesor | Rok uvedení | Frekvence (MHz) | Tranzistorů | Poznámka |
|---|---|---|---|---|
| 8086 | 1978 | 5, 8, 10 | 29000 | praotec celé rodiny 80×86 |
| 8088 | 1979 | 4,77 a 8 | 29000 | byl použit v původním IBM PC |
| 80186 | 1982 | 6 | 55000 | využíván jako mikrořadič, nikoli jako procesor v počítačích |
| 80188 | 1982 | 6 | 55000 | varianta 80186 s osmibitovou vnější sběrnicí |
| 80286 | 1982 | 6, 8, 12,5, 16, 20, 25 | 134000 | použit v PC AT |
| 80386DX | 1985 | 16, 20, 25, 33 | 275000 | první 32bitový čip z rodiny 80×86 |
| 80386SX | 1988 | 16, 20, 25, 33 | 275000 | varianta 80386DX se šestnáctibitovou datovou sběrnicí |
| 80386SL | 1990 | 20, 25 | 855000 | obsahuje i cache a řadiče sběrnice a paměti |

Obrázek 7: Výkon 80386 umožnil vznik nových her, které plně využívaly hrubé výpočetní síly tohoto čipu. Platforma PC se kvůli absenci zákaznických čipů musela na tuto hrubou výpočetní sílu spoléhat, na rozdíl od konkurence (Atari ST a mnohem více Amiga).
7. Změna v politice výroby Intel 80386
Vraťme se ještě k seznamu výrobců, které jsme uvedli v předchozí kapitole. V dobách čipů 8086 a 80286 bylo zvykem, že společnost Intel prodávala licence na výrobu mikroprocesorů i dalším firmám (tím se mj. i zaplatil vývoj). To bylo výhodné pro všechny strany a zejména zákazníci měli jistotu, že i kdyby primární dodavatel (Intel) neměl dostatečnou výrobní kapacitu, mohli by ho nahradit další dodavatelé (což byl mj. i požadavek společnosti IBM pro to, aby původní IBM PC postavili na platformě Intelu). Tento systém po relativně dlouhou dobu fungoval ke všeobecné spokojenosti a jednou z firem, které takto s Intelem spolupracovaly, byla i společnost AMD (ostatně tato spolupráce se datuje až k osmibitovým čipům 8085).
Tento status quo se ovšem změnil v roce 1984, protože tehdy firma IBM (mj. výrobce čipů 80286) představila osobní mikropočítač IBM PC model 5170, který je známý pod označením PC AT. Tento počítač byl postaven na mikroprocesoru 80286. Firma IBM se tehdy plně soustředila na PC AT a tím pádem i na 80286 a neměla velký zájem na (spolu)výrobě tehdy vlastně ještě oficiálně nedokončených čipů 80386.
Společnost Intel tento stav viděla jako příležitost změnit celý koncept licencování čipů 80×86. Byla tedy připravena (a podepsána) smlouva, že se IBM bude soustředit na výrobu 80286 (a Intel bude pouze doplňovat případné výpadky ve výrobě), zatímco Intel si ponechá plná práva na 80386. A kvůli tomu se vlastně ani firma AMD nechtěla ve výrobě 80386 angažovat (bez podpory IBM to vypadalo jako mrtvá větev vývoje). I s AMD tedy byla nakonec podepsána nová smlouva, která vedla k tomu, že Intel zůstal jedinou firmou, která mohla (minimálně oficiálně) 80386 vyrábět a prodávat – ostatní výrobci k tomu neměli potřebnou licenci.
Obrázek 8: Další screenshot ze slavné hry Doom, která využívala hrubou výpočetní sílu mikroprocesorů Intel 80386 a později i Am386, které byly ještě rychlejší.
8. Války klonů
A big milestone [in the history of the personal computer industry] was that the folks at IBM didn't trust the 386. They didn't think it would get done. So we encouraged Compaq to go ahead and just do a 386 machine. That was the first time people started to get a sense that it wasn't just IBM setting the standards, that this industry had a life of its own, and that companies like Compaq and Intel were in there doing new things that people should pay attention to.“
Bill Gates
Jednou z nejdůležitějších vlastností platformy IBM PC je její modulární uspořádání a taktéž fakt, že v ní nejsou použity žádné zákaznické obvody. To vlastně znamená, že bylo možné navrhnout klon IBM PC, a to bez nutnosti napodobovat původní zákaznické čipy atd. – naprostá většina součástek byla „komoditní“ – tedy až do chvíle, kde 80386 vyráběla jen jediná firma (stačilo „jen“ z licenčního pohledu čistě vytvořit BIOS).
Nicméně nastala zajímavá situace – kromě běžných klonů IBM PC byl v roce 1986 (pouhý rok po uvedení 80386 do výroby) zahájen prodej osobního počítače Compaq Deskpro 386. Jednalo se o (ve své době) absolutně nejvýkonnější PC, ovšem hlavní bylo, že se ukázalo, že budoucnost PC již není v rukách IBM, ale jiných firem.
Čip Intel 80386 se nakonec stal úspěšným mikroprocesorem a současně firma AMD neměla licenci na jejich výrobu, což AMD stavělo do dosti nevýhodné pozice. Inženýři z firmy AMD tedy navrhli svůj vlastní čip Am386 plně kompatibilní s původním čipem 80386 (což není nic jednoduchého – bavíme se o integrovaných obvodech se čtvrt milionem tranzistorů). To mohlo být chápáno jako porušení obchodních práv jediného výrobce původních 80386.
Jak se dalo čekat, následovala obžaloba a soud, ovšem AMD nakonec kauzu vyhrála. Tím došlo ke druhému významnému posunu ve světě PC (Wintelu), protože se AMD mohla zcela legálně stát konkurentem firmy Intel (možná jsem naivní, ale mám pocit, že to nakonec pomohlo i společnosti Intel ve výrobě mikroprocesorů dalších generací – konkurence jí neumožnila usnout na vavřínech, minimálně dalších dvacet let, takže nakonec platforma x86 převálcovala ostatní architektury).
9. Efektivnější vykonávání instrukcí v modernějších generacích mikroprocesorů Intel
Po krátké odbočce se vraťme zpět k technologii mikroprocesorů Intel 80386.
Postupně rostoucí počet tranzistorů (viz tabulku uvedenou v šesté kapitole) sám o sobě ovšem nic nevypovídá o skutečné rychlosti mikroprocesoru, protože do značné míry záleží na tom, jakým způsobem jsou tyto tranzistory využity. Postupně rostoucí kvalita implementace instrukcí (například přidáním nové specializované sčítačky pro výpočty adres, přidání fronty instrukcí, možnost takzvaného prefetchingu instrukcí, implementace RISCové pipeline atd.) vedla k tomu, že se postupně snižoval počet cyklů nutných pro dokončení jednotlivých strojových instrukcí.
To tedy znamená, že i když mohl být jak mikroprocesor Intel 8086, tak i Intel 80286 provozován na stejné frekvenci 8MHz, bude 80286 ve skutečnosti rychlejší. Ukažme si to například na základní instrukci součtu dvou osmibitových nebo šestnáctibitových hodnot – ADD. Délka výpočtů se odlišuje podle typů operandů a taktéž podle typu mikroprocesoru (čím menší číslo je v tabulce uvedeno, tím lépe):
| Operandy | 8086/88 | 186 | 286 | 386 | 486 | Pentium |
|---|---|---|---|---|---|---|
| reg, reg | 3 | 3 | 2 | 2 | 1 | 1 |
| mem, reg | 24+EA | 10 | 7 | 7 | 3 | 3 |
| reg, mem | 13+EA | 10 | 7 | 6 | 2 | 2 |
| reg, imm | 4 | 4 | 3 | 2 | 1 | 1 |
| mem, imm | 23+EA | 16 | 7 | 7 | 3 | 3 |
| acc, imm | 4 | 4 | 3 | 2 | 1 | 1 |
Přičemž u čipů 8086/8088 se přidává několik cyklů pro EA neboli pro výpočet efektivní adresy (effective address):
| Adresování | Počet cyklů EA |
|---|---|
| reg+offset | 5 |
| přímá adresa | 6 |
| BP+DI nebo BX+SI | 7 |
| BX+DI nebo BP+SI | 8 |
| BP+DI+disp nebo BX+SI+disp | 11 |
| BX+DI+disp nebo BP+SI+disp | 12 |
Navíc, pokud se mění (explicitně specifikuje) segmentový registr, je nutné přičíst další dva hodinové cykly.
10. Rozšíření bitové šířky registrů mikroprocesorů Intel 80386
Bylo by ovšem chybou chápat mikroprocesor Intel 80386 pouze jako rychlejší variantu 80286. Tyto čipy sice byly kompatibilní, ovšem 80386 nabízel mnohé další režimy (virtuální a chráněný 386), více registrů, větší paměťový rozsah, rozšiřující instrukce v instrukční sadě atd. Jednalo se o velký skok od šestnáctibitové platformy určené pro běh jednoúlohových operačních systémů k 32bitové platformě nativně podporující víceúlohové systémy s rozsáhlou virtuální pamětí.
Mikroprocesory 80386 a 80486 jsou nazývány 32bitovými čipy mj. i z toho důvodu, že se u nich rozšířila aritmeticko-logická jednotka takovým způsobem, aby bylo možné plnohodnotně pracovat s 32bitovými operandy. A tomu se musela přizpůsobit i sada pracovních registrů. Společnost Intel se rozhodla, že namísto „párování“ dvou šestnáctibitových registrů do registrů 32bitových rozšíří původní registry ze šestnácti bitů na plných 32 bitů.
Týká se to všech čtyř pracovních registrů AX, BX, CX, DX, indexových registrů SI, DI, bázových registrů SP, BP i ukazatele na instrukci IP. Tyto registry byly rozšířeny o horních šestnáct bitů, přičemž stále bylo možné adresovat (vybírat) spodních šestnáct bitů původními jmény registrů a/nebo (pouze u pracovních registrů) použít jejich horních a spodních osm bitů zvlášť (AX=AH+AL atd.). V assembleru se 32bitové registry poznají podle toho, že začínají písmenem E a jejich jména jsou tříznaková:
| 32bitový registr | Spodních 16 bitů | Rozdělení horní/dolní bajt | Funkce registru |
|---|---|---|---|
| EAX | AX | AH/AL | akumulátor |
| EBX | BX | BH/BL | bázový registr |
| ECX | CX | CH/CL | čítač |
| EDX | DX | DH/DL | datový registr |
| ESP | SP | ukazatel na vrchol zásobníku | |
| EBP | BP | báze zásobníkového rámce | |
| ESI | SI | indexový registr pro zdroj dat | |
| EDI | DI | indexový registr pro cíl dat | |
| EIP | IP | ukazatel na prováděnou instrukci |
11. Nové segmentové registry u mikroprocesorů Intel 80386
Mikroprocesory 80386 mají k dispozici taktéž dva nové segmentové registry pojmenované jednoduše FS a GS (jednoduše proto, že jejich jména abecedně navazují na CS, DS a ES). Tyto segmentové registry je možné použít pro adresování libovolného segmentu operační paměti a nemají žádný další speciální význam, na rozdíl od původní čtveřice segmentových registrů CS (kódový segment), DS (datový segment), SS (segment se zásobníkem) a ES (použit u řetězcových a blokových operací). Ovšem pochopitelně u složitějších aplikací mohou být další dva segmentové registry užitečné a mohou je využívat i překladače vyšších programovacích jazyků. S těmito novými registry se z pohledu programátora pracuje stejně, jako s původní čtveřicí.
12. Programátorský model mikroprocesoru 80386
Nyní již máme k dispozici všechny informace pro uvedení programátorského modelu mikroprocesoru Intel 80386, který vypadá následovně:
| # | Typ registrů | Počet registrů | Bitová šířka registru | Názvy registrů |
|---|---|---|---|---|
| 1 | Univerzální registry | 4 | 32 bitů | EAX, EBX, ECX, EDX |
| 2 | Indexové registry | 2 | 32 bitů | ESI, EDI |
| 3 | Bázové registry | 2 | 32 bitů | EBP, ESP |
| 4 | Segmentové registry | 6 | 16 bitů | CS, DS, ES, FS, GS, SS |
| 5 | Příznakový registr | 1 | 32 bitů | EFLAGS |
| 6 | Programový čítač | 1 | 32 bitů | EIP |
Porovnejte s původním „šestnáctibitovým“ programátorským modelem, který je odlišný, ale z logického pohledu vlastně stále prakticky totožný:
| # | Typ registrů | Počet registrů | Bitová šířka registru | Názvy registrů |
|---|---|---|---|---|
| 1 | Univerzální registry | 4 | 16 bitů | AX, BX, CX, DX |
| 2 | Indexové registry | 2 | 16 bitů | SI, DI |
| 3 | Bázové registry | 2 | 16 bitů | BP, SP |
| 4 | Segmentové registry | 4 | 16 bitů | CS, DS, ES, SS |
| 5 | Příznakový registr | 1 | 16 bitů | FLAGS |
| 6 | Programový čítač | 1 | 16 bitů | IP |
13. Nové instrukce pro přenosy a konverze dat dostupné u mikroprocesorů Intel 80386
Mikroprocesory patřící do třetí generace čipů 80×86 (80386 a kvůli zpětné kompatibilitě i všechny navazující čipy) mají rozšířenou sadu instrukcí. Mezi první rozšíření patří instrukce určené pro konverze dat. Vypišme si všechny instrukce, které do této skupiny patří, tj. včetně instrukcí, které byly zavedeny již pro Intel 8086/8088. To, zda se jedná o nové instrukce či nikoli, je patrné z obsahu druhého sloupce:
| Instrukce | Kompatibilita | Stručný popis instrukce |
|---|---|---|
| CBW | 8086 | znaménkové rozšíření AL→AX |
| CWD | 8086 | znaménkové rozšíření AX→DX:AX |
| CWDE | 80386 | znaménkové rozšíření AX→EAX |
| CDQ | 80386 | znaménkové rozšíření EAX→EDX:EAX |
Tyto instrukce původní osmibitovou, 16bitovou či 32bitovou hodnotu rozšíří na dvojnásobnou bitovou šířku, přičemž berou v úvahu znaménko (nejedná se tedy o pouhé vynulování horních bitů registru či dvojice registrů). V rámci čipů 80386 byly přidány instrukce CWDE a CDQ. Zajímavé je, že tyto instrukce trvají dva cykly, zatímco instrukce původní (jednodušší) trvají cykly tři.
Instrukce uvedené v předchozí tabulce pracují pouze s akumulátorem popř. s dvojicí registrů D:A (DX:AX nebo EDX:EAX). Čipy 80386 jsou ale doplněny i obecnějšími instrukcemi určenými pro rozšíření hodnoty při přenosu dat z/do jiných registrů nebo z operační paměti. Jedná se tedy o variantu obecné přenosové instrukce MOV nazvanou MOVZX, ovšem s tím, že se horních osm bitů resp. šestnáct bitů vynuluje:
| Instrukce | Operandy | Stručný popis instrukce |
|---|---|---|
| MOVZX | reg16, reg8 | přenos z osmibitového registru do registru 16bitového s vynulováním horních osmi bitů |
| MOVZX | reg32, reg16 | přenos z 16bitového registru do registru 32bitového s vynulováním horních šestnácti bitů |
| MOVZX | reg16, mem | přenos osmi bitů z operační paměti s vynulováním horních osmi bitů |
| MOVZX | reg32, mem | přenos šestnácti bitů z operační paměti s vynulováním horních šestnácti bitů |
K dispozici je i instrukce nazvaná MOVSX umožňující přenosy dat se znaménkovým rozšířením. Pro kladné hodnoty (nejvyšší bit je nulový) je tato instrukce totožná s výše uvedenou MOVZX, pro hodnoty záporné (nejvyšší bit nastaven na jedničku) se pak vyšší polovina cílového registru taktéž nastaví na jedničku:
| Instrukce | Operandy | Stručný popis instrukce |
|---|---|---|
| MOVSX | reg16, reg8 | přenos z osmibitového registru do registru 16bitového se znaménkovým rozšířením do horních osmi bitů |
| MOVSX | reg32, reg16 | přenos z 16bitového registru do registru 32bitového se znaménkovým rozšířením do horních šestnácti bitů |
| MOVSX | reg16, mem | přenos osmi bitů z operační paměti se znaménkovým rozšířením do horních osmi bitů |
| MOVSX | reg32, mem | přenos šestnácti bitů z operační paměti se znaménkovým rozšířením do horních šestnácti bitů |
14. „Bitový procesor“ a instrukce pro nastavení výsledku na základě příznakových bitů
Mikroprocesory 80386 měly nově k dispozici i specializované instrukce sloužící pro provádění různých bitových operací. Jedná se velmi užitečné nízkoúrovňové operace a podobné instrukce nalezneme například v mnoha mikrořadičích:
| Instrukce | Operandy | Stručný popis instrukce |
|---|---|---|
| BT | src, n | n-tý bit se zkopíruje do příznaku Carry |
| BTC | src, n | negace n-tého bitu se zkopíruje do příznaku Carry |
| BTR | src, n | jako instrukce BT, ale bit se poté vynuluje |
| BTS | src, n | jako instrukce BT, ale bit se poté nastaví na 1 |
| BSF | dest, src | hledá první nenulový bit od bitu nejnižšího |
| BSR | dest, src | hledá první nenulový bit od bitu nejvyššího |
Další sada nových instrukcí přidaných v rámci 80386 slouží pro nastavení hodnoty 0 nebo 1 do zvoleného osmibitového registru nebo do adresy v operační paměti. To, jaká hodnota se zapíše, záleží na vyhodnocení podmínky, přičemž samotné podmínky jsou naprosto stejné, jako u podmíněných skoků. Nastavením 0/1 se vlastně instrukční sada mikroprocesorů řady 80386 přibližuje požadavkům vyšších programovacích jazyků, zejména pak klasického céčka – a překladače tyto instrukce skutečně využívají. V následující tabulce jsou uvedeny všechny jmenné aliasy instrukcí (mnohé instrukce tedy mají stejný význam, pouze odlišné jméno):
| Instrukce | Operandy | Stručný popis instrukce |
|---|---|---|
| SETO | Set to 1 if Overflow | OF = 1 |
| SETNO | Set to 1 if Not Overflow | OF = 0 |
| SETS | Set to 1 if Sign | SF = 1 |
| SETNS | Set to 1 if Not Sign | SF = 0 |
| SETE | Set to 1 if Equal | ZF = 1 |
| SETZ | Set to 1 if Zero | ZF = 1 |
| SETNE | Set to 1 if Not Equal | ZF = 0 |
| SETNZ | Set to 1 if Not Zero | ZF = 0 |
| SETB | Set to 1 if Below | CF = 1 |
| SETNAE | Set to 1 if Not Above or Equal | CF = 1 |
| SETC | Set to 1 if Carry | CF = 1 |
| SETNB | Set to 1 if Not Below | CF = 0 |
| SETAE | Set to 1 if Above or Equal | CF = 0 |
| SETNC | Set to 1 if Not Carry | CF = 0 |
| SETBE | Set to 1 if Below or Equal | CF = 1 | ZF = 1 |
| SETNA | Set to 1 if Not Above | CF = 1 | ZF = 1 |
| SETA | Set to 1 if Above | CF = 0 & ZF = 0 |
| SETNBE | Set to 1 if Not Below or Equal | CF = 0 & ZF = 0 |
| SETL | Set to 1 if Less | SF <> OF |
| SETNGE | Set to 1 if Not Greater or Equal | SF <> OF |
| SETGE | Set to 1 if Greater or Equal | SF = OF |
| SETNL | Set to 1 if Not Less | SF = OF |
| SETLE | Set to 1 if Less or Equal | ZF = 1 | SF <> OF |
| SETNG | Set to 1 if Not Greater | ZF = 1 | SF <> OF |
| SETG | Set to 1 if Greater | ZF = 0 & SF = OF |
| SETNLE | Set to 1 if Not Less or Equal | ZF = 0 & SF = OF |
| SETP | Set to 1 if Parity | PF = 1 |
| SETPE | Set to 1 if Parity Even | PF = 1 |
| SETNP | Set to 1 if Not Parity | PF = 0 |
| SETPO | Set to 1 if Parity Odd | PF = 0 |
15. Nové možnosti provádění podmíněných a nepodmíněných skoků
V instrukčním souboru mikroprocesorů řady Intel 80386 došlo i k rozšíření instrukcí pro nepodmíněné a podmíněné skoky. Z hlediska relativně malých programů (tedy i programů typu COM v době kralování DOSu) je důležité především rozšíření původně pouze lokálních (krátkých) skoků na takzvané „blízké“ (near) skoky, což se týká především podmíněných skoků. Připomeňme si, že původně byly cílové adresy těchto skoků omezeny na relativní rozsah –128 až 127 od aktuální hodnoty registru IP. To vyhovuje spíše pro malé subrutiny, ovšem zejména při překladu programů z vyšších programovacích jazyků do strojového kódu může být tento rozsah nedostatečný. Blízké skoky tento problém řeší, protože skok je možné provést na libovolnou adresu v aktuálně nastaveném kódovém segmentu (CS). Proto se někdy tyto skoky nazývají intrasegment jump. A konečně je nově možné provést i dlouhé skoky (far jump) mimo aktuální segment. Tyto skoky se z tohoto důvodu nazývají intersegment jump.
U mikroprocesorů řady 80386 (a vyšších) lze použít i takzvané blízké skoky neboli near jumps, které umožňují provedení skoku na libovolné místo v kódovém segmentu. Adresa takového skoku je pochopitelně šestnáctibitová a díky tomu, že platí v rámci segmentu, není nutné provádět žádné testy, zda skok náhodou neporušuje izolaci programu (což se týká chráněného režimu). Blízké skoky dokáže assembler generovat automaticky ve chvíli, kdy je cíl skoku vzdálenější než relativní offset –128 až 127. Ovšem blízký skok si můžeme i vynutit modifikátorem near. Ve vyšších programovacích jazycích si může překladač zvolit jak krátký, tak i dlouhý skok.
Provádět je možné i takzvané dlouhé skoky, tj. skoky, při nichž se mění jak hodnota registru EIP (ano i tento registr je nyní 32bitový), tak i hodnota CS (kódový segment). Adresa cíle skoku nyní musí obsahovat plný ukazatel (tj. segment+16bitový offset nebo dokonce segment+32bitový offset) a může být zadána buď skutečně jako absolutní adresa, nebo jako adresa na ukazatel obsahující vlastní adresu cíle skoku. V prvním případě je pochopitelně adresa součástí instrukčního slova (4 bajty nebo šest bajtů), ve druhém případě se jedná o čtyřbajtovou nebo šestibajtovou adresu ukazatele.
16. Chráněný režim 80386
Již předchůdce 80386, konkrétně mikroprocesor 80286, podporoval přepnutí mikroprocesoru do takzvaného chráněného režimu (protected mode), v němž se dosti podstatným způsobem změnily možnosti adresace paměti, ovšem současně se zpřístupnil celý fyzicky dostupný paměťový rozsah – teoreticky tedy až 16MB RAM. To však není vše, protože jednotlivé části operační paměti mohly být různým způsobem chráněny – proti přepisu, proti možnosti spuštění kódu v této oblasti (skok do ní) atd. Navíc mohl být omezen (řízen) přístup k I/O portům a tím pádem i přístup k hardware (časovače, zvukové karty, klávesnice atd.)
Chráněný režim byl navržen takovým způsobem, aby umožnil vznik operačních systémů s multitaskingem a ochrannými prvky mezi jednotlivými aplikacemi resp. mezi aplikací a operačním systémem. Problém byl jediný – DOSovské aplikace obecně tuto ochranu porušovaly (a musely porušovat): přistupovaly přímo k HW, zapisovaly do kódových segmentů, spouštěly kód z nekódových segmentů, používaly segmenty, které se překrývaly a dokonce si takové aplikace dovolovaly volat služby DOSu a BIOSu (oba tyto systémy jsou totiž psány pro reálný režim). Chráněný režim tedy bylo možné používat (a mnohé aplikace ho i používaly), ale potřebovaly se buď přepínat zpět do reálného režimu (na 286 složité a zdlouhavé) nebo využívaly takzvaných extenderů, které se snažily zpřístupnit služby DOSu i z chráněného režimu (mnohdy taktéž přepnutím do reálného režimu).
Mikroprocesory 80386 možnosti chráněného režimu dále rozšířily. Zejména se zvětšil počet bitů pro bázovou adresu segmentu, a to na plných 32 bitů (rozsah 4GB oproti původním 16MB). A taktéž se zvětšil počet bitů pro limit, a to z původních 16 bitů (maximální limit 0×ffff) na 20 bitů, ovšem s tím, že se namísto bajtů může limit nastavit i v celých stránkách (to se přepíná dalším bitem). To umožnilo jak vznik velkých aplikací (nemusely řešit problém malých segmentů), tak i aplikací, které potřebovaly (na svou dobu) obrovské bloky paměti pro uložení dat.
Dalším vylepšením je možnost přechodu z chráněného režimu do režimu reálného, což na čipu 80286 vyžadovalo použití HW obvodu (PC) nebo později triku nazvaného Triple Fault.
17. Virtuální režim 8086 a podpora stránkování
Zásadní vlastností mikroprocesorů Intel 80386 byla jejich podpora takzvaného virtuálního režimu (virtual mode), který je známý i pod zkratkami V86 resp. VM86. Pokud je nějaký proces spuštěn v tomto režimu, má k dispozici zdánlivý (virtuální) mikroprocesor s vlastním blokem operační paměti, s možností pracovat s I/O zařízeními, přistupovat ke „své“ video RAM atd. Ovšem ve skutečnosti jsou tyto prostředky poskytovány operačním systémem, který může v jeden okamžik spustit více takových úloh, současně provozovat úlohy běžící v chráněném režimu atd. Virtuální režim 86 používal po velmi dlouhou dobu (ve Windows pro spouštění DOSových aplikací, podobně pracuje i DOSEMU pro Linux). Navíc se s příchodem Pentia možnosti virtuálního režimu rozšířily (Virtual-8086 mode extensions: VME).
Dále se zmiňme o stránkování. Celý paměťový rozsah mikroprocesoru Intel 80386 (32bitů adresy = 4GB) je rozdělen do stránek o velikosti 4kB. Těchto stránek je celkem 1024×1024 = 1048576, přičemž u každé stránky lze nastavit, zda je určena pro čtení a/nebo zápis, zda je stránka dostupná, dále určit přístupová práva (user/supervisor) a navíc samotný HW nastavuje bit dirty v případě, že byla stránka modifikována, tj. pokud se změnil alespoň jeden její bit.
Informace o stránkách nejsou uloženy v jediném bloku s 1048576 záznamy (to by totiž znamenalo, že by se muselo alokovat 4MB jen pro tyto účely). Namísto toho je použit koncept dvou úrovní tabulek. První tabulka má maximálně 1024 záznamů a obsahuje adresy tabulek na druhé úrovni (těch může být maximálně 1024, ale typicky jich bývá méně). A až v těchto tabulkách druhé úrovně jsou uloženy informace o jednotlivých stránkách. V praxi mají tedy tabulky stránek dohromady menší velikost, než ony 4MB.
Podpora stránkování je jednou z nejlepších technologií, které byly do čipů Intel 80386 přidány. Díky stránkování je totiž možné relativně snadno implementovat systém podporující větší množství úloh (v86), mezi kterými se lze přepínat. Navíc je možné realizovat (typicky na úrovni operačního systému nebo i jedné monolitické aplikace) virtuální paměť, přičemž vlastní RAM vlastně slouží jako rychlá cache ke stránkám ukládaným na pevný disk (swap). Systém (či monolitická aplikace) si v případě potřeby stránku, ke které se přistupuje, „dotáhne“ z disku popř. naopak uloží na disk v případě, že dojde ke změně jejího obsahu (je nastaven bit dirty).
18. Vznik nových operačních systémů využívajících vlastností mikroprocesoru 80386
Podpora až 4GB virtuální paměti a stránkování, kterou mikroprocesor 80386 nabízel, společně s možností využití 32bitových adres, vedly k tomu, že vznikly nové operační systémy, které ke své činnosti vyžadovaly právě 80386 nebo novější čipy s ním kompatibilní. Mezi tyto nové operační systémy patří Xenix System V/386, OS/2, Minix a taktéž Windows NT, které byly naprogramovány jako čistě 32bitové operační systémy (a platilo to i pro ovladače, aplikace atd.). Na stránkách Roota samozřejmě nesmíme zapomenout ani na Linux, jenž původně vznikl právě pro architekturu ia32 (a procesory 80386 podporoval až přibližně do roku 2013, poté již „jen“ 686).
Do určité míry byl 80386 podporován i ve Windows 3.0 a Windows 3.1, což byly šestnáctibitové systémy. Ovšem ve Windows for Workgroups 3.11 se objevila podpora pro 32bitové ovladače, což mj. vedlo k urychlení práce se souborovými systémy.
19. Prodloužení života DOSových aplikací
Vraťme se ještě k výše zmíněné podpoře virtuálního režimu v86. Díky existenci tohoto režimu bylo možné i v (tehdy) moderních operačních systémech s podporou většího množství úloh provozovat „staré dobré“ aplikace naprogramované pro systém DOS, a to včetně podpory tisku, síťové komunikace (což vyžadovalo určitou podporu) atd. Díky tomu bylo možné tyto aplikace provozovat i v době, kdy samotný DOS přestal být podporován i prodáván.
Zpětná podpora DOSovských aplikací zjednodušila adaptaci na nové operační systémy, které (pochopitelně) zpočátku neobsahovaly všechny potřebné aplikace, nemluvě o specializovaných aplikacích, které vlastně nebyly přepsány nikdy a stále se používaly/používají jejich původní DOSovské verze.
20. Odkazy na Internetu
- The Intel 8088 Architecture and Instruction Set
https://people.ece.ubc.ca/~edc/464/lectures/lec4.pdf - x86 Opcode Structure and Instruction Overview
https://pnx.tf/files/x86_opcode_structure_and_instruction_overview.pdf - x86 instruction listings (Wikipedia)
https://en.wikipedia.org/wiki/X86_instruction_listings - x86 assembly language (Wikipedia)
https://en.wikipedia.org/wiki/X86_assembly_language - Intel Assembler (Cheat sheet)
http://www.jegerlehner.ch/intel/IntelCodeTable.pdf - 25 Microchips That Shook the World
https://spectrum.ieee.org/tech-history/silicon-revolution/25-microchips-that-shook-the-world - Chip Hall of Fame: Intel 8088 Microprocessor
https://spectrum.ieee.org/tech-history/silicon-revolution/chip-hall-of-fame-intel-8088-microprocessor - Jak se zrodil procesor?
https://www.root.cz/clanky/jak-se-zrodil-procesor/ - The 8086/8088 Primer
https://www.stevemorse.org/8086/index.html - flat assembler: Assembly language resources
https://flatassembler.net/ - FASM na Wikipedii
https://en.wikipedia.org/wiki/FASM - Fresh IDE FASM inside
https://fresh.flatassembler.net/ - MS-DOS Version 4.0 Programmer's Reference
https://www.pcjs.org/documents/books/mspl13/msdos/dosref40/ - DOS API (Wikipedia)
https://en.wikipedia.org/wiki/DOS_API - Bit banging
https://en.wikipedia.org/wiki/Bit_banging - IBM Basic assembly language and successors (Wikipedia)
https://en.wikipedia.org/wiki/IBM_Basic_assembly_language_and_successors - X86 Assembly/Bootloaders
https://en.wikibooks.org/wiki/X86_Assembly/Bootloaders - Complete 8086 instruction set
https://content.ctcd.edu/courses/cosc2325/m22/docs/emu8086ins.pdf - Complete 8086 instruction set
https://yassinebridi.github.io/asm-docs/8086_instruction_set.html - 8088 MPH by Hornet + CRTC + DESiRE (final version)
https://www.youtube.com/watch?v=hNRO7lno_DM - Area 5150 by CRTC & Hornet (Party Version) / IBM PC+CGA Demo, Hardware Capture
https://www.youtube.com/watch?v=fWDxdoRTZPc - 80×86 Integer Instruction Set Timings (8088 – Pentium)
http://aturing.umcs.maine.edu/~meadow/courses/cos335/80×86-Integer-Instruction-Set-Clocks.pdf - Colour Graphics Adapter: Notes
https://www.seasip.info/VintagePC/cga.html - Demoing An 8088
https://hackaday.com/2015/04/10/demoing-an-8088/ - Interrupts in 8086 microprocessor
https://www.geeksforgeeks.org/interrupts-in-8086-microprocessor/ - Interrupt Structure of 8086
https://www.eeeguide.com/interrupt-structure-of-8086/ - List of Intel CPU microarchitectures
https://en.wikipedia.org/wiki/List_of_Intel_CPU_microarchitectures - IBM PC slaví 40 let: otevřená architektura změnila svět
https://www.root.cz/clanky/ibm-pc-slavi-40-let-otevrena-architektura-zmenila-svet/ - Jak se zrodil procesor?
https://www.root.cz/clanky/jak-se-zrodil-procesor/ - All About Computers – 386 processor
https://shinesystems.blogspot.com/2009/06/386-processor.html - Legendární školní mikropočítač IQ-151
https://www.root.cz/clanky/legendarni-skolni-mikropocitac-iq-151/ - Vývoj her a grafických dem pro oslavovanou i nenáviděnou platformu PC (první kroky)
https://www.root.cz/clanky/vyvoj-her-a-grafickych-dem-pro-oslavovanou-i-nenavidenou-platformu-pc-prvni-kroky/ - AMD Am386 DXL-25
https://hw-museum.cz/cpu/129/amd-am386-dxl-25 - AMD Am386 SX-40
https://hw-museum.cz/cpu/490/amd-am386-sx-40 - Intel i386 DX-33
https://hw-museum.cz/cpu/493/intel-i386-dx-33 - Intel i387SX-25
https://hw-museum.cz/cpu/438/intel-i387sx-25 - Intel 80386, a revolutionary CPU
https://www.xtof.info/intel80386.html - Intel 80386, a Revolutionary CPU
https://news.ycombinator.com/item?id=38156486 - LINUX's History
https://www.cs.cmu.edu/~awb/linux.history.html - Legacy of the 386: The Enduring Impact of Backward Compatibility in Modern Processors
https://lngfrm.net/legacy-of-the-386-the-enduring-impact-of-backward-compatibility-in-modern-processors/





