|
В начало
Система адресации
(Лекция) ПЛАН ЛЕКЦИИ 1. Режимы адресации 2. Способы адресации 3. Режимы адресации операндов 4. Возможности микропроцессоров по
адресации 1. Режимы адресации Для взаимодействия с
различными модулями в ЭВМ должны быть средства идентификации ячеек внешней
памяти, ячеек внутренней памяти, регистров МП и регистров устройств ввода/вывода. Поэтому каждой из запоминающих ячеек
присваивается адрес, т.е. однозначная комбинация бит. Количество бит определяет
число идентифицируемых ячеек. Обычно ЭВМ имеет различные адресные пространства
памяти и регистров МП, а иногда - отдельные адресные пространства регистров
устройств ввода/вывода и внутренней памяти. Кроме
того, память хранит как данные, так и команды. Поэтому для ЭВМ разработано
множество способов обращения к памяти, называемых режимами адресации. Режим адресации памяти
- это процедура или схема преобразования адресной информации об операнде в его
исполнительный адрес. 2. Способы адресации Все способы адресации памяти можно разделить на: 1) прямой, когда исполнительный адрес берется непосредственно из команды или вычисляется с использованием значения, указанного в команде, и содержимого какого-либо регистра (прямая адресация, регистровая, базовая, индексная и т.д.); 2) косвенный, который предполагает, что в
команде содержится значение косвенного адреса, т.е. адреса ячейки памяти, в
которой находится окончательный исполнительный адрес
(косвенная адресация). В каждой микроЭВМ
реализованы только некоторые режимы адресации, использование которых, как
правило, определяется архитектурой МП. Инструкция микропроцессора может содержать следующие поля:
Префикс - необязательная часть инструкции, позволяет изменить некоторые
особенности ее выполнения. В команде может быть использовано сразу несколько
префиксов разного типа. Типы префиксов: ·
командные префиксы (префиксы повторения) ·
префикс блокировки шины LOCK; ·
префиксы размера (см. далее); ·
префиксы замены сегмента. Байт "Mod R/M" определяет режим
адресации, а также иногда дополнительный код операции. Необходимость байта
"Mod R/M" зависит от типа инструкции. Байт SIB (Scale-Index-Base) определяет способ
адресации при обращении к памяти в 32-битном режиме. Необходимость байта SIB
зависит от режима адресации, задаваемого полем "Mod
R/M". Кроме того, инструкция может содержать непосредственный операнд и/или
смещение операнда в сегменте данных. На размер инструкции накладывается ограничение в 15 байт. Инструкция
большего размера может получиться при некорректном использовании большого
количества префиксов. 3. Режимы адресации операндов Если инструкция микропроцессора требует операнды, то они могут задаваться
следующими способами: ·
непосредственно в коде инструкции (только
операнд-источник); ·
в одном из регистров; ·
через порт ввода-вывода; ·
в памяти. Для совместимости с 16-битными процессорами архитектура IA-32 использует
одинаковые коды для инструкций, оперирующих как с 16-битными, так и 32-битными
операндами. Новая архитектура предусматривает также новые возможности при
указании адреса для операнда в памяти. Как процессор будет считать операнд или
его адрес, зависит от эффективного размера операнда и эффективного размера
адреса для данной команды. Эти значения определяются на основе режима работы,
бита D дескриптора используемого сегмента и наличия в инструкции определенных
префиксов. Непосредственный режим адресации
подразумевает включение операнда-источника в код инструкции. Операнд может быть
8-битным или 16-битным, если значение эффективного размера операнда - 16.
Операнд может быть 8-битным или 32-битным, если значение эффективного размера
операнда - 32. Обычно непосредственные операнды используются в арифметических
инструкциях. Регистровый режим адресации
определят операнд-источник или операнд-приемник в одном из следующих регистров:
·
регистры общего назначения (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); ·
сегментные регистры (CS, DS, SS, ES, FS, GS); ·
регистр флагов (EFLAGS
для 32-битных операндов или FLAGS для 16-битных); ·
управляющие регистры (CR0/MSW, CR2, CR3, CR4) и
регистры системных таблиц (GDTR, LDTR, IDTR, TR); ·
регистры отладки (DR0-DR7); ·
машинно-зависимые регистры (MSRs);
·
регистры сопроцессора, 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 ячеек памяти. Для согласования адресного поля команды малой разрядности с памятью
большого объема (для решения
“страничной” проблемы) в МП применяются различные виды адресации: Прямая адресация к текущей странице. При такой адресации
программный счетчик разбивается на два поля;
старшие разряды указывают номер
страницы, а младшие - адрес ячейки на странице. В адресном поле команды
размещается адрес ячейки на странице,
а адрес страницы должен быть установлен каким-то
другим способом, например с помощью
специальной команды. Прямая адресация с использованием страничного регистра. В МП должен быть предусмотрен программно доступный
страничный регистр, загружаемый
специальной командой. Этот регистр добавляет к адресному полю команды несколько
разрядов, необходимых для адресации
ко всей памяти. Прямая адресация с использованием двойных слов. Для
увеличения длины адресного поля команды под адрес отводится дополнительное
слово (а если нужно, то и два). Адресация относительно программного счетчика. Адресное поле
команды рассматривается как целое со знаком,
которое складывается с содержимым программного счетчика
для формирования исполнительного
адреса. Такой способ относительной адресации создает плавающую страницу и
упрощает перемещение программ в памяти. Адресация относительно индексного регистра. Исполнительный
адрес образуется суммированием содержимого индексного регистра и адресного поля
команды, рассматриваемого как целое со
знаком. Индексный регистр загружается специальными командами. Косвенная адресация. При косвенной адресации в адресном
поле команды указывается адрес на текущей странице, по которому хранится исполнительный адрес. В
поле команды при этом требуется дополнительный разряд - признак косвенной
адресации. Исполнительный адрес может храниться не в ячейке памяти, а в
регистре общего назначения. В этом случае косвенная адресация называется
регистровой. |
|||||||||||||