Intel 8086

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Intel 8086

Intel 8086 je 16bitový procesor firmy Intel vyráběný od roku 1978 technologií HMOS. Architektura volně vychází z procesoru 8080, má podobnou sadu univerzálních registrů. Programový kód není binárně kompatibilní s procesory 8080/8085, ale existuje převodník programů z jazyka symbolických adres (JSA) 8080 do JSA 8086. Adresovatelný prostor paměti je 1 MB. Adresovatelný prostor vstupních/výstupních registrů je 64 KB nebo 64 Kslov. Může používat až 256 hardwarových přerušení. Intel 8086 byl první z řady procesorů architektury x86, která je dodnes nejrozšířenější architekturou desktopových počítačů. Krátce po jeho uvedení byl uveden na trh také 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]

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.

Univerzální registry[editovat | editovat zdroj]

AX = AH + AL ... střadač
BX = BH + BL ... báze
CX = CH + CL ... čítač
DX = DH + DL ... data

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

Tyto registry lze volně používat pro aritmetické a logické operace. Každý 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]

SP ... ukazatel zásobníku
BP ... ukazatel báze
SI ... index zdrojové adresy
DI ... index cílové adresy

Tyto registry se nejčastěji používají pro adresaci dat. Indexové registry mají specifikovaný způsob využití. SP (ukazatel vrcholu zásobníku) obsahuje hodnotu offsetu zásobníku mikroprocesoru a používá se při práci se zásobníkem, včetně ukládání návratových adres při volání podprogramů a přerušení. 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]

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

Segmentové registry[editovat | editovat zdroj]

CS ... segmentový registr programu (Code Segment)
DS ... segmentový registr dat (Data Segment)
SS ... segmentový registr zásobníku (Stack Segment)
ES ... pomocný segmentový registr (Extra Segment)

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:

  • TF, IF, DF
  • 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 (Parity Flag) – 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 přenosu) – Příznak se nastaví, jestlliž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.

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.