Intel 8086

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

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. +more 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

Zapojení vývodů mikroprocesoru Intel 8086 v minimálním a maximálním režimu * Frekvence čipu ** 5 MHz, 0,33 MIPS ** 8 MHz, 0,66 MIPS ** 10 MHz, 0,75 MIPS * 29 000 tranzistorů. +more 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. +more 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). +more 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
{
19
Univerzální registry
Indexové registry
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
Program counter
0 0 0 0
Segmentové registry
CS
DS
ES
SS
Registr příznaků
|}

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. +more 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í. +more 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. +more 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). +more * 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.

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top