Главная – Архитектура микропроцессоров 80x86

КомпьютерПресс №1 1991. И. Вязаничев, И. Липкин.

Архитектура процессоров 80x86

Немного истории

Появление первых микропроцессоров можно смело назвать эпохальным событием второй половины XX века, которым мы обязаны фирме Intel Corporation of Santa Clara, что в знаменитой Кремниевой долине в Калифорнии.

Все началось в 1971 году, когда фирма создала микросхему 4004, сумев разместить в одном кристалле большую часть компонентов процессора. Раньше подобное устройство представляло собой весьма объемистый блок. На базе 4004 был сделан первый микрокалькулятор, по тем временам казавшийся чудом техники. Почти в то же время появился специализированный микропроцессор 8008, который предназначался для использования в терминале вычислительной машины. Несмотря на то, что эти микросхемы были встречены без всеобщего восторга, видимо из-за их высокой стоимости и традиционной инертности мышления производителей электронной аппаратуры, фирма Intel продолжила свои работы в этой области, и после объявления в 1974 году о выпуске микропроцессора второго поколения 8080, компьютерная промышленность наконец зашевелилась.

Intel 8080 был первым универсальным устройством, предназначенным не только для замены жесткой логики, но и для вычислений. Он имел довольно высокую производительность, позволял адресовать значительный объем памяти, да и спектр его возможностей был существенно шире, чем у предшественников. Все это, очевидно, послужило причиной того, что микропроцессор быстро стал общепризнанным стандартом, и многие фирмы начали выпускать его по лицензии. Стали появляться улучшенные версии, например, Z80 фирмы Zilog или V10 фирмы NEC, но структура оставалась прежней. Кстати, и сама фирма Intel в 1976 году тоже выпустила модернизированный вариант кристалла 8080,— микропроцессор 8085 — заметно улучшенный аппаратно и, кроме того, дополненный несколькими командами. В него был встроен тактовый генератор и контроллер шины, добавлен простой последовательный порт и увеличена тактовая частота.

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

Здесь хотелось бы упомянуть, что фирма Intel неоднократно делала, как сказали бы военные, "маневры тактического отступления", приводившие ее к очередному успеху. Например, в 1979 году она упростила процессор 8086, создав микросхему 8088 с 8-разрядной внешней шиной данных. Двумя годами позже фирмой IBM на основе этого кристалла был создан один из первых "настоящих" персональных компьютеров, и всемирное триумфальное шествие микропроцессоров фирмы Intel началось.

Другим "отступлением" явилось создание однокристальной микро-ЭВМ 8748, объединившей процессор, тактовый генератор, контроллер шины, постоянное запоминающее устройство для хранения программ, маленькое ОЗУ и два дополнительных параллельных порта — и все это в единственной микросхеме. Возможности этого. устройства были сильно ограничены — объем оперативной памяти составлял мизерную величину в 64 байта, да и адресуемое пространство программ и количество внешних устройств также были небольшими. Правда, несмотря ни на что, 8748 вместе с еще более простым вариантом — 8035 — быстро завоевали рынок несложных устройств управления.

Но вернемся к семейству 8086. В 1983 году Intel разработала еще два микропроцессора, представлявших собой усовершенствованные варианты 8086 и 8088 — 80186 и 80188, однако получить широкого распространения они не успели, так как в том же году появился процессор 80286, ставший серьезным шагом вперед. Всего через год на его базе был создан персональный компьютер IBM PC/AT, предоставивший в распоряжение пользователя вычислительные мощности средней ЭВМ. С появлением виртуального режима стало возможным создавать на базе 80286 системы с разделением ресурсов, что раньше было прерогативой больших машин. В микропроцессоре было также реализовано управление памятью.

О более поздних моделях процессоров фирмы Intel мы попытаемся рассказать в следующих статьях, посвященных их архитектуре.

В зависимости от набора функциональных узлов и внутренней организации микропроцессора выделяют три основных варианта: однокристальные микропроцессоры, многокристальные секционные микропроцессоры и однокристальные микро-ЭВМ.

Для однокристальных микропроцессоров характерны фиксированная разрядность и фиксированный набор команд. Кристалл содержит, как правило, арифметико-логическое устройство, блок дешифрации команд, устройство управления, устройство управления внутренними узлами и обменом информацией с внешними устройствами, а также буфера шин, согласующие внешние сигналы с внутренними.

Зачастую, в однокристальных микропроцессорах используется совмещенная шина данных и адреса, что объясняется небольшим количеством выводов корпуса микросхемы (обычно 40-48). Устройство управления реализует определенный набор команд, выдавая соответствующие управляющие сигналы различным узлам и внешним устройствам. Набор команд (фактически - логика работы устройства управления) реализован аппаратно и не может быть изменен разработчиком вычислительного устройства.

В многокристальных микропроцессорах используется несколько микросхем, каждая из которых реализует отдельный узел процессора. Как правило такими узлами являются секции АЛУ, блок микропрограммного управления, специальное постоянное запоминающее устройство, содержащее команды, представляющие собой последовательности микроинструкций процессора, а также узлы, обеспечивающие работу микропроцессора. Обычно секции АЛУ выпускаются с определенной разрядностью, но возможно параллельное соединение секций, что дает возможность получения вычислительных систем практически любой разрядности. Такие микропроцессоры применяются в мощных и быстродействующих устройствах, в частности, предназначенных для управления сложными объектами, производствами и т.д.

Однокристальные микро-ЭВМ отличаются тем, что в одной БИС реализован не только микропроцессор, но и другие узлы микроЭВМ, обычно ОЗУ, память программ, тактовый генератор, несложный контроллер прерываний, последовательные и/или параллельные порты, таймеры и т.д. Существуют специализированные однокристальные микроЭВМ для обработки аналоговых сигналов, содержащие еще и многоканальные аналогово-цифровые и цифро-аналоговые преобразователи. Однокристальные микроЭВМ - наиболее универсальные устройства, однако обычно их производительность невелика, поэтому они используются в несложных управляющих системах, в измерительных приборах, в бытовой технике, в электронных игрушках и других подобных вещах.

И.Вязаничев

Архитектура микропроцессоров

Под этим термином понимают совокупность и способ объединения узлов микропроцессора, а также его набор команд. Знание этих двух моментов дает возможность грамотно организовать интерфейс аппаратных и программных средств вычислительной системы. Считается, что минимальная архитектура микропроцессора требует наличия арифметико-логического устройства, выполняющего все операции преобразования поступающих данных, и устройства управления, обеспечивающего выполнение команд процессора и работу с внешними устройствами.

Кроме того, в микропроцессоре обязательно используются шины. Шина — это совокупность линий, по которым передаются цифровые сигналы, необходимые для обмена информацией между устройствами. В микропроцессорах фирмы Intel выделяют три шины: шину данных, шину адреса и шину управления. Кроме того, под шиной может подразумеваться стандартный набор линий, объединяющий в себе все эти три группы.

Архитектура микропроцессора i8080

8080 является однокристальным микропроцессором, работающим с 8-разрядной шиной данных и 16-разрядной шиной адреса. Управляющие сигналы передаются по шине управления. Шины отделены друг от друга. Структура Intel 8080 приведена на рис. 1.

Внутренняя структура микропроцессора 8080
Рис.1. Внутренняя структура микропроцессора 8080. Увеличить рисунок

Микропроцессор содержит внутреннюю шину данных, посредством которой происходит обмен информацией между внутренними регистрами, арифметико-логическим устройством, обрабатывающим 8-разрядные данные и передающим их через буфер на внешнюю шину данных. Кроме того, в состав 8080 входит устройство управления, буфер адресной шины, связанный с регистром команд и блок регистров. В общих чертах работа микропроцессора выглядит следующим образом: в регистре, называемом программным счетчиком, хранится адрес следующей команды, которую необходимо выполнить. Устройство управления подключает этот регистр к шине адреса (конечно, через буфер) и выдает управляющие сигналы, необходимые для чтения кода команды из памяти. На этом завершается первый такт.

В следующем такте микропроцессор проверяет состояние сигналов на входе готовности и запрос останова. При их наличии микропроцессор переходит в соответствующее состояние. В противном случае, после появления на шине управления сигналов, подтверждающих выдачу кода команды на шину данных, устройство управления подключает к ней регистр команды и записывает в нее полученный код. Это требуется потому, что команда передается только в первом машинном цикле, а сохранить ее нужно на все время выполнения команды. Из регистра команды ее код поступает в дешифратор команды и затем в устройство управления, которое в зависимости от поступившей команды либо сразу переходит к ее выполнению, либо считывает данные или адрес, расположенные сразу после кода команды и необходимые для ее выполнения. На это тратится третий такт и, если это необходимо, четвертый и пятый такты. Таким образом, вся команда выполняется за 3-5 тактов. При тактовой частоте 2 МГц это составляет 1.5-2.5 мкс.

Перед выполнением команды проверяется состояние сигнала на входе захвата шины HLD (этот сигнал отключает микропроцессор от шины, давая внешним устройствам возможность прямого доступа в память по общей шине). При его обнаружении микропроцессор переходит в состояние захвата и вырабатывает сигнал подтверждения захвата шины. После снятия сигнала HLD процессор продолжает выполнение команды. В конце машинного цикла вновь анализируется состояние входа захвата, а затем проверяется, завершено ли выполнение команды. Если нет, то микропроцессор переходит к выполнению следующего цикла команды. Это может быть цикл работы с оперативной памятью или с внешним устройством.

После выполнения каждой команды проверяется состояние входа запроса прерывания. Если этот сигнал присутствует, то текущая программа приостанавливается и на шину данных выдается сигнал "подтверждение прерывания". Затем внешний контроллер прерываний передает по шине данных команду и адрес перехода к подпрограмме обработки прерывания. По окончании обработки прерывания происходит возврат к выполнению прерванной программы.

Сигнал готовности позволяет синхронизировать работу микропроцессора с работой более медленных устройств, и, кроме того, используется для пошагового выполнения программ.

Следующим важным узлом микропроцессора является блок регистров. Он включает в себя 16-разрядный регистр для временного хранения данных WZ, шесть 8-разрядных регистров общего назначения B, C, D, E, H, L, которые могут использоваться парами в качестве 16-разрядных — BC, DE, HL (это сделано прежде всего для удобной работы с адресами). Кроме того, блок регистров содержит 16-разрядный регистр адреса команды IP (программный счетчик), 16-разрядный регистр указателя стека SP, а также 16-разрядную схему инкремента-декремента. С помощью последней изменяется, например, состояние программного счетчика после выполнения каждой следующей команды.

Еще один важный узел — регистр результата (аккумулятор), связанный с АЛУ и используемый для хранения одного из исходных операндов или результата выполнения команды.

Последний регистр — это регистр флажков. В нем записан байт, каждый бит которого содержит информацию о результате выполнения последней команды.

Архитектура микропроцессора i8086

Микропроцессор Intel 8086 — существенно отличается от i8080. В нем применена новая значительно более мощная и гибкая система команд, есть возможность адресации 1 Мбайта памяти, обращения к 65536 устройствам ввода и такому же количеству устройств вывода информации.

В i8086 имеется возможность изменения внутренней аппаратной конфигурации с помощью специального управляющего сигнала. В более простом режиме 8086 ориентирован на использование в простых вычислительных и управляющих устройствах. При этом микропроцессор сам вырабатывает сигналы управления шиной и обеспечивает прямой доступ к ней посредством контроллера Intel 8257. В режиме полной конфигурации обеспечивается работа с контроллером шины 8288, который декодирует три сигнала состояния процессора и в зависимости от них выдает семь сигналов управления шиной. Такой режим используется в мультипроцессорных системах и в сложных вычислительных устройствах, в частности, в компьютере IBM PC/XT.

Интересно организована память: хранение 16-разрядных слов осуществляется в виде отдельных байтов, причем байты, передающиеся по восьми младшим линиям шины данных (D7-D0), собраны в банк 0, а передаваемые по восьми старшим линиям — в банк 1. Объем каждого банка составляет 512 Кбайт. Таким образом, нечетные байты хранятся в банке 1, а четные. — в банке 0. Выбор банка осуществляется с помощью младшего адреса и сигнала управления старшими разрядами шины данных.

Еще одна важная особенность — возможность обработки 256 типов прерываний (от 0 до 255), в том числе есть прерывания, определяемые пользователем, и пошаговые прерывания.

Микропроцессор Intel 8086 приспособлен для работы с несколькими процессорами в одной системе, причем возможно использование как независимых процессоров, так и сопроцессоров. Отличие заключается в том, что независимый процессор выполняет свою собственную последовательность команд, а сопроцессор следит за потоком команд центрального процессора и выделяет из него "свои" команды, расширяя набор команд основного процессора и улучшая таким образом характеристики системы. Для поддержки этих режимов используются команды ESC, LOCK и XCHG, а также специальные управляющие сигналы, позволяющие разрешать конфликты доступа к общим ресурсам.

Внешние шины адреса и данных в 8086 объединены, и поэтому наличие на шине в данный момент времени информации или адреса определяется порядковым номером такта внутри цикла. Процессор ориентирован на параллельное выполнение команды и выборки следующей команды. В целом выполнение команды происходит примерно так же, как и в 8080. Команда выбирается из памяти и принимается микропроцессором в свободный регистр очереди команд, причем в то же самое время выполняется предыдущая команда. Конвейеризация команд позволяет значительно повысить быстродействие системы. При выполнении команд проверяются состояния входов запросов прерываний и захвата шины, и при необходимости выполняются соответствующие действия.

Микропроцессор i8086 состоит из трех основных частей: устройства сопряжения шины, устройства обработки и устройства управления и синхронизации.

Устройство сопряжения шины состоит из шести 8-разрядных регистров очереди команд, четырех 16-разрядных регистров адреса команды, 16-разрядного регистра команды и 16-разрядного сумматора адреса (см. рис. 2). Оно выполняет следующие функции: выбирает команды из памяти и записывает их в регистр очереди команд, вычисляет и формирует физический адрес, читает операнды из памяти или из регистров и записывает результат выполнения команд в память или в регистры.

Внутренняя структура микропроцессора 8086
Рис.2. Внутренняя структура микропроцессора 8086. Увеличить рисунок

Устройство обработки преобразует данные. Команда из очереди команд по запросу устройства обработки поступает на внутреннюю шину команд, а с нее на микропрограммное устройство управления, декодирующее ее и генерирующее соответствующие последовательности микрокоманд, необходимые для выполнения текущей операции. В отличие от первых микропроцессоров, устройство обработки в 8086 не связано с внешней шиной, а обменивается с ней информации через регистр обмена устройства сопряжения шины.

Устройство обработки содержит 16-разрядное арифметико-логическое устройство, восемь 16-разрядных регистров общего назначения и 16-разрядный регистр флагов. Регистры могут использоваться как 16-разрядные или как пары 8-разрядных (при этом их количество удваивается).

Архитектура микропроцессора i80286

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

Регистры

Как и любой процессор, Intel 80286 содержит некоторое количество ячеек памяти быстрого доступа, называемых регистрами. В состав i286 входят три набора по четыре регистра и один специальный регистр — указатель команды.

Регистры общего назначения

Первый набор включает в себя регистры общего назначения или РОН, необходимые для временного хранения тех операндов и результатов вычислений, доступ к которым постоянно повторяется в процессе выполнения программы. Использование РОН в подобных случаях существенно ускоряет работу системы за счет сокращения времени чтения/записи и пересылки данных из ОЗУ. Всего регистров общего назначения четыре, они, разумеется, 16-разрядные, но могут использоваться и как 8-разрядные (однобайтные), при этом их количество удваивается.

Функции всех РОН, в основном, идентичны, но в некоторых случаях архитектура предполагает их строгую специализацию. Например, при выполнении команд обработки строк и циклов, в одном из регистров должно храниться число, равное количеству итераций. Этот регистр выполняет роль счетчика (counter) и носит название CX. Остальные регистры выполняют функции аккумулятора (AX), базы (BX) и ячейки временного хранения данных (DX). Как мы уже знаем, каждый регистр из числа РОН может быть разделен на два однобайтных, один из которых (0-7) называется младшим (Low), а другой (7-15) — старшим (High). В соответствии с этим, каждый 8-разрядный регистр получил свое название: младшие именуются AL, BL, CL, DL, а старшие — AН, BН, CН и DH (рис. 3).

Регистры общего назначения Intel 80286
Рис.3. Регистры общего назначения

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

Режим реального адреса

Адресная шина процессора 80286 имеет ширину 16 бит, к тому же известно, что максимальное двоичное число длиной в два байта равно 216 или 64 Кбайт и, если адрес задается таким числом, то, вроде бы, пространство ОЗУ, с которым может работать процессор, не должно превышать 64 Кбайт. С другой стороны, 1 Мбайт памяти можно адресовать с помощью двоичного числа длиной 20 бит (220). Как быть?

Можно, например, воспользоваться двойным адресом, ведь в повседневной жизни нам приходится постоянно сталкиваться с многоступенчатыми адресами: мы пишем на почтовом конверте сначала название города, потом — улицы, дома и т.д. (Предположим на мгновенье, что все квартиры в СССР пронумерованы последовательно, каково придется почте в такой ситуации?) Разработчики 80286 решили проблему подобным же образом: полный адрес ячейки памяти состоит из комбинации двух 16-разрядных чисел, причем одно из них предназначили для адресации внутри некоторой области ОЗУ размером 64 К байта, а второе — для локализации этой области во всем пространстве ОЗУ. Область, внутри которой происходит адресация, называется сегментом, а адрес внутри сегмента — внутрисегментным смещением. Адрес, локализующий положение сегмента в оперативной памяти, содержится в одном из специальных сегментных регистров процессора, но он тоже 16-разрядный. Для того, чтобы при помощи этого адреса можно было перекрыть все пространство ОЗУ, со стороны младшего байта его дополняют четырьмя нулями. Например, если содержимое сегментного регистра: 0001.1101.1000.1111 (или 1D8F16) то адрес начала соответствующего сегмента будет равен: 0001.1101.1000.1111.0000 (или 1D8F016). Таким образом можно искусственно разделить всю память на сегменты, начинающиеся по адресам, кратным 1610. Предположим, что внутрисегментное смещение нашей ячейки задано числом 1001.1011.0010.0101 или 9В2516, в этом случае ее реальный адрес будет равен сумме адреса сегмента и внутрисегментного смещения: 1D8F016+9B2516 = 2701516 (рис. 4).

Формирование адресов байта или слова
Рис.4. Формирование адресов байта или слова

Выполняемая программа может обращаться к любому из четырех сегментов, именуемых: текущий сегмент кода (то есть программы), текущий сегмент данных, текущий сегмент стека и текущий дополнительный сегмент.

Теперь вернемся к регистрам.

Указательные и индексные регистры

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

Регистры SI (индекс источника) и DI (индекс приемника) называются указательными и содержат смещения в текущем сегменте данных. Регистры SP (указатель стека) и ВР (указатель базы) называются базовыми и содержат смещения в текущем сегменте стека (рис. 5). Для тех, кто забыл или не знает, напомню, что стек — это способ организации работы с оперативной памятью по принципу LIFO (Last In - First Out), что в переводе означает: "последним вошел — первым вышел", то есть слово данных, помещенное в стек последним, будет извлечено оттуда в первую очередь. Само слово стек произошло от английского stack — скирда. И действительно, область памяти, организованную в виде стека, можно сравнить со скирдой сена: последние, уложенные сверху снопы будут использованы первыми — никому не придет в голову выгребать сено из середины. Для работы со стеком необходимо знать две величины: адрес дна и адрес вершины стека. Если адрес дна — число фиксированное, то адрес вершины зависит от того, сколько байтов данных содержится в стеке. В нашем случае адрес вершины находится в регистре SP.

Указательные и индексные регистры
Рис.5. Указательные и индексные регистры

Регистры SI и DI содержат смещения, соответственно, источника и приемника при выполнении команд обработки строк MOVSB, MOVSW, LODSB, LODSW, STOSB, STOSW и команды LOOP.

Сегментные регистры

Если мы вспомним, что программа в любой момент может обратиться к одному из четырех сегментов: к текущему сегменту кода, данных, стека или к дополнительному (сегменту данных), то нас вряд ли удивит, что в состав процессора входят четыре 16-разрядных регистра, являющихся указателями адресов текущих Сегментов. Их функции строго дифференцированы, а потому каждый регистр имеет свою "профессию": CS определяет сегмент кода, DS — сегмент данных, SS — сегмент стека и ES — дополнительный сегмент (рис. 6).

Сегментные регистры
Рис.6. Сегментные регистры

Теперь для того, чтобы, к примеру, произвести выборку слова данных из стека, программе достаточно обратиться к регистрам SS и SP, сложить находящиеся в них числа по уже известному нам правилу и в качестве результата получить реальный адрес вершины стека.

Флажки

Не знаю как для вас, а для нас более привычно звучит термин "слово состояния", ведь, собственно говоря, совокупность значений флажков и определяет состояние процессора во время его работы. В самом общем случае слово состояния — это двоичное число, каждый бит которого отражает строго определенный параметр состояния устройства. Что касается 80286, то здесь биты слова состояния называются флажками, всего их девять, причем шесть из них регистрируют состояние процессора, а три — применяются для управления его работой (рис. 7).

Указатель команды и флажки
Рис.7. Указатель команды и флажки

К флажкам состояния относятся: флажок переноса CF (имеет значение равное 1 при переносе из старшего бита) флажок вспомогательного переноса AF (индицирует перенос из младших 4-х бит) флажок переполнения OF (устанавливается равным единице при выходе знакового результата за границу диапазона) флажок нуля ZF (фиксирует нулевой результат выполнения команды) флажок знака SF (фиксирует отрицательный результат выполнения команды) флажок четности PF (фиксирует четное число единиц в последнем байте, полученном в результате выполнения команды)

К флажкам управления относятся: флажок направления DF (указывает направление прохождения строк в строковых командах) флажок разрешения прерывания IF (разрешает или запрещает прерывание по входу INTR) флажок трассировки TF (переводит процессор в пошаговый режим)

В следующем номере мы расскажем вам о режимах адресации процессора i286.

И. Вязаничев, И. Липкин
КомпьютерПресс 1'91