Intel 8086

Intel 8086 je 16bitový mikroprocesor firmy Intel uvedený na trh v roce 1978. Je prvním mikroprocesorem řady x86, která se díky použití jeho levnější varianty Intel 8088 v počítačích IBM-PC stala nejrozšířenější architekturou stolních osobních počítačů.

Intel 8086 pracuje s hodinovým signálem 5-10 MHz a při kmitočtu hodin 10 MHz poskytuje výpočetní výkon asi 0,75 MIPS; může adresovat až asi 1 MiB fyzické paměti, 64 K vstupních/výstupních registrů a používat až 256 hardwarových přerušení.

Architektura 8086 vychází z 8bitového mikroprocesoru 8080, který má podobnou sadu univerzálních registrů. Programový kód 8086 sice není binárně kompatibilní s procesory 8080/8085, ale existuje převodník programů z jazyka symbolických adres (JSA) 8080 do JSA 8086. Krátce po uvedení 8086 byl uveden na trh podobný procesor Intel 8088, který měl 8bitovou vnější datovou sběrnici umožňující spolupráci s levnějšími čipovými sadami.

Specifikace 

 Frekvence čipu
 5 MHz, 0,33 MIPS
 8 MHz, 0,66 MIPS
 10 MHz, 0,75 MIPS
 29 000 tranzistorů. Technologie výroby HMOS 3 μm
 1 MB adresovatelné paměti
 Teoreticky až 10x výkonnější než 8080
16bitový procesor
 1978 – 1982
 základní procesor řady INTEL x86
 frekvence max. 10 MHz

Vnitřní struktura 8086 
Registry jsou paměťová místa umístěná v mikroprocesoru. Procesor 8086 má 14 šestnáctibitových registrů.

Procesor lze rozdělit na dvě jednotky, sběrnicovou (BIU) a vykonávací (EU).

Sběrnicová jednotka – Bus Interface Unit 
Zajišťuje styk procesoru se sběrnicí a výpočet adres. Pokouší se předem z paměti načítat instrukce do vnitřní šestibajtové instrukční fronty. Obsahuje segmentové registry.

Vykonávací jednotka – Execution Unit 
Vykonává vlastní instrukce, které načte ze zmíněné fronty.

Vytváření adresy 
Šířka adresní sběrnice je 20 bitů (adresuje 1 MB).

Aby mohl 16bitový mikroprocesor používat 20bitové adresy, je každá adresa rozdělena na dvě části – segment a offset, které tvoří tzv. logickou adresu. Segmentová část adresy musí být vždy uložena v některém ze segmentových registrů, offsetová část může být v některém z registrů BX, SI, DI, SP, BP nebo IP anebo může být zadána jako konstanta v programu.

Z logické adresy se fyzická vytváří tak, že se nejprve posune hodnota segmentu o 4 bity vlevo (odpovídá násobení 16) a k takto vzniklému číslu se přičte offset. Tím vznikne 20bitová adresa, ukazující na konkrétní místo v paměti.

Důsledkem adresování je paměť rozdělena na jednotlivé bloky o velikosti 16 B až 64 KB (segmenty), které se mohou překrývat. Segmentová část adresy po vynásobení šestnácti (připsání čtyř nul na nejnižší bity) ukazuje na začátek segmentu a offset je pozice v segmentu vzhledem k jeho začátku.

Registry 
Z dělení registrů do skupin je patrné, že instrukční sada mikroprocesoru Intel 8086 je dosti vzdálená ideálu ortogonality: každý z univerzálních registrů má svoji speciální funkci, pro kterou nelze použít jiný registr; pro adresování operandů v paměti lze používat pouze registry BX, SI, DI, BP a specializované registry SP a IP. Pro adresování operandů v paměti lze používat obsah registru BX, SI nebo DI, obsah registru BX, SI, DI nebo BP s přičteným posunutím nebo kombinace součtu obsahu ukazatele a indexregistru s posunutím (BX + SI + konstanta, BX + DI + konstanta, BP + SI + konstanta a BP + DI + konstanta). Adresy druhého řádu (registr ukazuje na místo v paměti, ve kterém je ukazatel na operand) nelze používat vůbec.

Univerzální registry 

Univerzální registry lze používat pro aritmetické a logické operace. Jejich sestava se téměř shoduje s univerzálními registry 8bitového mikroprocesoru Intel 8080: v porovnání s ním má Intel 8086 zvětšený akumulátor na 16 bitů a přejmenované registry (A na AX, BC na CX, DE na DX a HL na BX).

Každý z 16bitových registrů lze používat jako dva 8bitové registry: AH je vyšších 8 bitů, AL nižších 8 bitů 16bitového registru AX.

Každý z univerzálních registrů má navíc speciální funkci: registr AX je střadač (akumulátor), některé instrukce pracují jen s tímto registrem. BX se používá především jako ukazatel na data (adresa) v některých adresových módech. CX je čítač, používá se u instrukcí s opakováním. DX je datový registr a lze jej používat pro adresování vstupně-výstupních portů.

Indexové a ukazatelové registry 
Tyto registry jsou určeny pro adresování dat v paměti. Indexové registry mají specifikovaný způsob využití. SP (ukazatel vrcholu zásobníku) obsahuje hodnotu offsetu vrcholu zásobníku umístěného v paměti. Na zásobník se při volání podprogramů a přerušení ukládají návratové adresy a lze jej používat i pro ukládání dat. BP je určen k adresování dat na zásobníku; při spolupráci s vyšším programovacím jazykem je využíván jako ukazatel na parametry právě prováděné procedury. SI a DI se využívají při přenosech bloku dat a při přístupu do paměti.

Programový čítač 
Registr IP (Instruction Pointer) obsahuje offsetovou část adresy následující programové instrukce.

Segmentové registry 
CS obsahuje segmentovou část adresy následující programové instrukce. DS je určen k adresování dat v hlavní paměti. SS ukazuje na segment strojového zásobníku. Dvojice registrů SS a SP obsahuje adresu vrcholu strojového zásobníku v hlavní paměti. SS se používá jako segmentový registr při adresování pomocí BP. ES je využíván při přesunech dat, jinak je volně k dispozici.

Příznakový registr – FLAGS 
Registr příznaků procesoru 8086 obsahuje jednobitové příznaky, které určují okamžitý stav mikroprocesoru. Jednotlivé bity tvoří dvě skupiny:
 Řídicí příznaky: TF, IF, DF
 Aritmetické příznaky: OF, ZF, SF, AF, PF, CF

Význam jednotlivých bitů:
 TF (Trap Flag) – Tento příznak se používá pro účely ladění, jeho nastavení způsobí, že procesor po provedení každé instrukce vygeneruje přerušení INT1. Tím je možné jednoduše provádět laděný program po instrukcích (krokovat).
 IF (Interrupt Flag) – Povoluje externí přerušení.
 DF (Direction Flag) – Určuje směr zpracování řetězců (bloků dat). Je-li nastaven v jedničce, obsah registrů SI a DI se po provedení řetězcové operace sníží (řetězec se zpracovává odzadu), jinak se zvýší.
 OF (Overflow Flag) – Příznak se nastaví na jedničku, došlo-li v průběhu provádění instrukce k aritmetickému přeplnění (přetečení) při operacích s čísly se znaménkem, tzn., že výsledek se nevejde do určeného místa.
 SF (Sign Flag) – Je-li výsledek operace záporný, příznak se nastaví na jedničku. Je to v podstatě kopie nejvyššího bitu výsledku.
 ZF (Zero Flag) – Příznak se nastaví, je-li výsledek operace nulový.
 PF (Příznak parity) – Příznak se nastaví, jestliže dolních 8 bitů výsledku prováděné instrukce obsahuje sudý počet jedniček (neznamená, že číslo je sudé).
 CF (Carry Flag) – Příznak se nastaví, jestliže při provádění operace došlo k přenosu z nejvyššího bitu. Pro operace s čísly bez znaménka má stejnou funkci jako OF pro čísla se znaménkem. Používá se také při instrukcích posunu a rotace.
 AF (Auxiliary Flag) – Přenos ze 3. do 4. bitu. Používá se při BCD aritmetice.

Na základě hodnot příznaků je možné větvit program pomocí instrukcí podmíněného skoku.

Externí odkazy 
 

Procesory Intel
Architektura x86