thumb|Procesor 8086 firmy Intel thumb|Procesor 8086-2 firmy Intel thumb|Procesor 80C86A-2 firmy OKI 8086 – 16-bitowy mikroprocesor wprowadzony na rynek 8 czerwca 1978 roku. Miał także oznaczenia: 8086-1, 8086-2, 8086-4, iAPX 86/10, a dla wykonywanych w technologii CMOS: 80C86, 80C86-2, 80C86A.

Mikroprocesor został zaprojektowany przez firmę Intel w technologii 3 μm HMOS (, później także HMOS-II, HMOS-III i CHMOS) jako rozszerzenie 8-bitowego 8080/8085. Wykonywany głównie w obudowach 40-pin DIP, także jako 44-pin PLCC i 56-pin QFP (). Wciąż jeszcze produkowany przez różnych dostawców.

Jego zastosowanie (w szczególności jego późniejszej odmiany z 8-bitowym interfejsem – 8088) w pierwszych komputerach osobistych rodziny IBM PC, doprowadziło do jego wielkiej popularyzacji i dalszego rozwoju tej rodziny procesorów (architektura x86). W związku z historycznym znaczeniem procesora 8086 firmie Intel przydzielono identyfikator 0x8086 na liście identyfikatorów (PCI ID) dostawców urządzeń dla magistrali PCI.

__TOC__

Geneza Prace projektowe nad 8086 w firmie Intel rozpoczęto w maju 1976 roku, kiedy projekt przygotowujący 32-bitowy mikroprocesor 8800 napotkał duże trudności. Uruchomienie prac nad nową konstrukcją było ważne dla firmy, gdyż w lipcu 1976 roku ZiLOG utworzony przez byłych pracowników Intela dostarczył Z80, który przewyższał dotychczasowy popularny model Intel 8080.

Charakterystyka Podstawowe parametry mikroprocesora 8086: architektura CISC, przestrzeń adresowa pamięci – 1 MB w trybie rzeczywistym, 16-bitowa magistrala danych, 20-bitowa magistrala adresowa, częstotliwość sygnału zegarowego do 10 MHz, 91 podstawowych typów rozkazów, przestrzeń adresowa urządzeń wejścia/wyjścia – 64 kB, możliwość wykonywania operacji bitowych, bajtowych, o długości słowa i łańcuchowych, 7 trybów adresowania argumentów w pamięci, dwa tryby pracy – minimalny i maksymalny, 16-bitowa jednostka arytmetyczno-logiczna (ALU), 16-bitowe rejestry ogólnego przeznaczenia, 6-bajtowa kolejka rozkazów.

Przy projektowaniu mikroprocesora 8086, konstruktorzy firmy Intel zastosowali wiele nowych, nie występujących w mikroprocesorach 8-bitowych, rozwiązań:

rozszerzenie możliwości adresowanie operandów w mikroprocesorach 8-bitowych, zazwyczaj stosowano cztery tryby adresowania: rejestrowy, natychmiastowy, pośredni i bezpośredni. W mikroprocesorze 8086 dodano rejestry indeksowe (2 rejestry), wskaźnikowe (2 rejestry) i bazowy (1 rejestr), wprowadzając tryby adresowania: indeksowy, bazowy i indeksowo-bazowy.

wprowadzenie segmentacji obszaru pamięci celem rozdzielenia obszarów przeznaczonych dla programu, danych i stosu wprowadzono mechanizm segmentacji. Mikroprocesor zawiera cztery rejestry segmentowe, w których przechowywane część segmentowa adresu. Zawartości tych rejestrów wraz z adresem efektywnym, obliczanym przez mikroprocesor w zależności od trybu adresowania, stanowi adres fizyczny pamięci. Taki sposób adresowania ułatwia relokację programów i danych oraz umożliwia stworzenie prostego mechanizmu zarządzania pamięcią.

mechanizmy przyspieszenia pracy wykonywanie rozkazu przez mikroprocesor można podzielić na kilka etapów. Część z nich wymaga współpracy mikroprocesora z pamięcią (pobieranie kodu operacji, odczyt i zapis argumentu operacji) pozostałe mikroprocesor wykonuje niezależnie (dekodowanie kodu operacji, wykonywanie operacji). W związku z tym projektanci firmy Intel stworzyli dwie osobne jednostki: wykonawczą oraz interfejsową. Pierwsza z nich odpowiedzialna jest za dekodowanie i wykonanie operacji, druga za współpracę z pamięcią. Dzięki takiej architekturze 8086 jest w stanie w jednocześnie wykonywać operację jednego rozkazu oraz pobierać kod operacji następnego

mechanizmy dla pracy wieloprocesorowej mikroprocesor 8086 może pracować w dwóch różnych trybach. W trybie minimalnym steruje on całym systemem mikrokomputerowym pełniąc rolę kontrolera magistrali. Zwykle system taki składa się z jednego obwodu drukowanego i kilku urządzeń peryferyjnych. W trybie maksymalnym magistrala jest współdzielona pomiędzy mikroprocesor a procesory wspomagające. Funkcje sterownika magistrali przejmuje wtedy osobny element systemu mikrokomputerowego zwany kontrolerem magistrali. Tryb ten stosowany jest w przypadku systemów wieloprocesorowych (np. system w którego skład wchodzi mikroprocesor wraz z koprocesorem matematycznym)

Topologia, opis i przeznaczenie końcówek thumb|250px|Wyprowadzenia mikroprocesora 8086 firmy Intel Wyprowadzenia, których funkcja pozostaje taka sama bez względu na tryb pracy mikroprocesora: → MN/~MX (Minimum/~Maximum) – stan tego wejścia wyznacza tryb pracy mikroprocesora. 1 (Vcc) – powoduje, że mikroprocesor pracuje w trybie minimalnym. 0 (GND) – w trybie maksymalnym. → CLK – (Clock) sygnał zegarowy, wyznaczający podstawowy takt pracy mikroprocesora. Jest sygnałem asymetrycznym o optymalnym współczynniku wypełnienia 33%. → READY – sygnał potwierdzenia gotowości pamięci lub urządzenia wejścia/wyjścia do zakończenia transmisji danych. Jest synchronizowany sygnałem zegarowym. → RESET – wystąpienie wysokiego poziomu tego sygnału przez okres co najmniej 4 taktów zegara powoduje natychmiastowe wstrzymanie pracy mikroprocesora, wyzerowanie rejestrów DS, SS, ES, rejestru znaczników (wyłączenie przerwań) oraz wpisanie do rejestru CS wartości FFFFh. Po zaniku sygnału RESET mikroprocesor wznawia pobieranie rozkazów od adresu FFFF0h. → INTR – (Interrupt request) Sygnał żądania przerwania. Wejście wyzwalane poziomem, próbkowane w ostatnim takcie zegarowym aktualnie wykonywanego rozkazu. W przypadku gdy sygnał na wejściu jest w stanie aktywnym, a system przerwań odblokowany (ustawiona flaga IF), mikroprocesor rozpoczyna cykl potwierdzenia przerwania (interrupt acknowledge). → NMI – (Non–maskable interrupt) wejście wyzwalane zboczem narastającym. Zmiana stanu sygnału z poziomu niskiego na wysoki powoduje zainicjowanie obsługi żądania przerwania po zakończeniu aktualnie wykonywanego rozkazu. → ~TEST – (Test) stan tego wejścia jest sprawdzany przez instrukcję WAIT. W przypadku kiedy sygnał wejściowy jest w stanie niskim, mikroprocesor kontynuuje pracę wykonując kolejną instrukcję programu. W przypadku kiedy TEST jest w stanie wysokim, mikroprocesor czeka aż nastąpi zmiana stanu sygnału na niski. Używany do synchronizacji pracy z koprocesorem. ↔ od AD0 do AD15 – 16-bitowa, multipleksowana magistrala danych i adresów. ↔ A19/S6, A18/S5, A17/S4, A16/S3 – w trakcie pierwszego taktu cyklu interfejsowego dostępu do pamięci są to cztery najbardziej znaczące linie adresu, w przypadku cyklu interfejsowego dostępu do urządzenia wejścia/wyjścia sygnały te wchodzą w stan niski. W pozostałych taktach cyklu interfejsowego, linie te zawierają 4 bity słowa statusu mikroprocesora. Linia S6 ma zawsze wartość logicznego zera, linia S5 zwiera stan flagi blokady systemu przerwań mikroprocesora i jest aktualizowana na początku każdego cyklu zegarowego. Linie S4 i S3 kodują informacje o aktualnie wykorzystywanym segmencie pamięci do tworzenia adresu fizycznego. S4 S3 segment 0011 0101 dodatkowy (ES)stosu (SS)programu (CS)danych (DS) ← ~BHE/S7 – (Bus High Enable) podczas trwania pierwszego taktu cyklu interfejsowego, sygnał ten informuje czy ma zostać użyty bardziej znaczący bajt magistrali danych. W pozostałych taktach cyklu końcówka pełni funkcję wyjścia sygnału S7 który pozostaje aktywny w stanie niskim. W przypadku wystąpienia żądania przerwania, pozostaje w stanie niskim w pierwszym takcie cyklu potwierdzenia przerwania. Sygnał przechodzi w stan wysokiej impedancji w trakcie stanu zawieszenia mikroprocesora. ← ~RD – (Read) sygnał strobujący dla odczytu danych z pamięci lub urządzenia wejścia/wyjścia. W czasie stanu zawieszenia sygnał przechodzi w stan wysokiej impedancji. Wyprowadzenia, których funkcja zmienia się w zależności od wyboru trybu pracy mikroprocesora:

Znaczenie końcówek dla trybu minimalnego ← ~WR – (Write) sygnał strobujący dla zapisu do pamięci lub urządzenia wejścia/wyjścia. W czasie stanu zawieszenia wyjście te wchodzi w stan wysokiej impedancji. ← M/~IO – (Status Line) sygnał ten jest odpowiednikiem sygnału S2 (w trybie maksymalnym pracy mikroprocesora). Określa on czy wykonywany cykl interfejsowy dotyczy pamięci czy urządzenia wejścia/wyjścia. W czasie stanu zawieszenia wyjście to wchodzi w stan wysokiej impedancji. 1 – dotyczy pamięci 0 – dotyczy urządzeń zewnętrznych ← ALE – (Address Latch Enable) opadające zbocze tego sygnału, w trakcie trwania pierwszego taktu cyklu interfejsowego, zatrzaskuje adres komórki pamięci lub urządzenia wejścia/wyjścia w zewnętrznych rejestrach. ← ~INTA – (Interrupt Acknowledge) sygnał potwierdza wejście mikroprocesora w stan obsługi przerwania. Wykorzystywany jako sygnał strobujący przy wyprowadzeniu wektora przerwań na magistralę danych (podobnie jak sygnał ALE dla cyklów interfejsowych odczytu i zapisu). → HOLD – (Hold) sygnał żądania dostępu do magistrali przez urządzenie zewnętrzne (zwolnienia magistrali przez mikroprocesor) np. w celu uzyskania bezpośredniego dostępu do pamięci (DMA). ← HLDA – sygnał potwierdzenia zwolnienia magistrali i przejścia mikroprocesora w stan zawieszenia. ← ~DEN – sygnał sterujący buforami magistrali danych, otwierający je tylko na czas przesyłania danych przez multipleksowaną magistralę. W czasie stanu zawieszenia wyjście to wchodzi w stan wysokiej impedancji. ← DT/~R – sygnał określający kierunek przesyłania danych poprzez bufory 1 – transmisja przebiega w kierunku od mikroprocesora do pamięci, bądź urządzeń zewnętrznych 0 – wskazuje kierunek do mikroprocesora W czasie stanu zawieszenia wyjście to wchodzi w stan wysokiej impedancji. Znaczenie końcówek dla trybu maksymalnego ← ~LOCK – (Lock) sygnał informuje procesor wspomagający (za pomocą stanu niskiego), że żądanie zwolnienia magistrali zostało zablokowane do czasu wykonania instrukcji z prefiksem „LOCK”. W czasie stanu zawieszenia wyjście to wchodzi w stan wysokiej impedancji. ← ~S0, ~S1, ~S2 – sygnały te określają rodzaj cyklu interfejsowego wykonywanego przez mikroprocesor. ~S0 ~S1 ~S2 cykl interfejsowy 00001111 00110011 01010101 potwierdzenie przerwaniaodczyt z WE/WYzapis do WE/WYzatrzymanie (HALT)pobranie rozkazuodczyt z pamięcizapis do pamięcistan pasywny, brak cyklu interfejsowego ← QS0, QS1 – (Queue Status) sygnały określają stan kolejki rozkazów mikroprocesora. Są one ważne w trakcie trwania taktu zegarowego poprzedzającego wykonanie przez kolejkę określonej operacji. QS1 QS2 stan kolejki 0011 0101 bez operacjipobranie do wykonania pierwszego bajta rozkazukolejka pustapobranie kolejnego bajta ↔ ~RQ/~GT0 oraz ~RQ/~GT1 – (Request/Grant) sygnały te wykorzystywane są do wymuszenia zwolnienia magistrali przez procesor, aktualnie ją zajmujący. Sygnał RQ/GT0 ma wyższy priorytet od sygnału RQ/GT1.

Architektura procesora Mikroprocesor 8086 składa się z dwóch współpracujących zespołów, działających jednocześnie: jednostki wykonawczej EU jednostki interfejsowej (zespołu łącza z magistralą systemową) BIU

thumb|center|700px|Schemat blokowy mikroprocesora Intel 8086. Jednostka wykonawcza: 1) Blok rejestrów ogólnego przeznaczenia (rejestry arytmetyczne, indeksowe i wskaźnikowe). 2) Jednostka arytmetyczno-logiczna wraz z rejestrem flag. Jednostka interfejsowa: 3) Blok rejestrów segmentowych wraz z licznikiem rozkazów. 4) Generator adresu fizycznego (20-bitowy sumator). 5) Kolejka rozkazów, 6 komórek pamięci (każda o rozmiarze bajta) zorganizowanych w słowa. 6) Kontroler interfejsu. 7) Układ kontrolny.

Jednostka wykonawcza W jej skład wchodzi 16-bitowa jednostka arytmetyczno-logiczna ALU wraz z rejestrem znaczników oraz blok rejestrów ogólnego przeznaczenia. ALU dołączona jest do magistrali wewnętrznej mikroprocesora. Z magistrali tej pobierane są argumenty operacji, a także wysyłany jest na nią wynik operacji.

Rejestr znaczników