— регистр-указатель команд IP (Instruction Pointer) и другие внутренние регистры;
— блок формирования адресов;
— блок очереди команд.
МП обеспечивает 24 способа (режима) адресаций и выполнение 134 различных команд. Однако действия над числами с плавающей точкой аппаратно не поддерживаются и поэтому должны производиться программно или на дополнительном оборудовании (сопроцессоре плавающей точки).
Времена выполнения основных команд характеризуют следующие величины:
— минимальный цикл шины (последовательность микроопций, необходимых для передачи порции информации между МП и ПУ или ОП) — 4 такта;
— Копирование содержимого одного регистра в другой — 2 такта;
— сложение (при условии, что оба операнда находятся в регистрах МП и результат также помещается в регистр) --- 3 такта;
-- сложение (в случае, когда один операнд находится в регистре, а другой – в ОП, а результат записывается в регистр) – 14 тактов;
Состав программно-доступных регистров МП 8086/88 представлен на рис. 1. Всего имеется 13 таких регистров, разрядность которых равна 16(2 байта), По функциональному назначению они делятся на:
1) регистры общего назначения (РОН);
2) сегментные регистры;
3) регистр флагов.
РОНы в принципе допускают произвольное использование в программах, однако обычно они имеют вполне определенное назначение, соответствующее их названию. Это связано с тем, что некоторые команды задействуют те или иные регистры без их явного указания; кроме того, данные или указатели адресов (мы вскоре рассмотрим технику формирования 20-разрядного исполнительного адреса из 16-разрядных указателей адресов, т.е. из номера первого параграфа в сегменте и относительного адреса в пределах сегмента).
Информационные регистры стандартно выполняют следующие функции:
1) регистр-аккумулятор АХ используется для временного хранения данных и промежуточных рез-тов;
2) базовый регистр ВХ служит для хранения указателя адреса области памяти, который участвует в формировании смещения при определенных режимах адресации;
3) регистр-счетчик СХ предназначен для организации циклов (хранит число повторений тела цикла);
4) регистр данных DX служит в качестве вторичного аккумулятора для временного хранения данных и промежуточных результатов.
Любой информационный регистр доступен под тремя именами, например:
АХ -- имя всего 16-разрядного регистра;
АН – имя старшего байта регистра АХ;
AL – имя младшего байта регистра АХ.
Содержимое индексных регистров SI и DI при определенных режимах адресации (возможно, совместно с содержимым регистра ВХ) используется при формировании относительного адреса для обращения к памяти. Разделение относительного адреса на две составляющие (базу и индекс) осуществлено в целях повышения эффективности выполнения операций над содержимым последовательных ячеек памяти (например, над элементами массива в цикле). Код в регистрах SI и DI при выполнении команды может автоматически возрастать или уменьшаться в режиме автоиндексации. Регистр SI применяется для индексации операнда, а регистр DI – результата.
Регистры-указатели BP и SP используются для работы со стеком, который служит, в частности, для передачи аргументов подпрограмме, а также возврата значений и управления в основную программу. Следует иметь в виду, что стек не организован аппаратно, а реализуется в определенной области ОЗУ. Содержимое регистра SP указывает на адрес элемента вершине стека; регистр же BP используется аналогично регистру ВХ (в том числе совместно с регистрами SI и DI), только указывает на адрес в стеке, а не в области данных. Это необходимо для организации произвольного доступа к содержимому стека, что удобно, например, для выборки из него аргументов подпрограммы. Кроме того, содержимым регистра BP можно отмечать дно стека, если его область пересекается с областью данных.
Индексные регистры и регистры-указатели могут применяться и по другому назначению, если в данный момент они не используются стандартным образом.
Сегментные регистры играют важную роль в формировании физических адресов ОП (т.е. исполнительных адресов), В связи с тем, что внутренние регистры МП 8086/88 16-разрядные, напрямую можно адресовать только 2^16 = 64 Кбайт памяти (минимальная адресуемая единица – байт), этого для реальных приложений явно недостаточно. Для расширения адресного пространства до 1Мбайт (поддерживается 20-разрядным адресом) в МП 8086/88 используется сегментная организация памяти. В соответствии с этим 1-Мбайт адресное пространство логически делится на 64 К параграфовпо 16 байт. Поэтому для хранения номера параграфа оказывается достаточным 16-ти разрядов, причем этот номер содержится в сегментном регистре.
Сегмент представляет собой логическую область памяти, состоящую из целого числа параграфов, начинающуюся с какого-либо параграфа и содержимое которой можно адресовать 16-разрядным кодом. Следовательно, размер сегмента не может превышать 64 Кбайт (4 К параграфов).
Исполнительный адрес (рис. 2) формируется путем сложения двух составляющих: 1) 20-разрядного адреса сегмента, представляющего собой номер первого
параграфа в сегменте, умноженный на 16;
2) 16-разрядного относительного адреса в рамках сегмента.
В действительности умножение номера первого параграфа в сегменте на 16 осуществляется путем сдвига содержимого сегментного регистра на 4 разряда влево. Очевидно, адрес сегмента всегда кратен 16-ти.
Сегментную организацию памяти иллюстрирует рис. 3.
Сам же относительный адрес внутри сегмента формируется в соответствии с заданным в команде режимом адресации из указателей адресов, хранящихся в РОНах, и содержимого адресного поля команды.
МП имеет доступ к четырем сегментам:
1) сегменту команд (программному сегменту) CS, содержащему последовательность команд программы;
2) сегменту данных DS, хранящему данные для выполнения команды;
3) дополнительному сегменту ES, обычно используемому для запоминания промежуточных результатов, т.т. в кач-ве дополнительной рабочей памяти;
4) сегменту стека SS, содержащему стека, в котором размещаются значения локальных переменных и через который осуществляется связь по информации между основной программой и подпрограммой, что уже отмечалось.
Тот или иной сегментный регистр задается в команде явно или предполагается неявно. Различные сегменты могут перекрываться, совпадать или занимать непересекающиеся области памяти. На это нет никаких ограничений. Так, например, для простой программы все перечисленные сегменты могут начинаться с одного адреса. Для объемных программ, наоборот, может потребоваться использование большего кол-ва сегментов, поэтому система команд МП обеспечивает смену содержимого сегментных регистров и передачу управления из одного программного сегмента в другой (дальнюю передачу управления наряду с ближней), За счет сегментирования поддерживается также простая реализация перемещаемости программ в ОЗУ. Однако не следует считать, что сегментная организация памяти является панацеей от всех бед: в действительности именно она доставляет много хлопот программистам.
С точки зрения аппаратуры размер любого сегмента составляет 64 Кбайт. Меньший же размер может фиксироваться только в голове программиста путем ограничения области относительных адресов, за счет чего используемая часть сегмента может быть отведена под другой сегмент.
Иногда удобно считать, что память имеет страничную организация с размером страницы, равным 64 Кбайт. Тогда старшие 4 бита 20-разрядного адреса указывают
, а остальные – относительный адрес в рамках страницы.
Как уже говорилось, минимальной адресуемой областью памяти является байт. Слово содержит 2 байта, причем младший байт слова помещается в однобайтовую ячейку с четным номером, а старший – в следующую однобайтовую ячейку с на единицу большим нечетным номером (учтите то, что байты адресуются с нуля). Аналогично размещается в памяти и 32-разрядное двойное слово (сначала — младшее слово, а затем – старшее) Это нужно всегда иметь в виду при низкоуровневой работе с памятью.
Последний из программно-доступных регистров – регистр флагов FLAGS – предназначен для фиксации различных сигналов, вырабатываемых в МП в ходе интерпретации команд (к примеру, знака рез-та выполненной в АЛУ операции), Эта информация может использоваться для организации ветвлений в программе.
Регистр-указатель команд IP (традиционное название – счетчик команд) служит для хранения адреса очередной и формирования адреса следующей инструкции (конечно, в форме относительного адреса в пределах программного сегмента).
Блок формирования адресов обеспечивает аппаратное формирование исполнительного адреса по описанным выше принципам.
Для повышения производительности ПЭВМ МП 8086/88 содержит блок очереди команд на 6 байт. В этот блок осуществляется упреждающее считывание кодов команд, текстуально следующих за выполняемой. Подкачка очереди команд производит асинхронно и одновременно с выполнением текущей команды. Это в совокупности с большой вероятностью последовательного выполнения команд дает ощутимый выигрыш по быстродействию Описанная техника не работает только при реализации команды, передающей управление (очередь команд оказывается бесполезной).
Назначение средств поддержки прямого доступа к памяти (дописать из (1.3)
Параграф 0
Параграф 1
Сегмент из k
параграфов
Адрес сегмента
Относительный адрес
Параграф n
Параграф n + k
Параграф n + k + 1
Параграф 64K - 1
Рис. 3. Сегментная организация памяти
АХ
АН
AL
аккумулятор
информа-ционные регистры
Регистры общего назначения
BX
BH
BL
база
CX
CH
CL
счетчик
DX
DH
DL
индекс
SI
Индекс источника
Индексные регистры и регистры-указатели
DI
Индекс приемника
BP
Указатель базы
SP
Указатель стека
SS
Сегмент стека
Сегментные регистры
DS
Сегмент данных
ES
Дополнительный сегмент
CS
Сегмент команд
FLAGS
Регистр флагов
Рис. 1. Программно-доступные регистры МП 8086/88
Страничная организация памяти —организация, при которой адресное пространство памяти разбивается на малые участки-страницы. Используется для управления памятью в системах, работающих в защищенном режиме. Как правило, такая организация памяти подразумевает пейджинг (механизм виртуальной памяти, при котором страницы вытесняются на диск или «подкачиваются» с диска).
Стек —среда для размещения данных для возврата из подпрограмм, а также их аргументов и автоматических данных. Все это может потребовать достаточно большого размера стека. Как правило, программист может определять размер стека в программе.
Защищенный режим —режим работы процессора Intel 386, при котором он выполняет множество проверок корректности обращений к памяти, вызовов функций, доступа к портам ввода-вывода и т.д. Такая защищенность позволяет ОС-е обрабатывать ошибочные операции. Для того, чтобы иметь возможность использовать все адресное пространство и преимущества виртуальной памяти 386 процессора, приложение должно работать в защищенном режиме.
Виртуальный реальный режим —режим виртуального процессора. Это режим реализуется в рамках защищенного режима (процессор может переключиться в виртуальный режим только из защищенного режима). В вирт.режиме процессор способен выполнять программы, составленные для процессора i8080, находясь в защищенном режиме и используя аппаратные средства защищенного режима: мультизадачность, изолирование адресных пространств отдельных задач друг от друга, страничная виртуальная память.
Реальный режим — режим работы процессора Intel 80386, совместимый с процессором Intel 8086. В реальном режиме невозможны доступ к виртуальному адресному пространству процессора 386 или такие возможности, как замещение страниц по требованию.