В 1978 г. рынок 8-битных микропроцессоров был переполнен, и вместо того, чтобы продолжать борьбу на нём, фирма Intel сделала качественный шаг вперёд и выпустила первый в мире 16-битный микропроцессор. 16-битный микропроцессор Intel 8086, выпущенный 8 июня 1978 г., содержал на кристалле размером 5,5x5,5 мм около 29000 транзисторов и производился по высококачественной nМОП-технологии.Производительность процессора 8086 значительно превышает производительность его 8-битного предшественника – микропроцессора 8080 – и составляет от 330 до 750 тыс. операций в секунду.

Переход к 16-разрядным микропроцессорам - 8086 и другие аналогичной вычислительной мощности - ознаменовался качественным скачком всех основных характеристик МП: не просто увеличение разрядности,но значительное изменение архитектуры, системы команд, принципов организации структуры. Кроме показанного на Рис.1, в машину пользователя 8086 включатся память объемом 1М байт и две области портов ввода и вывода по 64К каждая.

Разработчики 8086 старались сохранить возможность преемственности программного обеспечения 8080, поэтому в составе 8086 можно выделить подмножество регистров 8080 (соответствующие подмножество сохранено и в системе команд). Помимо операций с 16-разрядными регистрами общего назначения (РОН) AX..DX, допускается обращение к каждому байту этих регистров - AL..DL, AH..DH. В некоторых командах РОНы выполняют определенные по умолчанию функции счетчиков, индексных регистров и т.п. (см.Рис.1).

16-разрядные регистры BP, SI, DI используются для образования исполнительных адресов памяти , SP - указатель стека, IP - программный счетчик (СчК), F - регистр флагов. Младший байт F полностью повторяет формат регистра признаков 8080, а старший имеет следующий формат рис.2 где:
- DF определяет направление модификации адресов массивов в командах цепочек (увеличение или уменьшение адреса);
- IF маскирует внешнее прерывание по входу INT (при IF = 1 прерывание разрешено);
- TF управляет пошаговым режимом работы микропроцессора. При TF = 1 после выполнения каждой команды автоматически формируется прерывание с вектором 4.

Адресное пространство МП определяется в 8086 разрядностью шины адреса/данных + адреса и составляет 220 = 1М байт. В этом адресном пространстве МП одновременно доступны четыре сегмента, два из которых (DS и ES) предназначены для размещения данных, CS - сегмент кода (для размещения программы) и SS - сегмент стека. Размеры сегментов определяются разрядностью логических адресов команд, данных и стека. Логические адреса команд и стека (верхушки) хранятся в 16-разрядных регистрах IP и SS соответственно, а логический адрес данных вычисляется в команде (см. ниже) и так же составляет 16 бит. Таким образом, размер каждого сегмента в 8086 составляет 64К байт. Положение сегмента в адресном пространстве (его начальный адрес) определяется содержимым одноименного сегментного регистра. Формирование физического адреса иллюстрируется схемой Рис. 3.Из этого рисунка видно, что граница сегмента в адресном пространстве может быть установлена не произвольно, а таким образом, чтобы начальный адрес сегмента был кратен 16.

По умолчанию сегментные регистры выбираются для образования физического адреса след. образом: при считывании команды по адресу IP используется CS, при обращении к данным - DS или ES, при обращению к стеку - SS. С помощью специальных приставок к команде (префикса) можно назначить для использования произвольный сегментный регистр (кроме пары CS:IP, которая не подлежит модификации). Границы сегментов могут быть выбраны т.о., что сегменты будут изолированы друг от друга, пересекаться или даже полностью совпадать. Например, если загрузить CS=SS=DS=ES=0, то все сегменты будут совпадать друг с другом и начинаться с нулевого адреса - вариант организации адресного пространства 8080.

Длина команды 8086 может составлять от 1 до 6 байт. Формат команды представлен на Рис.4.Большинство команд 8086 являются двухадресными, причем один адрес определяет регистр процессора, а другой - память или регистр. Поля команды имеют следующие назначения:
D - определяет направление передачи информации: при D = 1 REG является приемником, иначе - источником;
W - определяет длину операндов в команде: при W = 1 длина операндов составляет 16 бит (слово - word), иначе - 8 бит(байт);
REG - определяет регистр для первого операнда согласно Табл. 1.

Поля R/M и MOD определяют способ формирования адреса второго операнда, который располагается чаще всего в памяти. В Табл. 2 приведены способы формирования адресов памяти для двух значений поля MOD.В Табл.2 d8 и d16 означают соответственно 8- и 16-разрядное смещение (3 и 3+4 байты команды). При операциях с d8 осуществляется его "знаковое расширение" до 16 бит - биты 15..8 принимают значение бита 7 (знака). При значении MOD = 10 используются те же регистры, что при MOD = 01, но вместо d8 используется d16. При MOD = 11 вторым операндом команды является регистр, определяемый полем R/M согласно Табл. 1.

Таким образом, операнд в памяти может адресоваться прямо (MOD = 00, R/M = 110) или косвенно посредством содержимого базовых (BP, BX) или индексных (SI, DI) регистров, а так же их суммы. Режимы адресации спроектированы с учетом эффективной реализации языков высокого уровня. Например, к простой переменной можно обратиться в режиме прямой адресации, а к элементу массива - в режиме косвенной адресации посредством BX, SI. Режим адресации через BP предназначен для доступа к данным из сегмента стека, что удобно при реализации рекурсивных процедур и компиляторов языков высокого уровня.

Система команд насчитывает 113 базовых команд, объединенных в следующие группы.
1) Команды передачи данных:
а) между регистрами и памятью (включая стек), обмен содержимым источника и приемника;
б) ввода, вывода, табличного преобразования;
в) загрузка исполнительного адреса в РОНы, загрузка 4-байтового адресного объекта в регистры-указатели (начальный адрес сегмента и смещение в сегменте);
г) передача содержимого регистра F флагов в память, в стек и из стека.
2) Арифметические команды:
+ - × / двоичных чисел со знаком и без знаков (произведение и делимое представляются числами двойной длины),
коррекция десятичная + - упакованных двоично-десятичных чисел,
коррекция десятичная + - × / распакованных двоично-десятичных чисел.
3) Логические команды и сдвиги:
инверсия, конъюнкция, дизъюнкция, неравнозначность;
TEST - поразрядная конъюнкция операндов с установкой флагов но без занесения результатов;
сдвиги на 1 или заданное число разрядов (константа сдвига располагается в CL).
4) Команды передачи управления:
переходы, вызовы, возвраты - имеют две разновидности - внутрисегментные ("близкие") и межсегментные ("дальние").
При близких передачах загружается только IP, при дальних - IP и CS. Передачи управления могут быть прямыми (целевой адрес - в команде) или косвенными (целевой адрес вычисляется с использованием стандартных режимов адресации)
В 16 командах условных переходов проверяются отношения знаковых и беззнаковых чисел. Имеются 4 команды управления циклами, которые рассчитаны на передачу числа повторений цикла в регистре CX.
5) Команды обработки цепочек данных
Команды манипулируют последовательностями байт или слов в памяти. Время обработки цепочек этими командами гораздо меньше, чем соответствующей программной реализацией.