2.1.4. Архитектура
микропроцессора 8086/88
В
состав прибора 8086/88 входят:
-
микропрограммное устройство управления;
-
арифметико-логическое устройство;
-
программно-доступные регистры;
-
регистр-указатель команд IP
(Instruction
Pointer)
и другие внутренние регистры;
-
блок формирования адресов;
-
блок очереди команд;
-
средства для поддержки прямого доступа к
памяти.
МП
обеспечивает 24 способа (режима) адресации и
выполнение 134 различных команд. Однако
действия над числами с плавающей точкой
аппаратно не поддерживаются
и поэтому должны производиться
программно или на дополнительном
оборудовании (сопроцессоре плавающей точки).
Времена
выполнения основных команд характеризуют
следующие величины:
-
минимальный цикл шины (последовательность
микрооперации, необходимых для передачи
порции информации между МП и ПУ или ОП) – 4
такта;
-
копирование содержимого одного регистра в
другой – 2 такта;
-
сложение (при условии, что оба операнда
находятся в регистрах МП и результат также
помещается в регистр ) – 3 такта;
-
сложение (в случае, когда один операнд
находится в регистре , другой – в ОП , а
результат записывается в регистр) – 14
тактов;
-
умножение (регистровое – аналогично
третьему пункту) – 144 такта;
-
деление (аналогично) – 177 тактов.
Состав
программно-доступных
регистров МП
8086/88 представлен на рис. 2.1. Всего
имеется 13 таких
регистров, разрядность которых равна 16 (2
байта). По функциональному назначению они
делятся на:
1)
регистры общего
назначения (РОН);
2)
сегментные
регистры;
3)
регистр флагов.
РОНы
в принципе допускают произвольное
использование в программах, однако обычно
они имеют вполне определенное
назначение, соответствующее их названию.
Это связано с тем, что некоторые команды
задействуют те или иные регистры без их
явного указания; кроме того, используются
стандартные соглашения для связи
программных модулей. В РОНах
могут храниться данные
или указатели адресов (мы вскоре
рассмотрим технику формирования 20-разрядного
исполнительного адреса из 16-разрядных
указателей адресов, т.е. из номера
первого параграфа в сегменте и
относительного адреса в пределах сегмента).
Информационные
регистры стандартно
выполняют следующие функции:
1)регистр-аккумулятор
АК используется
для временного хранения данных и
промежуточных результатов;
2)
базовый регистр ВХ служит
для хранения указателя
адреса области памяти, который участвует в
формировании смещения при определенных
режимах адресации;
3)
регистр-счетчик
СХ предназначен для организации циклов
(хранит число повторений тела
цикла);
4)
регистр данных ДХ
служит в качестве
вторичного аккумулятора для временного
хранения данных и промежуточных
результатов.
Любой
информационный регистр доступен под тремя
именами, например:
АХ
- имя всего 16-разрядного регистра;
АН
- имя старшего байта регистра АХ;
АL
- имя младшего
байта регистра АХ.
Содержимое индексных регистров SI
и DI при
определенных режимах адресации (возможно,
совместно с содержимым регистра ВХ)
используется при
формировании относительного адреса
Регистры-указатели
ВР и SP используются
для работы со стеком, который служит, в
частности, для передачи аргументов
подпрограмме, а также возврата значений и
управления в основную программу. Следует
иметь в виду, что стек не организован
аппаратно, а реализуется в определенной
области ОЗУ. Содержимое регистра SP указывает
на адрес элемента в вершине стека; регистр
же ВР используется аналогично регистру ВХ (в
том числе совместно с регистрами SI и DI),
только указывает на адрес в стеке, а не в
области данных. Это необходимо для
организации произвольного доступа к
содержимому стека,
что удобно, например, для выборки из него
аргументов подпрограммы. Кроме того,
содержимым регистра ВР можно отмечать дно
стека, если его
область пересекается с областью данных.
Индексные
регистры и регистры-указатели
могут применяться и по другому назначению,
если в данный момент они не используются
стандартным образом.
Индексные регистры и регистры-указатели
могут применяться и по другому назначению,
если в данный момент они не используются
стандартным образом.
Сегментные
регистры играют
важную роль в формировании физических
адресов ОП (т.е. исполнительных адресов). В
связи с тем, что внутренние регистры МП 8086/88
16 - разрядные, напрямую можно адресовать
только 2ˆ16 = 64 Кбайт памяти (минимальная
адресуемая единица – байт), это для
реальных приложений явно недостаточно. Для
расширения адресного пространства до 1
Мбайт (поддерживается 20-разрядным адресом)
в МП 8086/88 используется сегментная
организация памяти. В соответствии с этим 1
Мбайт адресное пространство логически
делится на 64 К
параграфов по 16 байт. Поэтому для
хранения номера параграфа оказывается
достаточным 16-ти разрядов, причем этот
номер находится в сегментном регистре. Сегмент
представляет собой логическую область
памяти, состоящую из целого числа
параграфов, начинающуюся с какого-либо
параграфа и содержимое которой можно
адресовать 16-разрядным кодом.
Следовательно, размер сегмента не может
превышать64 Кбайт (4 К параграфов).
Исполнительный адрес (см. рис. 2.2)
формируется путём сложения двух
составляющих:
1)
20-разрядного адреса
сегмента, представляющего собой номер
первого параграфа в сегменте, умноженный на
16;
2)
16-разрядного относительного
ряда в рамках сегмента.
В
действительности умножение номера первого
параграфа в сегменте на 16 осуществляется
путём сдвига содержимого сегментного
регистра на 4 разряда влево. Очевидно, адрес
сегмента всегда кратен 16-ти.
Сегментную
организацию памяти иллюстрирует рис 2.3.
Сам
же относительный адрес внутри сегмента
формируется в соответствии с заданным в
команде режимом адресации из указателей
адресов, хранящихся в РОНах, и содержимого
адресного поля команды.
МП
имеет доступ одновременно к четырём
сегментам:
1)
сегменту команд (программному сегменту) CS,
содержащему последовательность команд
программы;
2)
сегменту данных DS,
хранящему данные для выполняемой программы;
3)
дополнительному
сегменту ES, обычно
используемому для запоминания
промежуточных результатов, т.е. в качестве
дополнительной рабочей памяти;
4)
сегменту стека SS, содержащему стек,
в котором размещаются значения локальных
переменных и через которых осуществляется
связь по информации между основной
программой и подпрограммой, что уже
отмечалось.
Рис. 2.2. Формирование 20-разрядного адреса
Тот
или иной сегментный регистр задаётся в
команде явно или предполагается неявно.
Различные
сегменты могут перекрываться, совпадать
или занимать непересекающиеся области
памяти. На это нет никаких ограничений. Так,
например, для простой программы все
перечисленные сегменты могут начинаться с
одного адреса. Для объёмных программ,
наоборот, может потребоваться
использование большего количества
сегментов. Поэтому система команд МП
обеспечивает смену содержимого сегментных
регистров и передачу управления из одного
программного сегмента в другой (дальнюю
передачу управления наряду с ближней).
За счет сегментирования поддерживается
также простая реализация перемещаемости
программ в ОЗУ. Однако не следует считать,
что сегментная организация памяти является
панацеей от всех бед: в действительности
именно она доставляет много хлопот
программистам.
С
точки зрения аппаратуры размер любого
сегмента составляет 64 Кбайт. Меньший же
размер может фиксироваться только в голове
программиста путём ограничения области
относительных адресов, за счет чего
неиспользуемая часть сегмента может быть
отведена под другой сегмент.
Иногда
удобно считать, что память имеет,
страничную организацию с размером
страницы, равным 64 Кбайт. Тогда старшие 4
байта 20-разрядного адреса указывают страницу,
а остальные – относительный адрес в рамках
страницы.
Как
уже говорилось, минимальной адресуемой
областью памяти является байт. Слово
содержит 2 байта, причем младший байт
слова помешается в однобайтовую ячейку с
четным номером, а старший – в следующую
однобайтовую ячейку с на единицу большим
нечетным номером ( учтите то, что байты
адресуются с нуля). Аналогично размещается
в памяти и 32-разрядное двойное
слово (сначала – младшее слово, а затем –
старшее). Это нужно всегда иметь в виду при
низкоуровневой работе с памятью.
Последний
из программно-доступных регистров – регистр
флагов FLAGS
– предназначен для фиксации различных
сигналов, вырабатываемых в МП в ходе
интерпретации команд (к примеру, знака
результата выполненной в арифметико-логическом
устройстве операции). Эта информация может
использоваться для организации
разветвлений в программе.
Регистр-указатель
команд IP (традиционное
название – счетчик
команд) служит для хранения адреса
очередной и формирования адреса следующей
инструкции (конечно, в форме относительного
адреса в пределах программного сегмента).
Блок
формирования адресов обеспечивает
аппаратное формирование исполнительного
адреса по описанным выше принципам.
Для
повышения производительности
ПЭВМ МП 8086/88 содержит блок очереди команд на
6 байт. В этот блок осуществляется
упреждающее считывание кодов команд,
текстуально следующих за выполняемой.
Подкачка очереди команд происходит
асинхронно и одновременно с выполнением
текущей команды. Это в совокупности с
большой вероятностью последовательного
выполнения команд дает ощутимый выигрыш по
быстродействию. Описанная техника не
работает только при реализации команды,
передающей управление (очередь команд
оказывается бесполезной).
Назначение
средств
поддержки прямого доступа к памяти описано
в подразделе 1.3.