Intel 8086

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
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ž 1 MB 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[editovat | editovat zdroj]

Zapojení vývodů mikroprocesoru Intel 8086 v minimálním a maximálním režimu

16bitový procesor

  • 1978 – 1982
  • základní procesor řady INTEL x86
  • frekvence max. 10 MHz

Vnitřní struktura 8086[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

Vykonává vlastní instrukce, které načte ze zmíněné fronty.

Vytváření adresy[editovat | editovat zdroj]

Šířka adresové 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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

Registry mikroprocesoru Intel 8086
19 18 17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (číslo bitu)
Univerzální registry
  AH AL AX accumulator, střadač
  BH BL BX base, báze
  CH CL CX counter, čítač
  DH DL DX data
Indexové registry
0 0 0 0 SI Source Index, index zdrojové adresy
0 0 0 0 DI Destination Index, index cílové adresy
0 0 0 0 BP Base Pointer, ukazatel báze zásobníku
0 0 0 0 SP Stack Pointer, ukazatel vrcholu zásobníku
Program counter
0 0 0 0 IP Instruction Pointer, programový čítač
Segmentové registry
CS 0 0 0 0 Code Segment, kódový segmentový registr
DS 0 0 0 0 Data Segment, datový segmentový registr
ES 0 0 0 0 ExtraSegment, pomocný segmentový registr
SS 0 0 0 0 Stack Segment, zásobníkový segmentový registr
Registr příznaků
  - - - - O D I T S Z - A - P - C Příznaky

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 16-bitový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[editovat | editovat zdroj]

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č[editovat | editovat zdroj]

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

Segmentové registry[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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á při BCD aritmetice.

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