МПС
Система адресации (Лекция) ПЛАН ЛЕКЦИИ 1. Режимы адресации 2. Способы адресации 3. Режимы адресации операндов 4. Возможности микропроцессоров по адресации 1.
Режимы адресации Для взаимодействия с различными модулями
в ЭВМ должны быть средства идентификации ячеек внешней памяти, ячеек внутренней
памяти, регистров МП и регистров устройств ввода/вывода. Поэтому каждой из
запоминающих ячеек присваивается адрес, т.е. однозначная комбинация бит.
Количество бит определяет число идентифицируемых ячеек. Обычно ЭВМ имеет
различные адресные пространства памяти и регистров МП, а иногда - отдельные
адресные пространства регистров устройств ввода/вывода и внутренней памяти.
Кроме того, память хранит как данные, так и команды. Поэтому для ЭВМ
разработано множество способов обращения к памяти, называемых режимами
адресации. Режим адресации памяти - это процедура
или схема преобразования адресной информации об операнде в его исполнительный
адрес. 2. Способы
адресации Все способы адресации памяти можно разделить на: 1) прямой, когда исполнительный адрес берется непосредственно из команды или вычисляется с использованием значения, указанного в команде, и содержимого какого-либо регистра (прямая адресация, регистровая, базовая, индексная и т.д.); 2) косвенный, который предполагает, что в команде
содержится значение косвенного адреса, т.е. адреса ячейки памяти, в которой
находится окончательный исполнительный адрес (косвенная адресация). В каждой микроЭВМ реализованы только
некоторые режимы адресации, использование которых, как правило, определяется
архитектурой МП. Инструкция
микропроцессора может содержать следующие поля:
Префикс -
необязательная часть инструкции, позволяет изменить некоторые особенности ее
выполнения. В команде может быть использовано сразу несколько префиксов разного
типа. Типы префиксов: 1)
командные префиксы (префиксы повторения) 2)
префикс блокировки шины LOCK; 3)
префиксы размера (см. далее); 4)
префиксы замены сегмента. Байт "Mod
R/M" определяет режим адресации, а также иногда дополнительный код
операции. Необходимость байта "Mod R/M" зависит от типа инструкции. Байт SIB
(Scale-Index-Base) определяет способ адресации при обращении к памяти в
32-битном режиме. Необходимость байта SIB зависит от режима адресации,
задаваемого полем "Mod R/M". Кроме того,
инструкция может содержать непосредственный операнд и/или смещение операнда в
сегменте данных. На размер
инструкции накладывается ограничение в 15 байт. Инструкция большего размера
может получиться при некорректном использовании большого количества префиксов. 3. Режимы адресации
операндов Если инструкция
микропроцессора требует операнды, то они могут задаваться следующими способами:
1)
непосредственно в коде инструкции (только
операнд-источник); 2)
в одном из регистров; 3)
через порт ввода-вывода; 4)
в памяти. Для
совместимости с 16-битными процессорами архитектура IA-32 использует одинаковые
коды для инструкций, оперирующих как с 16-битными, так и 32-битными операндами.
Новая архитектура предусматривает также новые возможности при указании адреса
для операнда в памяти. Как процессор будет считать операнд или его адрес,
зависит от эффективного размера операнда и эффективного размера адреса для
данной команды. Эти значения определяются на основе режима работы, бита D
дескриптора используемого сегмента и наличия в инструкции определенных
префиксов. Непосредственный режим адресации
подразумевает включение операнда-источника в код инструкции. Операнд может быть
8-битным или 16-битным, если значение эффективного размера операнда - 16.
Операнд может быть 8-битным или 32-битным, если значение эффективного размера
операнда - 32. Обычно непосредственные операнды используются в арифметических
инструкциях. Регистровый режим адресации определят
операнд-источник или операнд-приемник в одном из следующих регистров: 1)
регистры общего назначения (EAX/AX, EBX/BX, ECX/CX,
EDX/DX, ESI/SI, ESP/SP, EBP/BP - 16-битный регистр, если эффективный размер
операнда - 16, или 32-битный регистр в противном случае) или их младшие байты
(AH, AL, BH, BL, CH, CL, DH, DL); 2)
сегментные регистры (CS, DS, SS, ES, FS, GS); 3)
регистр флагов (EFLAGS для 32-битных операндов или
FLAGS для 16-битных); 4)
управляющие регистры (CR0/MSW, CR2, CR3, CR4) и
регистры системных таблиц (GDTR, LDTR, IDTR, TR); 5)
регистры отладки (DR0-DR7); 6)
машинно-зависимые регистры (MSRs); 7)
регистры сопроцессора, MMX и XMM. В некоторых
случаях (например, в инструкциях DIV и MUL) могут использоваться пары 32-битных
(или 16-битных) регистров (например, EDX:EAX), образуя 64-битный (32-битный)
операнд. Адресация через порт ввода-вывода
подразумевает получение операнда или сохранение операнда через пространство портов ввода-вывода.
Адрес порта ввода-вывода либо непосредственно включается в код инструкции, либо
берется из регистра DX. Очень
распространенный способ адресации операнда - адресация через память. Таким образом может быть указан
операнд-источник или операнд-приемник. Следует отметить, что процессор не
позволяет одновременно задавать оба операнда через память (за исключением
некоторых цепочечных команд). Для получения
операнда из памяти процессору необходимо знать селектор сегмента и смещение в
сегменте. В некоторых командах селектор может быть указан непосредственно в
коде инструкции. В других случаях процессор может явно или неявно использовать
значение одного из сегментных регистров. Под неявным использованием сегментных
регистров подразумевается то, что в зависимости от предназначения операнда
процессор использует определенный сегментный регистр для обращения к памяти: CS
- для выборки инструкций; SS - для работы со стеком или обращения к памяти
через регистры ESP или EBP; ES - для получения адреса операнда-приемника в
цепочечных командах; DS - при всех остальных обращениях к памяти. Явное
использование сегментных регистров возможно, если в код инструкции включается
префикс смены сегмента. Указание префикса смены сегмента допустимо не для всех
команд: нельзя менять сегмент для команд работы со стеком (всегда используется
SS), для цепочечных команд можно менять сегмент только операнда-источника
(операнд-приемник всегда адресуется через ES). 4. Возможности микропроцессоров по адресации Одной
из важнейших архитектурных характеристик
МП является перечень возможных способов обращения к памяти или
видов адресации. Возможности МП
по адресации существенны с двух точек зрения. Во-первых,
большой объем памяти требует большой
длины адреса, так как n-разрядный адрес позволяет обращаться к
памяти емкостью 2n слов. Типовые 8-разрядные слова МП дают возможность непосредственно обращаться только к 256
ячейкам памяти, что явно недостаточно. Если
учесть, что обращение к памяти является наиболее часто встречающейся операцией,
то очевидно, что эффективность использования МП во многом определяется
способами адресации к памяти большого объема при малой разрядности МП. Во-вторых,
для удобства программирования желательно иметь простую систему формирования
адресов данных при работе с массивами, таблицами и указателями. Рассмотрим
способы решения этих проблем. Если
адресное поле в команде является ограниченным и
недостаточным для непосредственного обращения к любой ячейке памяти, то память
в таких случаях разбивают на страницы,
где страницей считается 2n ячеек памяти. Для
согласования адресного поля команды малой разрядности с памятью большого объема (для решения “страничной” проблемы) в
МП применяются различные виды адресации: Прямая
адресация к текущей странице. При такой адресации программный счетчик
разбивается на два поля; старшие
разряды указывают номер страницы, а
младшие - адрес ячейки на странице. В адресном поле команды размещается адрес
ячейки на странице, а адрес
страницы должен быть установлен каким-то другим способом, например с помощью специальной команды. Прямая
адресация с использованием страничного регистра. В МП должен быть предусмотрен программно доступный
страничный регистр, загружаемый
специальной командой. Этот регистр добавляет к адресному полю команды несколько
разрядов, необходимых для адресации
ко всей памяти. Прямая
адресация с использованием двойных слов. Для увеличения длины
адресного поля команды под адрес отводится дополнительное слово (а если нужно,
то и два). Адресация
относительно программного счетчика. Адресное поле команды
рассматривается как целое со знаком,
которое складывается с содержимым программного счетчика
для формирования исполнительного
адреса. Такой способ относительной адресации создает плавающую страницу и
упрощает перемещение программ в памяти. Адресация
относительно индексного регистра. Исполнительный адрес образуется
суммированием содержимого индексного регистра и адресного поля команды, рассматриваемого как целое со знаком.
Индексный регистр загружается специальными командами. Косвенная
адресация. При косвенной адресации в
адресном поле команды указывается
адрес на текущей странице, по которому
хранится исполнительный адрес. В поле команды при этом требуется дополнительный
разряд - признак косвенной адресации. Исполнительный адрес может храниться не в
ячейке памяти, а в регистре общего назначения. В этом случае косвенная адресация
называется регистровой. |
||||||||||||||