8086

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
<<   Intel 8086   >>
Центральный процессор
I8086.jpg
Микропроцессор Intel 8086
Производство: с 8 июня 1978 по 1990
Производители:
Частота ЦП: 4—10 МГц
Технология производства:
HMOS, CHMOS, 3 мкм
Наборы инструкций: x86
Разъём: DIP40, QFP56, PLCC44
Микропроцессор КР1810ВМ86, советский аналог Intel 8086

Intel 8086 (также известный как iAPX86) — первый 16-битный микропроцессор компании Intel, разрабатывавшийся с весны 1976 года и выпущенный 8 июня 1978 года[1]. Процессор содержал набор команд, который применяется и в современных процессорах, именно от этого процессора берёт своё начало известная на сегодня архитектура x86.

Основными конкурентами микропроцессора 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.

История[править | править вики-текст]

Предшественники[править | править вики-текст]

В 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).

Разработка[править | править вики-текст]

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

Описание[править | править вики-текст]

Рынок 8-разрядных микропроцессоров в конце 1970-х годов был переполнен, и Intel, оставляя попытки закрепиться на нём, выпускает свой первый 16-битный процессор. Процессор 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-разрядных регистров: 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-разрядное ПО, но сохраняло совместимость и со старыми программами (правда, их необходимо было, по крайней мере, перекомпилировать).

Шины[править | править вики-текст]

Размер шины адреса был увеличен с 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 (повтор), то процессор будет выполнять операции с блоками — перемещение блока данных, сравнение блоков данных, присвоение определённого значения блоку данных определенной величины, и т. д., то есть, одна инструкция 8086 с префиксом REP может выполнять 4—5 инструкций, выполняемых на некоторых других процессорах. Но следует упомянуть, что подобные приёмы были реализованы и в других процессорах — Zilog Z80 имел инструкции перемещения и поиска блоков, а Motorola 68000 может выполнять операции с блоками, используя всего две команды.

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

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

Для работы процессора Intel 8086 требовался полностью новый 16-разрядный набор микросхем поддержки (шинные формирователи, мультиплексоры и демультиплексоры, интерфейсные микросхемы, набор различных контроллеров и т. п.). Так как рынок на тот момент был ориентирован на 8-разрядные микропроцессоры, то производителей производящих 16-разрядные микросхемы поддержки почти не было. Это привело к тому, что данные микросхемы если и присутствовали, то в весьма ограниченном ассортименте и зачастую имели завышенную рыночную цену. Таким образом, крайне мало производителей решились использовать процессор Intel 8086 в своих персональных компьютерах. Intel, столкнувшись с проблемой сбыта, разработала и выпустила в 1979 году процессор Intel 8088, который отличался от Intel 8086 в основном только 8-битной шиной данных. Однако, этот шаг позволил использовать совместно с Intel 8088 большой ассортимент 8-битных микросхем. На основе Intel 8088 было создано большое число персональных компьютеров, которые оставались популярными в 1970-е и 1980-е годы, а также определили популярность набора команд x86 и, соответственно, дальнейшее развитие как процессоров Intel x86, так и компьютеров на основе данной линейки микропроцессоров. Знаменитый персональный компьютер IBM PC (модель IBM 5150) — прародитель всех современных IBM PC-совместимых машин — был построен именно на Intel 8088.

Тем не менее, дальнейшее развитие 16-разрядных систем, со временем, привело к выпуску большого ассортимента 16-разрядных микросхем поддержки от различных производителей по доступным ценам. Это позволило разрабатывать дешёвые и разнообразные микрокомпьютеры на процессорах Intel 8086. Однако, к 1982 году в ассортименте Intel появились более современные и производительные процессоры с 16-разрядными шинами данных, Intel 80186 и Intel 80286, и производительные компьютеры стали строиться преимущественно на процессоре Intel 80286 и, реже, на основе Intel 80186. Но всё же в основе некоторых микрокомпьютеров использовался Intel 8086, одним из таких является Mycron 2000 — первый коммерческий микрокомпьютер на базе Intel 8086. Машина для обработки текстов IBM Displaywriter, Compaq DeskPro и Wang Professional Computer также использовали Intel 8086.

Технические характеристики[править | править вики-текст]

  • Дата анонса: 8 июня 1978 года
  • Тактовая частота: от 4 до 10 МГц
    • производительность:
    • 5 (модель 8088), при частоте 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 мкм)
  • Площадь кристалла: ~30 мм2 (по другим данным, 16 мм2)
  • Максимальное тепловыделение корпуса: 1,75 Вт (фактическое потребление — 0,65 Вт)
  • Напряжение питания: +5 В
  • Разъём: DIP-40
  • Корпус: 40-контактный керамический или пластиковый DIP, позже — 56-контактный QFP и 44-контактный PLCC
  • Поддерживаемые технологии: 98 инструкций
  • Объём очереди команд: 6 байт (кэш-буфер команд)

Примечания[править | править вики-текст]

  1. Microprocessor Hall of Fame. Intel. Проверено 11 августа 2007. Архивировано из первоисточника 6 июля 2007.
  2. 1 2 Stephen P. Morse et al. Intel Microprocessors : 8008 to 8086.
  3. Михаил Гук. Процессоры Intel: от 8086 до Pentium II. — СПб: Питер, 1997. — С. 13-17. — 224 с. — ISBN 5-88782-398-4.

См. также[править | править вики-текст]

Ссылки[править | править вики-текст]