Автор работы: Пользователь скрыл имя, 23 Октября 2011 в 17:51, лекция
Высокопроизводительный 32-х разрядный микропроцессор 80i86 ориентирован на эффективное выполнение программ в среде многозадачных ОС (типа Windows). Микропроцессор имеет 32-разрядные регистры и 32-х разрядные раздельные шины адреса и данных.
Информация, хранящаяся в каждой ячейке БУП, представляется пятью полями:
Переупорядочивание команд
Порядок выдачи команд на исполнение может отличаться от порядка, Предписанного программой. Поэтому необходимо обеспечить команды корректными операндами и правильную последовательность занесения результатов в регистры АРФ. Частично это решается за счет переименования регистров, а также путем переупорядочивания команд.
В основе переупорядочивания команд лежит использование окна команд, т.е. буферной памяти, куда помещаются все команды, прошедшие декодирование. Окно команд обеспечивает отсрочку передачи команд на исполнение до момента готовности операндов, а также нужную очередность завершения команд и загрузки их результатов в регистры АРФ. Окно команд может быть двух видов: централизованное и распределенное.
Централизованное окно команд реализуется в виде табло (scoreboard). Табло представляет собой буферное запоминающее устройство, в котором хранится несколько последних извлеченных из памяти и декодированных команд, а также информация, необходимая для исполнения этих команд. Функциями табло является выявление команд, для исполнения которых уже доступны все необходимые операнды и ресурсы, и выдача таких команд на исполнение в соответствующие функциональные блоки. Табло можно рассматривать как систему предварительной диспетчеризации команд, наделенную функциями контроля выполнения команд.
Все извлеченные из памяти команды после их декодирования и переименования регистров записываются в табло, с соблюдением порядка их следования в программе. Физически табло реализуется на основе ассоциативной памяти, в которой каждая команда занимает одну ячейку, состоящую из следующих полей:
Табло работает совместно с буфером переименования (БУП). Каждая команда программы после декодирования и переименования регистров записывается в свободную ячейку табло. Дешифрированный код операции команды помещается в поле операции. Если результат выполнения команды должен быть записан в регистр, то в поле результата табло записывается номер ячейки БУП, в которой находится последняя ссылка на данный регистр. После этого заполняются остальные поля табло. Процессор производит поиск операндов сначала в аппаратном регистровом файле (АРФ). Если бит достоверности (ЗD) регистра операнда в АРФ установлен в 0, то это значит, что операнда нет в АРФ, и его следует искать в БУП. Для нахождения операнда в БУП, выполняется операции ассоциативного поиска ячейки БУП, которая в поле RGr содержит номер искомого логического регистра. Если такая ячейка найдена в БУП, то проверяются значения битов достоверности ЗD и последнего переименования ПП. При единичном значении этих битов, т.е. при ЗD=ПП=1, требуемое значение операнда выбирается из буфера переименования БУП и записывается в поле операнда табло. Поле достоверности ЗD, соответствующее найденному операнду в табло при этом устанавливается в единицу.
Если
значение искомого операнда
Команда
выбирается из табло и передается
на исполнение после того, как будут заполнены
поля операндов команды в табло,
а необходимый для исполнения команды
функциональный блок ФБ свободен.
После того, как команда выполнена в
ФБ, ее результат записывается в ту ячейку
БУП, на которую указывает поле результата
табло. Одновременно, полученный результат
записывается в поле операнда тех
команд табло, которые в поле операнда
содержат ссылку на ячейку БУП, в которую
только что был записан результат выполнения
команды. При записи полученного результата
в табло значение бита достоверности
ЗD, соответствующего записанному результату,
устанавливается в единицу. После этого
выполненная команда удаляется из табло,
уступая место новой команде программы.
Удаление команды из табло является основанием
для перезаписи полученного результата
из БУП в регистр АРФ, после чего
соответствующая запись удаляется из
БУП.
ЛАБОРАТОРНЫЕ РАБОТЫ
Размещение байт и слов в памяти
Память логически организована как одномерный массив байт, каждый из которых, имеет 20-битовый физический адрес в диапазоне от 00000 – до FFFFF. Любые два смежных байта в памяти могут рассматриваться как одно 16-ти разрядное слово. Младший байт слова всегда имеет меньший адрес, а старший – больший адрес. Адресом слова считается адрес его младшего байта.
Сегментация памяти и вычисление адресов
Пространство памяти емкостью 1Мбайт рассматривается как набор сегментов, определяемых программным путем. Сегмент состоит из смежных ячеек памяти, и является независимой и отдельно адресуемой единицей памяти емкостью 64 Кбайт. Каждому сегменту программой назначается начальный (базовый) адрес, являющийся адресом первого байта сегмента в пространстве памяти. Начальные адреса четырех сегментов, выбранных в качестве текущих, записываются в сегментные регистры CS, DS, SS, ES.
Сегментные регистры
Регистр CS – сегментный программный (кодовый) регистр;
DS – регистр для обращения к сегменту данных;
SS – регистр для обращения к сегменту стека;
ES – регистр для обращения к дополнительным данным.
Для обращения к командам и данным, находящимся в других сегментах, необходимо изменить содержимое сегментных регистров, что позволяет использовать все пространство памяти. Сегментные регистры инициализируются в начале программы путем засылки в них соответствующих констант.
В сегментном регистре хранится 16 старших разрядов 20-битового начального адреса сегмента. Четыре младших бита адреса принимаются равными нулю и дописываются справа к содержимому сегментного регистра при вычислении физических адресов ячеек памяти. Поэтому начальные адреса сегментов всегда кратны 24 =16. Сегменты могут быть соседними (смежными), неперекрывающимися, частично или полностью перекрывающимися. Физическая ячейка памяти может принадлежать одному или нескольким сегментам.
Физический адрес ячейки памяти представляет собой 20-ти битовое число в диапазоне 00000 – FFFFF, которое однозначно определяет положение каждого байта в пространстве памяти емкостью 1Мбайт.
Логический адрес ячейки памяти состоит из двух 16-ти битовых без знаковых значений: начального адреса сегмента, который называется базой, и внутрисегментного смещения EA, которое определяет расстояние от начала сегмента до адресуемой ячейки. Для вычисления физического адреса база сегмента сдвигается влево на 4 разряда и суммируется со смещением EA.
Смещение ЕА – эффективный адрес, вычисляемый в соответствии с заданным способом адресации.
Сегментная структура памяти обеспечивает возможность создания позиционно независимых или динамически перемещаемых программ, что необходимо в мульти программной среде. Это позволяет произвольно перемещать программу в адресном пространстве памяти, изменяя только содержимое сегментных регистров.
Стек
организуется в ОЗУ по принципу скользящей
вершины и его положение в ОЗУ определяется
содержимым регистров SS (база) и SP
(смещение). Регистр SS хранит базовый адрес
текущего сегмента стека, а регистр SP указывает
на вершину стека, т.е. содержит смещение
вершины стека в стековом сегменте. При
каждом обращении к стеку пересылается
одно слово, причем содержимое SP изменяется
автоматически: при записи в стек слова
содержимое SP уменьшается на два, а при
чтении из стека – увеличивается на два.
Регистры микропроцессора и форматы команд
Регистры общего назначения (РОНы) разбиты на две группы:
Команды могут адресовать один или два операнда. В двухоперандных командах один из операндов должен обязательно располагаться в регистре, поскольку имеются команды типа регистр-регистр, регистр-память, память-регистр, но команды типа память-память отсутствуют, за исключением команд пересылки цепочки байт или слов.
Формат двухоперандной (двухадресной) команды имеет следующий вид:
Первый байт команды содержит код операции COP и два однобитовых поля:
d – направление передачи, w – длина операнда.
При d=1 осуществляется передача операнда или результата операции в регистр, который определяется полем reg второго байта команды.
При d=0 осуществляется передача операнда или результата из адресуемого полем reg регистра.
Поле w идентифицирует тип (разрядность) операндов:
при w=1 команда оперирует словом, состоящим из двух байт;
при w=0 команда оперирует одним байтом.
Второй байт, называемый постбайтом, определяет участвующие в операции регистры (reg) или регистр и ячейку памяти (поле r/m).
поле md – определяет режим;
поле reg – задает регистр;
поле r/m – указывает либо регистр (r) либо память(m). (m - от memory)
Поле reg определяет операнд, который обязательно находится в одном из регистров микропроцессора и условно считается вторым операндом. Поле r/m определяет операнд, который может находиться либо в регистре, либо в памяти и условно считается первым.
Поле reg используется только для указания регистра в двухоперандных командах. Если в команде один операнд, то он идентифицируется полем r/m, а поле reg отсутствует. Вместо поля reg в этом случае используется расширение кода операции.