Intel 8086: различия между версиями

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
[непроверенная версия][отпатрулированная версия]
Содержимое удалено Содержимое добавлено
мНет описания правки
м Технические характеристики: убрал лишнюю запятую
 
(не показано 225 промежуточных версий, сделанных более чем 100 участниками)
Строка 1: Строка 1:
{{Карточка центрального процессора
[[Изображение:i8086.jpg|thumb|right|300px|Процессор Intel D8086-2 (вид сверху)]]
| name = Intel 8086
'''Intel 8086''' — первый 16-битный [[процессор]] компании [[Intel]], выпущенный [[8 июня]] [[1978]] года. Процессор имел набор команд, который применяется и в современных процессорах, именно от этого процессора берёт своё начало известная на сегодня архитектура [[x86]].
| image = i8086.jpg
| image_size = 200 px
| caption = Микропроцессор Intel 8086
| produced-start = 8 июня 1978
| produced-end = 1990
| slowest = 4
| fastest = 16
| slow-unit = МГц
| fast-unit = МГц
| fsb-slowest =
| fsb-fastest =
| fsb-slow-unit =
| fsb-fast-unit =
| size-from = 3
| size-to =
| size-unit = мкм
| process_technology_name = [[HMOS]], [[CHMOS]]
| manuf1 = [[Intel|Intel Corp.]]
| manuf2 = [[AMD]], [[Harris Corporation|Harris]] ([[Intersil]]), [[Texas Instruments]]
| manuf3 = [[NEC]], [[OKI]]
| manuf4 = [[Fujitsu]], [[Mitsubishi]]
| manuf5 = [[Siemens]], [[MHS]]
| core1 =
| sock1 = [[DIP|DIP40]], [[QFP|QFP56]], [[PLCC|PLCC44]]
| arch = [[x86]]-16
| microarch =
| prev = Intel 8085
| next = Intel 8088
| variant = [[Intel 8088|8088]]|
| pack = 40 контактов
| successor = [[Intel 80186|80186]]
| transistors-from = 29000
}}
[[Файл:KL USSR KP1810BM86.jpg|right|thumb|240px|Микропроцессор [[К1810ВМ86|КР1810ВМ86]], советский аналог Intel 8086]]
'''Intel 8086''' (в 1980-85 годах известный как '''iAPX 86/10''') — первый 16-битный [[микропроцессор]] компании [[Intel]]. Разрабатывался с весны 1976 года и выпущен 8 июня 1978 года<ref>{{cite web|title=Microprocessor Hall of Fame|url=http://www.intel.com/museum/online/hist%5Fmicro/hof/|publisher=Intel|accessdate=2007-08-11|archiveurl=https://web.archive.org/web/20070706032836/http://www.intel.com/museum/online/hist_micro/hof/|archivedate=2007-07-06|deadurl=yes}}</ref>. Реализованная в процессоре [[архитектура набора команд]] стала основой широко известной архитектуры [[x86]]. Процессоры этой архитектуры стали наиболее успешной линией процессоров Intel. Современные процессоры этой архитектуры сохраняют возможность выполнять все команды этого набора.


Незначительно изменённая версия процессора с 8-битной [[шина данных|шиной данных]], выпущенная в 1979 году под названием [[Intel 8088]], применялась в [[персональный компьютер|персональных компьютерах]] [[IBM PC]] и [[IBM PC/XT]].
Конкурентами микропроцессора i8086 являются такие разработки, как [[NEC V30]], который был на 5 % производительнее i8086, но при этом был полностью с ним совместим. Отечественным аналогом является микропроцессор [[К1810ВМ86]], входивший в серию микросхем К1810.

== История ==

=== Предшественники ===
В 1972 году Intel выпустила [[8008]], первый 8-битный микропроцессор. Он использовал [[система команд|набор инструкций]], разработанный корпорацией [[Datapoint]] для программируемых [[компьютерный терминал|компьютерных терминалов]], пригодный и для универсальных процессоров. Этот процессор требовал нескольких дополнительных [[Интегральная схема|микросхем]] для использования в полноценном компьютере, отчасти потому, что использовал маленький корпус всего лишь с 18 выводами, который использовался для микросхем [[DRAM]], производимых Intel, и соответственно не мог иметь отдельную шину адресов.

Двумя годами позже, в 1974 году, был запущен [[8080]], в новом, 40-выводном [[DIP]]-корпусе, первоначально разработанном для микросхем [[калькулятор]]ов. Он имел отдельную [[Шина адреса|шину адресов]] и расширенный набор инструкций, кодово- (не бинарно-) совместимый с 8008, дополненный для удобства программирования несколькими 16-битными инструкциями. Процессор Intel 8080 часто называют первым по-настоящему удобным и полезным микропроцессором. В 1977 году он был заменён на [[Intel 8085]], с одним питающим напряжением (+5 В) вместо трёх различных на предшественнике и несколькими другими усовершенствованиями. Наиболее известными соперниками были 8-битные Motorola [[Motorola 6800|6800]] (1974), [[Microchip]] [[PIC]]16X (1975) (здесь наверное имеется в виду процессор [[General Instrument CP1600]]), [[MOS Technology]] [[6502]] (1975), [[Zilog]] [[Z80]] (1976) и [[Motorola]] [[6809]] (1978).

=== Разработка ===
Рынок 8-разрядных микропроцессоров в конце [[1970-е годы|1970-х годов]] был переполнен, и Intel, оставляя попытки закрепиться на нём, выпускает свой первый 16-битный процессор. Проект 8086 был начат в мае 1976 года и первоначально задумывался как временная замена для амбициозного и задерживающегося проекта [[Intel iAPX 432|iAPX 432]] (также известного как 8800){{Нет АИ|13|8|2017}}. Это была попытка, с одной стороны, противостоять менее запаздывавшим 16- и 32-битным процессорам других производителей (таких как Motorola, Zilog и [[National Semiconductor]]), а с другой — борьбы с угрозой от Zilog Z80 (разработанного командой под руководством ушедшего из Интел [[Фаджин, Федерико|Федерико Фаджина]]), который стал очень успешным. Первая версия архитектуры 8086 (система команд, прерывания, работа с памятью и вводом-выводом) была разработана с середины мая до середины августа [[Морзе, Стивен|Стивеном Морзе]]. Потом команда разработчиков была увеличена до четырёх человек, которые представили два основных проектных документа — «8086 Architectural Specifications» и «8086 Device Specifications». При разработке не использовалось специализированных [[Система автоматизированного проектирования|CAD-программ]], а диаграммы были исполнены из текстовых символов. Использовались уже опробованные элементы [[микроархитектура|микроархитектуры]] и физической реализации, в основном от Intel 8085.


== Описание ==
== Описание ==
Рынок 8-разрядных микропроцессоров в конце [[1970-е|1970-х]] был переполнен, и Intel оставляет попытки на нём закрепиться и выпускает первый 16-битный процессор. Процессор i8086 представляет собой модернизированный процессор [[Intel_8080|i8080]] и, хотя, разработчики не ставили перед собой цель достичь полной совместимости на программном уровне, большинство программ написанных для i8080 способны выполняться и на i8086. Новый процессор несёт в себе множество изменений, которые позволили значительно (в 10 раз) увеличить производительность по сравнению с предыдущим поколением процессоров.
Процессор Intel 8086 представляет собой модернизированный процессор [[Intel 8080]], и хотя разработчики не ставили перед собой цели достичь полной совместимости на программном уровне, большинство программ, написанных для Intel 8080, способно выполняться и на Intel 8086 после перекомпиляции. Новый процессор несёт в себе множество изменений, которые позволили значительно (в 10 раз) увеличить производительность по сравнению с предыдущим поколением процессоров компании.


=== Регистры ===
=== Регистры ===
{| class="infobox" style="font-size:88%;"
Всего в процессоре i8086 было 14 16-разрядных [[регистр]]ов: 4 регистра общего назначения (AX, BX, CX, DX), 2 индексных регистра (SI, DI), 2 указательных (BP, SP), 4 сегментных регистра (CS, SS, DS, ES), программный счётчик или указатель команды (IP) и регистр флагов (FLAGS, включает в себя 9 флагов). При этом регистры данных (AX, BX, CX, DX) допускали адресацию не только целых регистров, но и их младшей половины (регистры AL, BL, CL, DL) и старшей половины (регистры AH, BH, CH, DH), что позволяло использовать не только новое 16-разрядное [[ПО]], но сохраняло совместимость и со старыми программами (правда, их необходимо было, по крайней мере, [[компиляция|перекомпилировать]]).
|-
|
{| style="font-size:88%;"
|-
| colspan="17" | '''Регистры общего назначения''' <br>
|- style="background:silver;color:black"
| style="width:80px" align="center" colspan="8" | AH
| style="width:80px" align="center" colspan="8" | AL
| style="width:160px; background:white; color:black" colspan="1" | '''AX''' (primary accumulator)
|- style="background:silver;color:black"
| style="width:80px" align="center" colspan="8"| BH
| style="width:80px" align="center" colspan="8" | BL
| style="width:160px; background:white; color:black" colspan="1" | '''BX''' (base, accumulator)
|- style="background:silver;color:black"
| style="width:80px" align="center" colspan="8" | CH
| style="width:80px" align="center" colspan="8" | CL
| style="width:160px; background:white; color:black" colspan="1"| '''CX''' (counter, accumulator)
|- style="background:silver;color:black"
| style="width:80px" align="center" colspan="8" | DH
| style="width:80px" align="center" colspan="8" | DL
| style="width:160px; background:white; color:black" colspan="1"| '''DX''' (accumulator, other functions)
|-
| colspan="17" | '''Индексные регистры''' <br>
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | SI
| style="width:160px; background:white; color:black" colspan="1" | '''S'''ource '''I'''ndex
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | DI
| style="width:160px; background:white; color:black" colspan="1" | '''D'''estination '''I'''ndex
|- style="background:silver;color:black"
|-
| colspan="17" | '''Указательные регистры''' <br>
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | BP
| style="width:160px; background:white; color:black" colspan="1" | '''B'''ase '''P'''ointer
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | SP
| style="width:160px; background:white; color:black" colspan="1" | '''S'''tack '''P'''ointer
|-
| colspan="17" | '''Регистр состояния'''
|-
| style="width:10px" align="center" | 15
| style="width:10px" align="center" | 14
| style="width:10px" align="center" | 13
| style="width:10px" align="center" | 12
| style="width:10px" align="center" | 11
| style="width:10px" align="center" | 10
| style="width:10px" align="center" | 9
| style="width:10px" align="center" | 8
| style="width:10px" align="center" | 7
| style="width:10px" align="center" | 6
| style="width:10px" align="center" | 5
| style="width:10px" align="center" | 4
| style="width:10px" align="center" | 3
| style="width:10px" align="center" | 2
| style="width:10px" align="center" | 1
| style="width:10px" align="center" | 0
| style="width:160px; background:white; color:black" | (bit position)
|-
|- style="background:silver;color:black"
| style="width:10px" align="center" | -
| style="width:10px" align="center" | -
| style="width:10px" align="center" | -
| style="width:10px" align="center" | -
| style="width:10px" align="center" | O
| style="width:10px" align="center" | D
| style="width:10px" align="center" | I
| style="width:10px" align="center" | T
| style="width:10px" align="center" | S
| style="width:10px" align="center" | Z
| style="width:10px" align="center" | -
| style="width:10px" align="center" | A
| style="width:10px" align="center" | -
| style="width:10px" align="center" | P
| style="width:10px" align="center" | -
| style="width:10px" align="center" | C
| style="width:160px; background:white; color:black" | Флаги
|-
| colspan="17" | '''Сегментные регистры''' <br>
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | CS
| style="width:160px; background:white; color:black" colspan="1" | '''C'''ode '''S'''egment
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | DS
| style="width:160px; background:white; color:black" colspan="1" | '''D'''ata '''S'''egment
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | ES
| style="width:160px; background:white; color:black" colspan="1" | '''E'''xtra'''S'''egment
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | SS
| style="width:160px; background:white; color:black" colspan="1" | '''S'''tack '''S'''egment
|-
| colspan="17" | '''Указатель команды''' <br>
|- style="background:silver;color:black"
| style="width:160px" align="center" colspan="16" | IP
| style="width:160px; background:white; color:black" colspan="1" | '''I'''nstruction '''P'''ointer
|}
|-
|
|-
| ''Регистры 8086''
|}
Всего в процессоре Intel 8086 имеется 14 16-разрядных [[Регистр процессора|регистров]]: 8 регистров общего назначения (AX, BX, CX, DX), 2 индексных регистра (SI, DI), 2 указательных (BP, SP), 4 сегментных регистра (CS, SS, DS, ES), программный счётчик или указатель команды (IP) и [[регистр флагов]] (FLAGS, включает в себя 9 флагов). При этом регистры данных (AX, BX, CX, DX) допускают адресацию не только целых регистров, но и их младшей половины (регистры AL, BL, CL, DL) и старшей половины (регистры AH, BH, CH, DH), что не только позволило использовать новое на тот момент 16-разрядное [[Программное обеспечение|ПО]], но и сохранило обратную совместимость с 8-битными программами (правда, их необходимо было, по крайней мере, [[Компилятор|перекомпилировать]]).


=== Шины ===
=== Шины ===
Размер [[шина адреса|шины адреса]] был увеличен с 16 бит до 20 бит, что позволило адресовать 1 Мбайт (2<sup>20</sup> байт) памяти. [[Шина данных]] была 16-разрядной. Однако в микропроцессоре шина данных и шина адреса использовали одни и те же контакты на корпусе. Это привело к тому, что нельзя одновременно подавать на системную шину адреса и данные. Мультиплексирование адресов и данных во времени сокращает число контактов корпуса до 40, но и замедляет скорость передачи данных.
Размер [[шина адреса|шины адреса]] был увеличен с 16 бит до 20 бит, что позволило адресовать 1 Мбайт (2<sup>20</sup> байт) памяти. [[Шина данных]] была 16-разрядной. Однако в микропроцессоре шина данных и шина адреса использовали одни и те же контакты на корпусе. Это привело к тому, что нельзя одновременно подавать на системную шину адреса и данные. Мультиплексирование адресов и данных во времени позволяет использовать всего 20 контактов корпуса, но уменьшает скорость передачи данных.
Из-за того, что выполнение отдельных команд меньше цикла ввода-вывода, в процессор был введён (впервые) буфер команд на 6 байт, это позволяло выполнять, например, команды сложения параллельно командам ввода-вывода.


=== Работа с памятью ===
=== Работа с памятью ===
Поскольку регистры и [[АЛУ]] процессора 8086 — 16-битные, это накладывает ограничение на операции вычисления адреса и его максимальный размер. Для вычисления адресов, превышающих 16 бит, понадобились бы расширение регистров и АЛУ и переработка системы команд, что, в свою очередь, привело бы к увеличению числа транзисторов, усложнению и удорожанию процессора.
Для того чтобы адресовать больший, чем [[Intel_8080|i8080]], объем память потребовалось изменить способ адресации памяти. Ведь если использовать старые методы, когда адрес к ячейке памяти содержался в указательных регистрах, то пришлось бы увеличивать размер этих самых регистров, чтобы иметь возможность обращаться к большему объему памяти. Поэтому для адресации 1 Мбайт памяти применили следующую схему. На шину адреса подавался физический адрес размером 20 бит, который формировался путем сложения содержимого одного из сегментных регистров (16 бит) умноженным на 16, таким образом, получая номер [[сегмент]]а, с эффективным адресом, содержащимся в указательном регистре (16 бит) и называемый, также, [[смещение]]м. Если результат сложения оказывался больше чем 2<sup>20</sup>&nbsp;—1, то 21 бит отбрасывался; такая процедура называется «заворачиванием» адреса (''address wraparound''). Этот метод назвали [[реальный режим|реальным режимом]] адресации процессора, такой режим позволяет адресовать до 1 Мбайт памяти.


Тем не менее, снижающиеся цены на память делали процессор выгодным для тех применений, где требовалась обработка больших объёмов данных. Расширение адресного пространства было одним из требований к новому процессору<ref name="Morse">{{cite web
[[Изображение:8086_adress.png|thumb|right|300px|Схема, показывающая работу реального режима адресации процессора Intel 8086 и выше]]
| url = http://stevemorse.org/8086history/8086history.doc
| title = Intel Microprocessors : 8008 to 8086
| author = Stephen P. Morse et al.
| access-date = 2016-09-24
| archive-date = 2016-09-27
| archive-url = https://web.archive.org/web/20160927020441/http://www.stevemorse.org/8086history/8086history.doc
| deadlink = no
}}</ref>. В результате была выбрана компромиссная схема: исполнительный блок (EU) процессора оставлен 16-разрядным, а расширение адресного пространства сделано в блоке интерфейса шины (BIU) процессора путём реализации [[Сегментная адресация памяти|сегментной адресации памяти]], увеличивающей разрядность шины адреса до 20 бит.


Сегментная адресация памяти использует тот факт, что обращения к памяти со стороны процессора легко можно разделить на обращения к коду программы, обрабатываемым данным и [[стек]]у. Обращения к разным типам содержимого памяти отображаются на независимые области памяти в расширенном адресном пространстве — ''сегменты''. В процессоре 8086 для такого отображения адресов используются четыре 16-битных сегментных регистра:
Таким образом, память разделяется на сегменты, размером 64 Кбайт каждый, и начинающиеся с адреса, кратного 16 (граница параграфа), память в 1 Мбайт разделялась на 16 сегментов. Эти 16 сегментов называют страницами памяти. В компьютере, подобном [[IBM PC]], первые 6 страниц (A, B, C, D, E, F) памяти (верхняя память — ''upper memory'') использовались для видеопамяти и [[BIOS]]`а, это ограничивало память доступную пользователю объемом в 640 Кбайт (обычная память — ''conventional memory'').
* CS (Code Segment) — сегмент кода
* DS (Data Segment) — сегмент данных
* ES (Extra Segment) — дополнительный сегмент
* SS (Stack Segment) — сегмент стека
Каждый сегментный регистр определяет адрес начала сегмента в памяти, при этом сегменты могут совпадать или пересекаться. По умолчанию регистр CS используется при выборке инструкций, регистр SS — при выполнении операций со стеком, регистры DS и ES — при обращении к данным. В случае обращения к данным сегментный регистр по умолчанию может быть изменён путём добавления перед кодом инструкции специального префикса замены сегмента{{sfn|Гук|1997|с=13—17}}.


При этом в пределах сегмента используются 16-битные исполнительные адреса, хранящиеся в [[Счётчик команд|счётчике команд]], указателе стека либо вычисляемые в соответствии с видом [[Адресация памяти|адресации]], заданном в коде инструкции. Фактически, процессору всегда доступны 4 области памяти размером 64 Кбайт каждая. Если такой объём оказывается недостаточен, в программу приходится включать логику управления сегментными регистрами. Эта логика может существенно замедлять обращение к памяти, поэтому [[компилятор]]ы с [[Высокоуровневый язык программирования|языков высокого уровня]] для платформы x86 позволяют указывать [[Модель памяти Intel x86|модель памяти]] в соответствии с требуемыми объёмами кода и данных.
Такой [[режим адресации]] обеспечивает множество преимуществ: ёмкость памяти может составлять 1 Мбайт, хотя команды оперируют 16-битными адресами; упрощается использование отдельных областей памяти для программы, её данных и [[стека]]; упрощается разработка устройств, совместимых друг с другом.

Физический 20-битный адрес, позволяющий адресовать до 1 Мбайт памяти, получается путём сложения исполнительного адреса и значения сегментного регистра, умноженного на 16. Из-за наличия умножения на 16 сегмент всегда начинается на границе блока в 16 байт, называемого [[Параграф (единица измерения)|параграфом]]. Это может приводить к потере некоторого количества памяти, если размер используемых данных сегмента не кратен параграфу. В частности, это стало одной из причин, по которой разработчики отказались от реализации 24-битного адреса в 8086, так как размер параграфа при этом возрастал до 256 байт<ref name="Morse" />.

[[Файл:8086 adress.png|thumb|right|300px|Схема, показывающая работу реального режима адресации процессора Intel 8086 и выше]]

Возможное переполнение при вычислении физического адреса в процессоре 8086 игнорируется. Например, инструкция безусловного перехода по адресу 0010<sub>16</sub> при значении сегмента кода FFFF<sub>16</sub> выполнит переход по физическому адресу 0. Этого не происходит в старших моделях процессоров x86, например 80286, имевшем 24 адресных линии, поэтому в компьютерах IBM PC/AT для обеспечения совместимости был введён специальный вентиль Gate A20, принудительно обнуляющий бит А20 системной шины адреса.

Поскольку в старших моделях процессоров x86 были введены новые способы расширения адресного пространства, способ, используемый процессором 8086, был назван «[[Реальный режим|режимом реальной адресации]]».


=== Система команд ===
=== Система команд ===
Система команд процессора i8086 состоит из 98 команд (и более 3800 их вариаций): 19 команд передачи данных, 38 команд их обработки, 24 команд перехода и 17 команд управления процессором. Микропроцессор не содержал команды для работы с числами с плавающей запятой. Данная возможность реализовывалась отдельной микросхемой, называемой математический [[сопроцессор]], который устанавливался на материнской плате. Сопроцессор, вовсе не обязательно должен был произведен Intel (модель [[Intel_8087|i8087]]), к примеру, некоторые производители микросхем, такие как [[Weitek]], выпускали более производительные сопроцессоры, чем Intel.
Система команд процессора Intel 8086 состоит из 98 команд (и более 3800 их вариаций): 19 команд передачи данных, 38 команд их обработки, 24 команд перехода и 17 команд управления процессором. Возможны 7 режимов адресации. Микропроцессор не содержит команд для работы с числами с плавающей запятой. Данная возможность реализована отдельной микросхемой, называемой [[математический сопроцессор]], который устанавливается на материнской плате. Сопроцессор вовсе не обязательно должен был быть произведён Intel (модель [[Intel 8087]]), к примеру, некоторые производители микросхем, такие как {{iw|Weitek}}, выпускали более производительные сопроцессоры, чем Intel.


Система команд процессора Intel 8086 включает в себя несколько очень мощных строковых инструкций. Если инструкция имеет префикс REP (от [[Английский язык|англ.]] repeat, повтор), то процессор будет выполнять операции с блоками — перемещение блока данных, сравнение блоков данных, присвоение определённого значения блоку данных определённой величины, и т. д., то есть, одна инструкция 8086 с префиксом REP может выполнять 4—5 инструкций, выполняемых на некоторых других процессорах. Подобные приёмы были реализованы и в других процессорах — Zilog Z80 имел инструкции перемещения и поиска блоков, а Motorola 68000 может выполнять операции с блоками, используя всего две команды.
В микропроцессоре i8086 была использована примитивная форма [[конвейер]]ной обработки. Блок интерфейса с шиной подавал поток команд к исполнительному устройству через 6 [[байт]]овую очередь команд. Таким образом, выборка и выполнение новых команд могли происходить одновременно. Это значительно увеличивало пропускную способность процессора и лишало необходимости считывать команды из медленной памяти.


В микропроцессоре Intel 8086 используется примитивная форма [[Конвейер (процессор)|конвейерной]] обработки. Блок интерфейса с шиной подаёт поток команд к исполнительному устройству через 6-[[байт]]овую очередь команд. Таким образом, выборка и выполнение новых команд может происходить одновременно. Это значительно увеличивает пропускную способность процессора и лишает необходимости ожидать считывания команды из памяти при занятом другими операциями интерфейсе микросхемы.
== Микрокомпьютеры на основе i8086 ==
В персональных компьютерах процессор i8086 практически не использовался из-за дороговизны специализированных микросхем, которые были необходимы для работы процессора. Это поняли и в Intel, в [[1979]] году она выпускает процессор [[i8088]], у которого шина данных была 8-битной.


== Варианты микропроцессора, аналоги и конкуренты ==
Но всё же в некоторых микрокомпьютерах применялся и i8086, одним из таких является [[Mycron]] 2000 — первый коммерческий микрокомпьютер на базе i8086. Машина для обработки текстов [[IBM]] Displaywriter, [[Compaq]] DeskPro и Wang Professional Computer также использовали i8086.
Процессор выпускался в керамических и пластмассовых корпусах с 40 выводами. Были доступны версии с частотами 5, 8 и 10 МГц, обозначавшиеся как 8086, 8086-2 и 8086-1<ref>[http://datasheets.chipdb.org/Intel/x86/808x/datashts/8086/231455-005.pdf Intel 8086 16-bit HMOS Microprocessor] {{Wayback|url=http://datasheets.chipdb.org/Intel/x86/808x/datashts/8086/231455-005.pdf |date=20161022045810 }}{{ref-en}}</ref>.

Основными конкурентами микропроцессора Intel 8086 были [[Motorola]] [[68000]], [[Zilog]] [[Z8000]], чипсеты F-11 и J-11 семейства [[PDP-11]], [[MOS Technology]] [[WDC 65816/65802|65C816]]. В некоторой степени, в области военных разработок, конкурентами являлись процессоры-реализации [[MIL-STD-1750A]].

Аналогами микропроцессора Intel 8086 являлись такие разработки, как [[NEC V30]], который был на 5 % производительнее Intel 8086, но при этом был полностью с ним совместим. [[Союз Советских Социалистических Республик|Советским]] аналогом являлся микропроцессор [[К1810ВМ86]], входивший в [[Микропроцессорный комплект серии К1810|серию микросхем К1810]].

== Аппаратные режимы ==
Процессоры 8086 и 8088 могут работать в двух режимах: максимальном и минимальном{{sfn|Гук|1997|с=20}}.

''Максимальный режим'' используется в сложных многопроцессорных системах, он также необходим для работы с математическим сопроцессором 8087. В максимальном режиме для выработки сигналов управления системной шиной необходим системный контроллер 8288. В компьютерах IBM PC и PC/XT процессор Intel 8088 используется в максимальном режиме, что позволяет ему работать с математическим сопроцессором 8087, который может быть установлен в сокет на материнской плате компьютера.

''Минимальный режим'' используется в однопроцессорных системах. В этом режиме сигналы управления системной шиной процессор формирует сам.

Аппаратный режим определяется схемой включения процессора и не может быть изменён программно. Для задания режима используется вывод 33 (MN/{{overline|MX}}), который соединяется либо с источником питания, либо с общим проводом. Изменение состояния вывода 33 меняет функции восьми других выводов процессора, отвечающих за управление системной шиной и связь с другими процессорами.

== Микросхемы поддержки ==
Для создания микропроцессорной системы на основе процессоров 8086 и 8088 компанией Intel выпускались следующие микросхемы поддержки<ref name="usermanual">{{книга
|заглавие = iAPX 86/88, 186/188 User's Manual Hardware Reference
|год = 1985
|издательство = Intel Corporation
|страницы = 1—90, 1-125
|isbn = 0-917017-36-6
|ссылка = http://bitsavers.trailing-edge.com/pdf/intel/8086/210912-001_iAPX_86_88_186_188_Users_Manual_1985.pdf
|archivedate = 2016-10-19
|archiveurl = https://web.archive.org/web/20161019010054/http://bitsavers.trailing-edge.com/pdf/intel/8086/210912-001_iAPX_86_88_186_188_Users_Manual_1985.pdf
}} {{Cite web |url=http://bitsavers.trailing-edge.com/pdf/intel/8086/210912-001_iAPX_86_88_186_188_Users_Manual_1985.pdf |title=Архивированная копия |accessdate=2016-10-16 |archive-date=2016-10-19 |archive-url=https://web.archive.org/web/20161019010054/http://bitsavers.trailing-edge.com/pdf/intel/8086/210912-001_iAPX_86_88_186_188_Users_Manual_1985.pdf |deadlink=unfit }}</ref>:
* Intel 8237 — контроллер [[Прямой доступ к памяти|прямого доступа к памяти]]
* [[Intel 8259]]A — программируемый контроллер прерываний
* Intel 8284 — тактовый генератор
* Intel 8288 — системный контроллер
* Intel 8289 — арбитр системной шины [[Multibus]]
Также с процессорами могли использоваться микросхемы, ранее разработанные для процессоров 8080 и 8085<ref name="usermanual" />:
* Intel 8251 — универсальный синхронно/асинхронный последовательный приёмопередатчик
* [[Intel 8253]] — трёхканальный программируемый интервальный таймер
* [[Intel 8255]] — трёхканальный параллельный интерфейс
* Intel 8257 — контроллер прямого доступа к памяти
* Intel 8271 — контроллер гибких магнитных дисков
* Intel 8273 — контроллер протокола [[HDLC]]/SDLC
* [[Intel 8275]] — контроллер [[ЭЛТ]]-дисплея
* Intel 8279 — контроллер клавиатуры и светодиодного дисплея
* Intel 8282 — 8-битный регистр-защёлка без инверсии
* Intel 8283 — 8-битный регистр-защёлка с инверсией
* Intel 8286 — 8-битный двунаправленный шинный формирователь без инверсии
* Intel 8287 — 8-битный двунаправленный шинный формирователь с инверсией

== Микрокомпьютеры на основе Intel 8086 ==
Первоначально процессор Intel 8086 использовался в промышленных системах. Его массовому применению препятствовала довольно высокая цена — 360 долларов на момент анонса<ref>{{cite web
| title = Intel's 8086 passes the big 3-0
| author = John Sheesley
| date = 2008-06-16
| url = http://www.techrepublic.com/blog/classics-rock/intels-8086-passes-the-big-3-0/
| access-date = 2016-10-30
| archive-date = 2016-10-31
| archive-url = https://web.archive.org/web/20161031024357/http://www.techrepublic.com/blog/classics-rock/intels-8086-passes-the-big-3-0/
| deadlink = no
}}</ref>. Кроме того, для 16-разрядной подсистемы памяти, используемой процессором, обычно требовалось вдвое больше микросхем по сравнению с 8-разрядной, что увеличивало размеры, сложность и стоимость печатных плат. В связи с этим руководством Intel ещё в конце разработки Intel 8086 было принято решение о выпуске бюджетной версии<ref name="spectrum">{{статья
| заглавие = 25 Microchips That Shook the World
| издание = IEEE Spectrum
| год = 2009
| номер = 5
| issn = 0018-9235
| ссылка = http://spectrum.ieee.org/semiconductors/processors/25-microchips-that-shook-the-world
| archivedate = 2014-03-30
| archiveurl = https://web.archive.org/web/20140330043552/http://spectrum.ieee.org/semiconductors/processors/25-microchips-that-shook-the-world
}}</ref>. Процессор Intel 8088 на момент анонса стоил 124,8 доллара<ref name="CW79">{{статья
| заглавие = Intel Brings Out 8-Bit MPU featuring 16-Bit Architecture
| издание = Computerworld
| страницы = 71
| год = 1979
| том = XIII
| номер = 20
| issn = 0010-4841
| ссылка = https://books.google.ru/books?id=ouiYCe_Xw20C&pg=PA71&hl=ru#v=onepage&q&f=false
| archivedate = 2016-10-31
| archiveurl = https://web.archive.org/web/20161031085130/https://books.google.ru/books?id=ouiYCe_Xw20C&pg=PA71&hl=ru#v=onepage&q&f=false
}}</ref> и использовал 8-разрядную подсистему памяти, что делало его экономически более привлекательным. Он стал основой одного из самых известных персональных компьютеров — [[IBM PC]].

Процессор Intel 8086 применялся:
* в [[Одноплатный компьютер|одноплатном компьютере]] ISBC 86/12 с шиной [[Multibus]], анонсированном корпорацией Intel в 1978 году<ref>{{статья
| заглавие = Intel Adds 16-Bit Single Board
| издание = Computerworld
| год = 1978
| страницы = 86
| том = XII
| номер = 50
| issn = 0010-4841
| ссылка = https://books.google.ru/books?id=07X0ovA_MmEC&pg=PA86#v=onepage&q&f=false
| archivedate = 2016-10-31
| archiveurl = https://web.archive.org/web/20161031085031/https://books.google.ru/books?id=07X0ovA_MmEC&pg=PA86#v=onepage&q&f=false
}}</ref>
* в прототипе одного из первых [[портативный компьютер|портативных компьютеров]] [[Xerox NoteTaker]], представленном в 1978 году. Компьютер содержал три микросхемы Intel 8086 в качестве основного и графического процессоров, а также процессора ввода/вывода. Компьютер остался на стадии прототипа и не выпускался массово
* в одноплатном компьютере SCP200B с шиной [[S-100 (шина данных)|S-100]], выпускавшемся компанией [[Seattle Computer Products]] с ноября 1979 года
* в персональном компьютере Mycron 2000 норвежской компании Mycron, представленном в 1980 году
* в [[IBM-PC-совместимый компьютер|IBM PC совместимом]] компьютере [[Olivetti M24]], представленном в 1983 году (позже выпускался под маркой AT&T 6300). Процессор работал на частоте 8 МГц. В компьютер могли устанавливаться как 8-разрядные платы с шиной [[ISA]], так и 16-разрядные платы с разъёмом собственной конструкции, несовместимым с разъёмами [[IBM PC AT]]
* в компьютере {{нп5|Apricot PC|||}} фирмы [[Apricot Computers]], выпущенном в 1983 году
* в IBM PC совместимом компьютере Compaq Deskpro Model 1 фирмы [[Compaq]], представленном 28 июня 1984 года. Процессор работал на частоте 7,14 МГц<ref>{{Cite web |url=http://www.computinghistory.org.uk/det/7793/Compaq-Deskpro-Model-1/ |title=Compaq Deskpro Model 1 |access-date=2016-10-30 |archive-date=2016-11-09 |archive-url=https://web.archive.org/web/20161109073323/http://www.computinghistory.org.uk/det/7793/Compaq-Deskpro-Model-1/ |deadlink=no }}</ref>, в компьютер могли устанавливаться 8-разрядные платы с шиной ISA
* в моделях 25 и 30 компьютеров [[IBM Personal System/2|IBM PS/2]], представленных в 1987 году. Процессор работал на частоте 8 МГц
* в компьютерах PC1512, PC1640, PC2086, PC3086 и PC5086 фирмы [[Amstrad]]
* в компьютерах [[NEC PC-98|NEC PC-9801]] фирмы [[NEC]]
* в компьютерах [[Tandy 1000]] серий SL и RL
* в текстовом процессоре [[IBM Displaywriter System]]<ref name="InfoWorld Aug 1982">{{статья
| автор = Mark Zachmann
| заглавие = Flaws in IBM Personal Computer frustrate critic
| издание = InfoWorld
| том = 4
| номер = 33
| страницы = 57–58
| издательство = Popular Computing
| место = Palo Alto, CA
| год = 1982
| ссылка = https://books.google.com/books?id=VDAEAAAAMBAJ&pg=PA57
| issn = 0199-6649
| archivedate = 2020-08-03
| archiveurl = https://web.archive.org/web/20200803131648/https://books.google.com/books?id=VDAEAAAAMBAJ&pg=PA57
}}</ref>
* в компьютере Wang Professional Computer компании [[Wang Laboratories]]
* в оборудовании для наземного обслуживания кораблей «[[Спейс шаттл]]». [[NASA]] использовало оригинальные процессоры Intel 8086 вплоть до закрытия программы «Космическая транспортная система» в 2011 году. Такое решение было принято для предотвращения возможной [[программная регрессия|программной регрессии]], связанной с переходом на более новые версии процессоров или использования их несовершенных клонов<ref>{{cite web
| author = William J. Broad
| title = For Old Parts, NASA Boldly Goes ... on eBay
| date = 2002-05-12
| url = https://www.nytimes.com/2002/05/12/technology/ebusiness/12NASA.html?pagewanted=2
| access-date = 2017-09-28
| archive-date = 2016-06-29
| archive-url = https://web.archive.org/web/20160629175355/http://www.nytimes.com/2002/05/12/technology/ebusiness/12NASA.html?pagewanted=2
| deadlink = no
}}</ref>
* в автоматической межпланетной станции [[Lunar Prospector]]. Использовалась [[КМОП]]-версия 8086
* советский компьютер марки «[[Искра-1030]]», программно и аппаратно (но не конструктивно) совместимый с международным стандартом «[[IBM PC/XT]]»
* компьютер болгарского происхождения: [[ИЗОТ|Изот]]-1036С.


== Технические характеристики ==
== Технические характеристики ==
* Дата анонса: 8 июня 1978 года
* Дата анонса: 8 июня 1978 года
* Тактовая частота (МГц): 5 (модель 8086), 8 (модель 8086-2), 10 (модель 8086-1)
* Тактовая частота: от 4 до 16 МГц
** производительность:
* Разрядность [[регистр]]ов: 16 бит
** 5 МГц (модель 8086), при частоте 4,77 МГц ([[IBM PC]]) — 0,33 [[MIPS (быстродействие)|MIPS]]
** 8 МГц (модель 8086-2 — 0,66 MIPS)
** 10 МГц (модель 8086-1 — 0,75 MIPS)
** Приблизительные затраты времени на операции процессорных циклов (EA — время, необходимое для расчёта эффективного адреса памяти, которое варьируется от 5 до 12 циклов):
*** Суммирование: 3—4 (регистровое), (9—25) +EA — при операциях с памятью
*** Умножение без знака: 70—118 (регистровое), (76—139) +EA — при операциях с памятью
*** Умножение знаковое: 80—154 (регистровое), (86—160) +EA — при операциях с памятью
*** Деление без знака: 80—162 (регистровое), (86—168) +EA — при операциях с памятью
*** Деление знаковое: 101—184 (регистровое), (107—190) +EA — при операциях с памятью
*** Перемещение данных: 2 (между регистрами), (8—14) +EA — при операциях с памятью
* Разрядность [[регистр процессора|регистров]]: 16 бит
* Разрядность [[шина данных|шины данных]]: 16 бит
* Разрядность [[шина данных|шины данных]]: 16 бит
* Разрядность [[шина адреса|шины адреса]]: 20 бит
* Разрядность [[шина адреса|шины адреса]]: 20 бит
* Объём адресуемой памяти: 1 Мбайт
* Объём адресуемой памяти: 1 Мбайт
* Адресное пространство I/O: 64 Кбайт
* Количество транзисторов: 29 000
* Количество транзисторов: 29 000
* Техпроцесс (нм): 3000 (3 мкм)
* Техпроцесс: 3000 нм (3 мкм) HMOS, 1500 нм (1.5 мкм) HMOS-III
* Площадь кристалла (кв. мм): ~30
* Площадь кристалла: ~30 мм<sup>2</sup> (поздние версии — 16 мм<sup>2</sup> на техпроцессе HMOS-III)
* Максимальное тепловыделение: 1,75 Вт
* Максимальное тепловыделение корпуса: 1,75 Вт (фактическое потребление — 0,65 Вт); 2.5 Вт для 10-МГц версии
* Напряжение питания: +5 В
* Напряжение питания: +5 В
* Разъём: микросхема припаивалась к плате
* Разъём: DIP-40
* Корпус: 40-контактный керамический [[DIP]]
* Корпус: 40-контактный керамический или пластиковый [[DIP]], позже — 56-контактный [[QFP]] и 44-контактный [[PLCC]]
* Поддерживаемые технологии: 98 инструкций
* Поддерживаемые технологии: 98 инструкций
* Объём очереди команд: 6 байт (кэш-буфер команд)

== Эмулятор ==
Проект эмулятора процессора Intel 8086 на [[Микроконтроллер|МК]] [[STM32]]:<ref>{{Статья|ссылка=https://github.com/iliasam/fake86_to_stm32f429_port|автор=iliasam|заглавие=fake86_to_stm32f429_port|год=2022-05-01|издание=|archivedate=2022-05-20|archiveurl=https://web.archive.org/web/20220520064735/https://github.com/iliasam/fake86_to_stm32f429_port}}</ref>

== Примечания ==
{{примечания}}

== Литература ==
* {{книга
| автор = Михаил Гук
| заглавие = Процессоры Intel: от 8086 до Pentium II
| издательство = Питер
| место = СПб
| год = 1997
| страниц = 224
| isbn = 5-88782-398-4
| ref = Гук
}}

== См. также ==
* [[Intel 8087]]
* [[Режим виртуального 8086]]


== Ссылки ==
== Ссылки ==
* [http://www.cpu-collection.de/?tn=0&l0=co&l1=Intel&l2=8086 Описание и фотографии процессора Intel 8086]
* [http://www.cpu-collection.de/?tn=0&l0=co&l1=Intel&l2=8086 Описание и фотографии процессора Intel 8086]
* [http://cs.usu.edu.ru/study/chips.html#_Toc9352961 Краткое описание микропроцессора Intel 8086]
* [http://cs.usu.edu.ru/study/chips.html#_Toc9352961 Краткое описание микропроцессора Intel 8086]
* [http://www.intel.com/corporate/europe/emea/rus/country/museum/history/history.htm Как разрабатывались первые микросхемы Intel]
* [https://web.archive.org/web/20110717200651/http://www.intel.com/cd/corporate/europe/emea/rus/359724.htm Как разрабатывались первые микросхемы Intel]
* [https://github.com/copy/v86 Эмулятор x86, написанный на JavaScript]


{{Процессоры Intel}}
{{Процессоры Intel}}


<!-- анонс 8086 -->
[[Категория:x86]]
[[Категория:События 8 июня|1978]] <!-- анонс 8086 -->
[[Категория:События июня 2000|8]]


[[Категория:X86]]
[[cs:Intel 8086]]
[[Категория:Микропроцессоры фирмы Intel]]
[[de:Intel 8086]]
[[Категория:События 8 июня|1978]]
[[en:Intel 8086]]
[[Категория:Июнь 1978 года|08]]
[[es:Intel 8086 y 8088]]
[[fi:Intel 8086]]
[[fr:Intel 8086]]
[[he:8086 (מעבד)]]
[[id:Intel 8086]]
[[it:Intel 8086]]
[[ja:Intel 8086]]
[[ko:인텔 8086]]
[[ms:Intel 8086]]
[[nl:Intel 8086]]
[[pl:Intel 8086]]
[[pt:Intel 8086]]
[[sr:Intel 8086]]
[[sv:Intel 8086]]
[[zh:Intel 8086]]

Текущая версия от 04:28, 28 февраля 2024

Intel 8086
Центральный процессор
Микропроцессор Intel 8086
Микропроцессор Intel 8086
Производство с 8 июня 1978 по 1990
Разработчик Intel
Производители
Частота ЦП 4—16 МГц
Технология производства HMOS, CHMOS, 3 мкм
Наборы инструкций x86-16
Разъём
Ядра
Микропроцессор КР1810ВМ86, советский аналог Intel 8086

Intel 8086 (в 1980-85 годах известный как iAPX 86/10) — первый 16-битный микропроцессор компании Intel. Разрабатывался с весны 1976 года и выпущен 8 июня 1978 года[1]. Реализованная в процессоре архитектура набора команд стала основой широко известной архитектуры x86. Процессоры этой архитектуры стали наиболее успешной линией процессоров Intel. Современные процессоры этой архитектуры сохраняют возможность выполнять все команды этого набора.

Незначительно изменённая версия процессора с 8-битной шиной данных, выпущенная в 1979 году под названием Intel 8088, применялась в персональных компьютерах IBM PC и IBM PC/XT.

Предшественники

[править | править код]

В 1972 году Intel выпустила 8008, первый 8-битный микропроцессор. Он использовал набор инструкций, разработанный корпорацией Datapoint для программируемых компьютерных терминалов, пригодный и для универсальных процессоров. Этот процессор требовал нескольких дополнительных микросхем для использования в полноценном компьютере, отчасти потому, что использовал маленький корпус всего лишь с 18 выводами, который использовался для микросхем DRAM, производимых Intel, и соответственно не мог иметь отдельную шину адресов.

Двумя годами позже, в 1974 году, был запущен 8080, в новом, 40-выводном DIP-корпусе, первоначально разработанном для микросхем калькуляторов. Он имел отдельную шину адресов и расширенный набор инструкций, кодово- (не бинарно-) совместимый с 8008, дополненный для удобства программирования несколькими 16-битными инструкциями. Процессор Intel 8080 часто называют первым по-настоящему удобным и полезным микропроцессором. В 1977 году он был заменён на Intel 8085, с одним питающим напряжением (+5 В) вместо трёх различных на предшественнике и несколькими другими усовершенствованиями. Наиболее известными соперниками были 8-битные Motorola 6800 (1974), Microchip PIC16X (1975) (здесь наверное имеется в виду процессор General Instrument CP1600), MOS Technology 6502 (1975), Zilog Z80 (1976) и Motorola 6809 (1978).

Разработка

[править | править код]

Рынок 8-разрядных микропроцессоров в конце 1970-х годов был переполнен, и Intel, оставляя попытки закрепиться на нём, выпускает свой первый 16-битный процессор. Проект 8086 был начат в мае 1976 года и первоначально задумывался как временная замена для амбициозного и задерживающегося проекта iAPX 432 (также известного как 8800)[источник не указан 2693 дня]. Это была попытка, с одной стороны, противостоять менее запаздывавшим 16- и 32-битным процессорам других производителей (таких как Motorola, Zilog и National Semiconductor), а с другой — борьбы с угрозой от Zilog Z80 (разработанного командой под руководством ушедшего из Интел Федерико Фаджина), который стал очень успешным. Первая версия архитектуры 8086 (система команд, прерывания, работа с памятью и вводом-выводом) была разработана с середины мая до середины августа Стивеном Морзе. Потом команда разработчиков была увеличена до четырёх человек, которые представили два основных проектных документа — «8086 Architectural Specifications» и «8086 Device Specifications». При разработке не использовалось специализированных CAD-программ, а диаграммы были исполнены из текстовых символов. Использовались уже опробованные элементы микроархитектуры и физической реализации, в основном от Intel 8085.

Процессор Intel 8086 представляет собой модернизированный процессор Intel 8080, и хотя разработчики не ставили перед собой цели достичь полной совместимости на программном уровне, большинство программ, написанных для Intel 8080, способно выполняться и на Intel 8086 после перекомпиляции. Новый процессор несёт в себе множество изменений, которые позволили значительно (в 10 раз) увеличить производительность по сравнению с предыдущим поколением процессоров компании.

Регистры общего назначения
AH AL AX (primary accumulator)
BH BL BX (base, accumulator)
CH CL CX (counter, accumulator)
DH DL DX (accumulator, other functions)
Индексные регистры
SI Source Index
DI Destination Index
Указательные регистры
BP Base Pointer
SP Stack Pointer
Регистр состояния
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 (bit position)
- - - - O D I T S Z - A - P - C Флаги
Сегментные регистры
CS Code Segment
DS Data Segment
ES ExtraSegment
SS Stack Segment
Указатель команды
IP Instruction Pointer
Регистры 8086

Всего в процессоре Intel 8086 имеется 14 16-разрядных регистров: 8 регистров общего назначения (AX, BX, CX, DX), 2 индексных регистра (SI, DI), 2 указательных (BP, SP), 4 сегментных регистра (CS, SS, DS, ES), программный счётчик или указатель команды (IP) и регистр флагов (FLAGS, включает в себя 9 флагов). При этом регистры данных (AX, BX, CX, DX) допускают адресацию не только целых регистров, но и их младшей половины (регистры AL, BL, CL, DL) и старшей половины (регистры AH, BH, CH, DH), что не только позволило использовать новое на тот момент 16-разрядное ПО, но и сохранило обратную совместимость с 8-битными программами (правда, их необходимо было, по крайней мере, перекомпилировать).

Размер шины адреса был увеличен с 16 бит до 20 бит, что позволило адресовать 1 Мбайт (220 байт) памяти. Шина данных была 16-разрядной. Однако в микропроцессоре шина данных и шина адреса использовали одни и те же контакты на корпусе. Это привело к тому, что нельзя одновременно подавать на системную шину адреса и данные. Мультиплексирование адресов и данных во времени позволяет использовать всего 20 контактов корпуса, но уменьшает скорость передачи данных. Из-за того, что выполнение отдельных команд меньше цикла ввода-вывода, в процессор был введён (впервые) буфер команд на 6 байт, это позволяло выполнять, например, команды сложения параллельно командам ввода-вывода.

Работа с памятью

[править | править код]

Поскольку регистры и АЛУ процессора 8086 — 16-битные, это накладывает ограничение на операции вычисления адреса и его максимальный размер. Для вычисления адресов, превышающих 16 бит, понадобились бы расширение регистров и АЛУ и переработка системы команд, что, в свою очередь, привело бы к увеличению числа транзисторов, усложнению и удорожанию процессора.

Тем не менее, снижающиеся цены на память делали процессор выгодным для тех применений, где требовалась обработка больших объёмов данных. Расширение адресного пространства было одним из требований к новому процессору[2]. В результате была выбрана компромиссная схема: исполнительный блок (EU) процессора оставлен 16-разрядным, а расширение адресного пространства сделано в блоке интерфейса шины (BIU) процессора путём реализации сегментной адресации памяти, увеличивающей разрядность шины адреса до 20 бит.

Сегментная адресация памяти использует тот факт, что обращения к памяти со стороны процессора легко можно разделить на обращения к коду программы, обрабатываемым данным и стеку. Обращения к разным типам содержимого памяти отображаются на независимые области памяти в расширенном адресном пространстве — сегменты. В процессоре 8086 для такого отображения адресов используются четыре 16-битных сегментных регистра:

  • CS (Code Segment) — сегмент кода
  • DS (Data Segment) — сегмент данных
  • ES (Extra Segment) — дополнительный сегмент
  • SS (Stack Segment) — сегмент стека

Каждый сегментный регистр определяет адрес начала сегмента в памяти, при этом сегменты могут совпадать или пересекаться. По умолчанию регистр CS используется при выборке инструкций, регистр SS — при выполнении операций со стеком, регистры DS и ES — при обращении к данным. В случае обращения к данным сегментный регистр по умолчанию может быть изменён путём добавления перед кодом инструкции специального префикса замены сегмента[3].

При этом в пределах сегмента используются 16-битные исполнительные адреса, хранящиеся в счётчике команд, указателе стека либо вычисляемые в соответствии с видом адресации, заданном в коде инструкции. Фактически, процессору всегда доступны 4 области памяти размером 64 Кбайт каждая. Если такой объём оказывается недостаточен, в программу приходится включать логику управления сегментными регистрами. Эта логика может существенно замедлять обращение к памяти, поэтому компиляторы с языков высокого уровня для платформы x86 позволяют указывать модель памяти в соответствии с требуемыми объёмами кода и данных.

Физический 20-битный адрес, позволяющий адресовать до 1 Мбайт памяти, получается путём сложения исполнительного адреса и значения сегментного регистра, умноженного на 16. Из-за наличия умножения на 16 сегмент всегда начинается на границе блока в 16 байт, называемого параграфом. Это может приводить к потере некоторого количества памяти, если размер используемых данных сегмента не кратен параграфу. В частности, это стало одной из причин, по которой разработчики отказались от реализации 24-битного адреса в 8086, так как размер параграфа при этом возрастал до 256 байт[2].

Схема, показывающая работу реального режима адресации процессора Intel 8086 и выше

Возможное переполнение при вычислении физического адреса в процессоре 8086 игнорируется. Например, инструкция безусловного перехода по адресу 001016 при значении сегмента кода FFFF16 выполнит переход по физическому адресу 0. Этого не происходит в старших моделях процессоров x86, например 80286, имевшем 24 адресных линии, поэтому в компьютерах IBM PC/AT для обеспечения совместимости был введён специальный вентиль Gate A20, принудительно обнуляющий бит А20 системной шины адреса.

Поскольку в старших моделях процессоров x86 были введены новые способы расширения адресного пространства, способ, используемый процессором 8086, был назван «режимом реальной адресации».

Система команд

[править | править код]

Система команд процессора Intel 8086 состоит из 98 команд (и более 3800 их вариаций): 19 команд передачи данных, 38 команд их обработки, 24 команд перехода и 17 команд управления процессором. Возможны 7 режимов адресации. Микропроцессор не содержит команд для работы с числами с плавающей запятой. Данная возможность реализована отдельной микросхемой, называемой математический сопроцессор, который устанавливается на материнской плате. Сопроцессор вовсе не обязательно должен был быть произведён Intel (модель Intel 8087), к примеру, некоторые производители микросхем, такие как Weitek[англ.], выпускали более производительные сопроцессоры, чем Intel.

Система команд процессора Intel 8086 включает в себя несколько очень мощных строковых инструкций. Если инструкция имеет префикс REP (от англ. repeat, повтор), то процессор будет выполнять операции с блоками — перемещение блока данных, сравнение блоков данных, присвоение определённого значения блоку данных определённой величины, и т. д., то есть, одна инструкция 8086 с префиксом REP может выполнять 4—5 инструкций, выполняемых на некоторых других процессорах. Подобные приёмы были реализованы и в других процессорах — Zilog Z80 имел инструкции перемещения и поиска блоков, а Motorola 68000 может выполнять операции с блоками, используя всего две команды.

В микропроцессоре Intel 8086 используется примитивная форма конвейерной обработки. Блок интерфейса с шиной подаёт поток команд к исполнительному устройству через 6-байтовую очередь команд. Таким образом, выборка и выполнение новых команд может происходить одновременно. Это значительно увеличивает пропускную способность процессора и лишает необходимости ожидать считывания команды из памяти при занятом другими операциями интерфейсе микросхемы.

Варианты микропроцессора, аналоги и конкуренты

[править | править код]

Процессор выпускался в керамических и пластмассовых корпусах с 40 выводами. Были доступны версии с частотами 5, 8 и 10 МГц, обозначавшиеся как 8086, 8086-2 и 8086-1[4].

Основными конкурентами микропроцессора Intel 8086 были Motorola 68000, Zilog Z8000, чипсеты F-11 и J-11 семейства PDP-11, MOS Technology 65C816. В некоторой степени, в области военных разработок, конкурентами являлись процессоры-реализации MIL-STD-1750A.

Аналогами микропроцессора Intel 8086 являлись такие разработки, как NEC V30, который был на 5 % производительнее Intel 8086, но при этом был полностью с ним совместим. Советским аналогом являлся микропроцессор К1810ВМ86, входивший в серию микросхем К1810.

Аппаратные режимы

[править | править код]

Процессоры 8086 и 8088 могут работать в двух режимах: максимальном и минимальном[5].

Максимальный режим используется в сложных многопроцессорных системах, он также необходим для работы с математическим сопроцессором 8087. В максимальном режиме для выработки сигналов управления системной шиной необходим системный контроллер 8288. В компьютерах IBM PC и PC/XT процессор Intel 8088 используется в максимальном режиме, что позволяет ему работать с математическим сопроцессором 8087, который может быть установлен в сокет на материнской плате компьютера.

Минимальный режим используется в однопроцессорных системах. В этом режиме сигналы управления системной шиной процессор формирует сам.

Аппаратный режим определяется схемой включения процессора и не может быть изменён программно. Для задания режима используется вывод 33 (MN/MX), который соединяется либо с источником питания, либо с общим проводом. Изменение состояния вывода 33 меняет функции восьми других выводов процессора, отвечающих за управление системной шиной и связь с другими процессорами.

Микросхемы поддержки

[править | править код]

Для создания микропроцессорной системы на основе процессоров 8086 и 8088 компанией Intel выпускались следующие микросхемы поддержки[6]:

  • Intel 8237 — контроллер прямого доступа к памяти
  • Intel 8259A — программируемый контроллер прерываний
  • Intel 8284 — тактовый генератор
  • Intel 8288 — системный контроллер
  • Intel 8289 — арбитр системной шины Multibus

Также с процессорами могли использоваться микросхемы, ранее разработанные для процессоров 8080 и 8085[6]:

  • Intel 8251 — универсальный синхронно/асинхронный последовательный приёмопередатчик
  • Intel 8253 — трёхканальный программируемый интервальный таймер
  • Intel 8255 — трёхканальный параллельный интерфейс
  • Intel 8257 — контроллер прямого доступа к памяти
  • Intel 8271 — контроллер гибких магнитных дисков
  • Intel 8273 — контроллер протокола HDLC/SDLC
  • Intel 8275 — контроллер ЭЛТ-дисплея
  • Intel 8279 — контроллер клавиатуры и светодиодного дисплея
  • Intel 8282 — 8-битный регистр-защёлка без инверсии
  • Intel 8283 — 8-битный регистр-защёлка с инверсией
  • Intel 8286 — 8-битный двунаправленный шинный формирователь без инверсии
  • Intel 8287 — 8-битный двунаправленный шинный формирователь с инверсией

Микрокомпьютеры на основе Intel 8086

[править | править код]

Первоначально процессор Intel 8086 использовался в промышленных системах. Его массовому применению препятствовала довольно высокая цена — 360 долларов на момент анонса[7]. Кроме того, для 16-разрядной подсистемы памяти, используемой процессором, обычно требовалось вдвое больше микросхем по сравнению с 8-разрядной, что увеличивало размеры, сложность и стоимость печатных плат. В связи с этим руководством Intel ещё в конце разработки Intel 8086 было принято решение о выпуске бюджетной версии[8]. Процессор Intel 8088 на момент анонса стоил 124,8 доллара[9] и использовал 8-разрядную подсистему памяти, что делало его экономически более привлекательным. Он стал основой одного из самых известных персональных компьютеров — IBM PC.

Процессор Intel 8086 применялся:

  • в одноплатном компьютере ISBC 86/12 с шиной Multibus, анонсированном корпорацией Intel в 1978 году[10]
  • в прототипе одного из первых портативных компьютеров Xerox NoteTaker, представленном в 1978 году. Компьютер содержал три микросхемы Intel 8086 в качестве основного и графического процессоров, а также процессора ввода/вывода. Компьютер остался на стадии прототипа и не выпускался массово
  • в одноплатном компьютере SCP200B с шиной S-100, выпускавшемся компанией Seattle Computer Products с ноября 1979 года
  • в персональном компьютере Mycron 2000 норвежской компании Mycron, представленном в 1980 году
  • в IBM PC совместимом компьютере Olivetti M24, представленном в 1983 году (позже выпускался под маркой AT&T 6300). Процессор работал на частоте 8 МГц. В компьютер могли устанавливаться как 8-разрядные платы с шиной ISA, так и 16-разрядные платы с разъёмом собственной конструкции, несовместимым с разъёмами IBM PC AT
  • в компьютере Apricot PC[англ.] фирмы Apricot Computers, выпущенном в 1983 году
  • в IBM PC совместимом компьютере Compaq Deskpro Model 1 фирмы Compaq, представленном 28 июня 1984 года. Процессор работал на частоте 7,14 МГц[11], в компьютер могли устанавливаться 8-разрядные платы с шиной ISA
  • в моделях 25 и 30 компьютеров IBM PS/2, представленных в 1987 году. Процессор работал на частоте 8 МГц
  • в компьютерах PC1512, PC1640, PC2086, PC3086 и PC5086 фирмы Amstrad
  • в компьютерах NEC PC-9801 фирмы NEC
  • в компьютерах Tandy 1000 серий SL и RL
  • в текстовом процессоре IBM Displaywriter System[12]
  • в компьютере Wang Professional Computer компании Wang Laboratories
  • в оборудовании для наземного обслуживания кораблей «Спейс шаттл». NASA использовало оригинальные процессоры Intel 8086 вплоть до закрытия программы «Космическая транспортная система» в 2011 году. Такое решение было принято для предотвращения возможной программной регрессии, связанной с переходом на более новые версии процессоров или использования их несовершенных клонов[13]
  • в автоматической межпланетной станции Lunar Prospector. Использовалась КМОП-версия 8086
  • советский компьютер марки «Искра-1030», программно и аппаратно (но не конструктивно) совместимый с международным стандартом «IBM PC/XT»
  • компьютер болгарского происхождения: Изот-1036С.

Технические характеристики

[править | править код]
  • Дата анонса: 8 июня 1978 года
  • Тактовая частота: от 4 до 16 МГц
    • производительность:
    • 5 МГц (модель 8086), при частоте 4,77 МГц (IBM PC) — 0,33 MIPS
    • 8 МГц (модель 8086-2 — 0,66 MIPS)
    • 10 МГц (модель 8086-1 — 0,75 MIPS)
    • Приблизительные затраты времени на операции процессорных циклов (EA — время, необходимое для расчёта эффективного адреса памяти, которое варьируется от 5 до 12 циклов):
      • Суммирование: 3—4 (регистровое), (9—25) +EA — при операциях с памятью
      • Умножение без знака: 70—118 (регистровое), (76—139) +EA — при операциях с памятью
      • Умножение знаковое: 80—154 (регистровое), (86—160) +EA — при операциях с памятью
      • Деление без знака: 80—162 (регистровое), (86—168) +EA — при операциях с памятью
      • Деление знаковое: 101—184 (регистровое), (107—190) +EA — при операциях с памятью
      • Перемещение данных: 2 (между регистрами), (8—14) +EA — при операциях с памятью
  • Разрядность регистров: 16 бит
  • Разрядность шины данных: 16 бит
  • Разрядность шины адреса: 20 бит
  • Объём адресуемой памяти: 1 Мбайт
  • Адресное пространство I/O: 64 Кбайт
  • Количество транзисторов: 29 000
  • Техпроцесс: 3000 нм (3 мкм) HMOS, 1500 нм (1.5 мкм) HMOS-III
  • Площадь кристалла: ~30 мм2 (поздние версии — 16 мм2 на техпроцессе HMOS-III)
  • Максимальное тепловыделение корпуса: 1,75 Вт (фактическое потребление — 0,65 Вт); 2.5 Вт для 10-МГц версии
  • Напряжение питания: +5 В
  • Разъём: DIP-40
  • Корпус: 40-контактный керамический или пластиковый DIP, позже — 56-контактный QFP и 44-контактный PLCC
  • Поддерживаемые технологии: 98 инструкций
  • Объём очереди команд: 6 байт (кэш-буфер команд)

Проект эмулятора процессора Intel 8086 на МК STM32:[14]

Примечания

[править | править код]
  1. Microprocessor Hall of Fame. Intel. Дата обращения: 11 августа 2007. Архивировано из оригинала 6 июля 2007 года.
  2. 1 2 Stephen P. Morse et al. Intel Microprocessors : 8008 to 8086. Дата обращения: 24 сентября 2016. Архивировано 27 сентября 2016 года.
  3. Гук, 1997, с. 13—17.
  4. Intel 8086 16-bit HMOS Microprocessor Архивная копия от 22 октября 2016 на Wayback Machine (англ.)
  5. Гук, 1997, с. 20.
  6. 1 2 iAPX 86/88, 186/188 User's Manual Hardware Reference. — Intel Corporation, 1985. — С. 1—90, 1-125. — ISBN 0-917017-36-6. Архивировано 19 октября 2016 года. Архивированная копия. Дата обращения: 16 октября 2016. Архивировано 19 октября 2016 года.
  7. John Sheesley. Intel's 8086 passes the big 3-0 (16 июня 2008). Дата обращения: 30 октября 2016. Архивировано 31 октября 2016 года.
  8. 25 Microchips That Shook the World // IEEE Spectrum. — 2009. — № 5. — ISSN 0018-9235. Архивировано 30 марта 2014 года.
  9. Intel Brings Out 8-Bit MPU featuring 16-Bit Architecture // Computerworld. — 1979. — Т. XIII, № 20. — С. 71. — ISSN 0010-4841. Архивировано 31 октября 2016 года.
  10. Intel Adds 16-Bit Single Board // Computerworld. — 1978. — Т. XII, № 50. — С. 86. — ISSN 0010-4841. Архивировано 31 октября 2016 года.
  11. Compaq Deskpro Model 1. Дата обращения: 30 октября 2016. Архивировано 9 ноября 2016 года.
  12. Mark Zachmann. Flaws in IBM Personal Computer frustrate critic // InfoWorld. — Palo Alto, CA: Popular Computing, 1982. — Т. 4, № 33. — С. 57–58. — ISSN 0199-6649. Архивировано 3 августа 2020 года.
  13. William J. Broad. For Old Parts, NASA Boldly Goes ... on eBay (12 мая 2002). Дата обращения: 28 сентября 2017. Архивировано 29 июня 2016 года.
  14. iliasam. fake86_to_stm32f429_port. — 2022-05-01. Архивировано 20 мая 2022 года.

Литература

[править | править код]
  • Михаил Гук. Процессоры Intel: от 8086 до Pentium II. — СПб.: Питер, 1997. — 224 с. — ISBN 5-88782-398-4.