МПС

Система адресации (Лекция)

 

ПЛАН ЛЕКЦИИ

1. Режимы адресации

2. Способы адресации

3. Режимы адресации операндов

4. Возможности микропроцессоров по адресации

 

1. Режимы адресации

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

Режим адресации памяти - это процедура или схема преобразования адресной информации об операнде в его исполнительный адрес.

 

2. Способы адресации

Все способы адресации памяти можно разделить на:

1) прямой, когда исполнительный адрес берется непосредственно из команды или вычисляется с использованием значения, указанного в команде, и содержимого какого-либо регистра (прямая адресация, регистровая, базовая, индексная и т.д.);

2) косвенный, который предполагает, что в команде содержится значение косвенного адреса, т.е. адреса ячейки памяти, в которой находится окончательный исполнительный адрес (косвенная адресация).

В каждой микроЭВМ реализованы только некоторые режимы адресации, использование которых, как правило, определяется архитектурой МП.

Инструкция микропроцессора может содержать следующие поля:

префикс

КОП

Mod R/M

SIB

смещение

непосредственный
операнд

0/1 байт

1/2 байта

0/1 байт

0/1 байт

0/1/2/4 байта

0/1/2/4 байта

Префикс - необязательная часть инструкции, позволяет изменить некоторые особенности ее выполнения. В команде может быть использовано сразу несколько префиксов разного типа. Типы префиксов:

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 ячеек памяти.

Для согласования адресного поля команды малой разрядности с памятью большого  объема (для решения “страничной” проблемы) в МП применяются различные виды адресации:

Прямая адресация к текущей странице. При такой адресации программный счетчик разбивается на два поля;  старшие разряды  указывают номер страницы, а младшие - адрес ячейки на странице. В адресном поле команды размещается адрес ячейки на странице,  а  адрес  страницы должен быть установлен каким-то другим способом,  например с помощью специальной команды.

Прямая адресация с использованием страничного регистра.   В МП должен быть предусмотрен программно  доступный  страничный  регистр, загружаемый специальной командой. Этот регистр добавляет к адресному полю команды несколько разрядов,  необходимых для адресации ко  всей памяти.

Прямая адресация с использованием двойных слов.  Для увеличения длины адресного поля команды под адрес отводится дополнительное слово (а если нужно, то и два).

Адресация относительно программного счетчика.  Адресное поле команды рассматривается как целое со знаком,  которое  складывается  с содержимым программного  счетчика  для  формирования исполнительного адреса. Такой способ относительной адресации создает плавающую страницу и упрощает перемещение программ в памяти.

Адресация относительно индексного регистра.  Исполнительный адрес образуется суммированием содержимого индексного регистра и адресного поля команды,  рассматриваемого как целое со знаком. Индексный регистр загружается специальными командами.

Косвенная адресация. При косвенной адресации в  адресном  поле команды указывается адрес на текущей странице,  по которому хранится исполнительный адрес. В поле команды при этом требуется дополнительный разряд - признак косвенной адресации. Исполнительный адрес может храниться не в ячейке памяти, а в регистре общего назначения. В этом случае косвенная адресация называется регистровой.