2

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 при определенных режимах адресации (возможно, совместно с содержимым регистра ВХ) используется  при формировании относительного адреса  для обращения к памяти. Разделение относительного адреса на две составляющие (базу и индекс) осуществлено в целях повышения эффективности выполнения операций над содержимым последовательных  ячеек памяти (например, над элементами массива в цикле). Код в регистрах  SI и DI при выполнении команды может автоматически возрастать или уменьшаться в режиме автоиндексации. Регистр  SI применяется для индексации операнда, а регистр  DI -  результата.

Рис. 2.1. Программно-доступные регистры МП 8086/88

Регистры-указатели ВР и  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-разрядного адреса

 

 Рис. 2.3. Сегментная организация памяти

Тот или иной сегментный регистр задаётся в команде явно или предполагается неявно.

Различные сегменты могут перекрываться, совпадать или занимать непересекающиеся области памяти. На это нет никаких ограничений. Так, например, для простой программы все перечисленные сегменты могут начинаться с одного адреса. Для объёмных программ, наоборот, может потребоваться использование большего количества сегментов. Поэтому система команд МП обеспечивает смену содержимого сегментных регистров и передачу управления из одного программного сегмента в другой (дальнюю передачу управления наряду с ближней). За счет сегментирования поддерживается также простая реализация перемещаемости программ в ОЗУ. Однако не следует считать, что сегментная организация памяти является панацеей от всех бед: в действительности именно она доставляет много хлопот программистам.

С точки зрения аппаратуры размер любого сегмента составляет 64 Кбайт. Меньший же размер может фиксироваться только в голове программиста путём ограничения области относительных адресов, за счет чего неиспользуемая часть сегмента может быть отведена под другой сегмент.

Иногда удобно считать, что память имеет, страничную организацию с размером страницы, равным 64 Кбайт. Тогда старшие 4 байта 20-разрядного адреса указывают страницу, а остальные – относительный адрес в рамках страницы.

Как уже говорилось, минимальной адресуемой областью памяти является байт. Слово содержит 2 байта, причем младший байт слова помешается в однобайтовую ячейку с четным номером, а старший – в следующую однобайтовую ячейку с на единицу большим нечетным номером ( учтите то, что байты адресуются с нуля). Аналогично размещается в памяти и 32-разрядное двойное слово (сначала – младшее слово, а затем – старшее). Это нужно всегда иметь в виду при низкоуровневой работе с памятью.

Последний из программно-доступных регистров – регистр флагов FLAGS – предназначен для фиксации различных сигналов, вырабатываемых в МП в ходе интерпретации команд (к примеру, знака результата выполненной в арифметико-логическом устройстве операции). Эта информация может использоваться для организации разветвлений в программе.

Регистр-указатель команд IP (традиционное название – счетчик команд) служит для хранения адреса очередной и формирования адреса следующей инструкции (конечно, в форме относительного адреса в пределах программного сегмента).

Блок формирования адресов обеспечивает аппаратное формирование исполнительного адреса по описанным выше принципам.

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

Назначение  средств поддержки прямого доступа к памяти описано в подразделе 1.3.