[ Тематический план ] [ Режимы адресации ] [ 1 ] 


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

Для конспекта

Основная функция любого процессора, ради которой он и создается, — это выполнение команд. Система команд, выполняемых процессором, представляет собой нечто подобное таблице истинности логических элементов или таблице режимов работы более сложных логических микросхем. То есть она определяет логику работы процессора и его реакцию на те или иные комбинации внешних событий.

Написание программ для микропроцессорной системы — важнейший и часто наиболее трудоемкий этап разработки такой системы. А для создания эффективных программ необходимо иметь хотя бы самое общее представление о системе команд используемого процессора. Самые компактные и быстрые программы и подпрограммы создаются на языке Ассемблер, использование которого без знания системы команд абсолютно невозможно, ведь язык Ассемблер представляет собой символьную запись цифровых кодов машинного языка, кодов команд процессора. Конечно, для разработки программного обеспечения существуют всевозможные программные средства. Пользоваться ими обычно можно и без знания системы команд процессора. Чаще всего применяются языки программирования высокого уровня, такие как Паскаль и Си. Однако знание системы команд и языка Ассемблер позволяет в несколько раз повысить эффективность некоторых наиболее важных частей программного обеспечения любой микропроцессорной системы — от микроконтроллера до персонального компьютера.

Каждая команда, выбираемая (читаемая) из памяти процессором, определяет алгоритм поведения процессора на ближайшие несколько тактов. Код команды говорит о том, какую операцию предстоит выполнить процессору и с какими операндами (то есть кодами данных), где взять исходную информацию для выполнения команды и куда поместить результат (если необходимо). Код команды может занимать от одного до нескольких байт, причем процессор узнает о том, сколько байт команды ему надо читать, из первого прочитанного им байта или слова. В процессоре код команды расшифровывается и преобразуется в набор микроопераций, выполняемых отдельными узлами процессора. Но разработчику микропроцессорных систем это знание не слишком важно, ему важен только результат выполнения той или иной команды.

Решить проблему сокращения разрядности команды только за счет сокращения количества указываемых в команде операндов и применения регистровой памяти невозможно. Этой же цели служит использование различных способов адресации операндов. Кроме того, применение нескольких способов адресации повышает гибкость программирования, так как в каждом конкретном случае позволяет обеспечить наиболее рациональный способ доступа к информации в памяти.

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

К основным способам адресации относятся следующие: прямая, непосредственная, косвенная, относительная.

Прямая адресация . Физический адрес операнда совпадает с кодом в адресной части команды ( рис. 1). Формальное обозначение:

Операнд i = (А i ) ,

где А i – код, содержащийся в i-м адресном поле команды.


Рис. 1. Прямая адресация

Выше при описании способов кодирования команд и расчете длины адресного поля предполагалось использование именно этого способа адресации .

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

Непосредственная адресация . В команде содержится не адрес операнда, а непосредственно сам операнд ( рис. 2):

Операнд i = А i .


Рис. 2. Непосредственная адресация

Непосредственная адресация позволяет повысить скорость выполнения операции, так как в этом случае вся команда, включая операнд, считывается из памяти одновременно и на время выполнения команды хранится в процессоре в специальном регистре команд ( РК ). Однако при использовании непосредственной адресации появляется зависимость кодов команд от данных, что требует изменения программы при каждом изменении непосредственного операнда.

Косвенная адресация ( рис. 3). Адресная часть команды указывает адрес ячейки памяти ( рис. 3,a) или номер регистра ( рис. 3,б ), в которых содержится адрес операнда:
Операнд i = ((А i )) .


Рис. 3. Косвенная адресация

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

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

Косвенная адресация не применяется по отношению к операндам, находящимся в регистровой памяти.

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

Относительная адресация . Этот способ используется тогда, когда память логически разбивается на блоки, называемые сегментами. В этом случае адрес ячейки памяти содержит две составляющих: адрес начала сегмента (базовый адрес) и смещение адреса операнда в сегменте. Адрес операнда определяется как сумма базового адреса и смещения относительно этой базы:

Операнд i = (база i + смещение i ) .

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

Рассмотрим два примера.

Адресное поле команды состоит из двух частей ( рис. 4): в одной указывается номер регистра, хранящего базовое значение адреса (начальный адрес сегмента), а в другом адресном поле задается смещение, определяющее положение ячейки относительно начала сегмента. Именно такой способ представления адреса обычно и называют относительной адресацией .

Рис. 4. Относительная адресация Первая часть адресного поля команды также определяет номер базового регистра, а вторая содержит номер регистра, в котором находится смещение ( рис. 5). Такой способ адресации чаще всего называют базово-индексным.

Рис. 5. Базово-индексная адресация

Главный недостаток относительной адресацией – большое время вычисления физического адреса операнда. Но существенное преимущество этого способа адресации заключается в возможности создания "перемещаемых" программ – программ, которые можно размещать в различных частях памяти без изменения команд программы. То же относится к программам, обрабатывающим по единому алгоритму информацию, расположенную в различных областях ЗУ. В этих случаях достаточно изменить содержимое базового адреса начала команд программы или массива данных, а не модифицировать сами команды. По этой причине относительная адресация облегчает распределение памяти при составлении сложных программ и широко используется при автоматическом распределении памяти в мультипрограммных вычислительных системах.

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

Таблица 11.1.
Критерий Адресация
Прямая Косвенная Относительная Базово-индексная Непосредственная
ОЗУ а) РП через ОЗУ б) через РП
Время выборки операнда t ОЗУ

3

t РП

2

2t ОЗУ

7

t ОЗУ +t РП

4

t ОЗУ +t РП +t РК +t ?

5

t ОЗУ +2t РП +t ?

6

t РК

1

Длина поля адреса log 2 V ОЗ

У

5

log 2 V р

П

1

log 2 V ОЗ

У

5

log 2 V РП

1

log 2 V РП +log 2 V СЕГМ

4 г)

log 2 V РП

2

L операнда

3 в)

Гибкость при адресации данных д) 5 4 3 2 1 1 6

Принятые обозначения:

t ОЗУ – время считывания информации из ОЗУ; t РП – время считывания информации из РП; t РК – время считывания информации из регистра команд; t ? – время суммирования составных частей адреса; V ОЗУ – объем ОЗУ; V РП – объем РП; V СЕГМ – объем сегмента; L операнда – длина операнда.

Примечания:

  1. используется, в основном, для адресации внешних устройств;
  2. используется крайне редко;
  3. зависит от длины операнда;
  4. зависит от размера сегмента;
  5. зависит от особенностей программы.