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 | |
---|---|
Intel 8086 | |
Specifikace | |
Návrh | Intel |
Uvedení | 1978 |
Výrobci | Intel, AMD, NEC, Fujitsu, Texas Instruments |
Výrobní proces | 3 µm |
Frekvence | 5 MHz až 10 MHz |
Instrukční sada | x86 |
Patice | DIP40 |
Předchůdce | Intel 8085 |
Nástupce | Intel 80186 a Intel 80286 |
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
- 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
Registry mikroprocesoru Intel 8086 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
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.