8086 — первый 16-разрядный микропроцессор фирмы Intel, ставший прямым предком процессоров архитектуры IA-32. Он появился в 1978 году и содержал 29 тысяч транзисторов. На следующий год вышла его модификация 8088, на базе которой был построен персональный компьютер фирмы IBM. Архитектура микропроцессора 8086 была скопирована рядом других стран, включая СССР (у нас он производился под обозначениями К1810ВМ86 и К1834ВМ86).
Основные особенности:
- кристалл содержит примерно 29 тысяч транзисторов;
- тактовая частота может достигать 10 МГц;
- 16-разрядная шина данных;
- 20-разрядная шина адреса (объём физической памяти до 1 Мбайта);
- восемь 16-разрядных регистров общего назначения, включая указатель стека;
- четыре 16-разрядных сегментных регистра;
- один режим работы, позже получивший название «реальный режим»;
- математический сопроцессор выполнен в виде отдельной микросхемы 8087 (в СССР — К1810ВМ87), в большинстве компьютеров отсутствовавшей для снижения их стоимости.
Микропроцессор 8088 (в СССР — К1810ВМ88) был абсолютно идентичен кристаллу 8086 с точки зрения программиста, не считая времени выполнения команд, но отличался схемотехнически: он имел 8-разрядную шину данных. Благодаря этому свойству 8088 можно было сравнительно легко использовать в системах, созданных ранее на базе 8-разрядного микропроцессора 8080, однако его производительность была ниже, чем у 8086, поскольку для выборки команд и доступа к данным в памяти требовалось большее количество тактов из-за вдвое более узкой шины.
Система команд микропроцессора 8086, хотя и не была совместима на уровне кодов операций с 8080, была её логическим развитием, причём у каждой команды 8080 был прямой эквивалент на 8086. Это вкупе с плохо продуманной системой расширения адресного пространства за пределы 64 Кбайт привело к созданию довольно неэффективного и неудобного набора инструкций, значительно уступавшего другим 16-разрядным микропроцессорам того времени (например, Zilog Z8000). Кроме того, инженеры Intel ухитрились при разработке 8086 допустить ошибку, из-за которой инструкция NOT, в отличие от других арифметико-логических команд, не изменяла признаки результата. Ошибку вовремя не заметили, и она вынужденно повторяется во всех последующих процессорах ради сохранения программной совместимости.