Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Федеральное агентство по образованию v2.docx
Скачиваний:
38
Добавлен:
14.09.2019
Размер:
1.53 Mб
Скачать

2.5.7. Относительная адресация

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

Рис. 27. Относительная адресация.

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

Эффективность данного способа адресации можно описать выражениями:

TСА = tРОН + tСЛ + tЗУ; ССА = int ( log2 Ni – RСК)

где tCЛ — время сложения составляющих исполнительного адреса; RCK — разряд­ность счетчика команд.

2.5.8. Базовая регистровая адресация

В случае базовой регистровой адресации (БРА) регистр, называемый базовым, со­держит полноразрядный адрес, а подполе Ас — смещение относительно этого ад­реса. Ссылка на базовый регистр может быть явной или неявной. В некоторых ВМ имеется специальный базовый регистр и его использование является неявным, то есть подполе R в команде отсутствует (рис. 28).

Рис. 28. Базовая регистровая адресация с базовым регистром.

Более типичен случай, когда в роли базового регистра выступает один из регис­тров общего назначения (РОН), тогда его номер явно указывается в подполе R команды (рис. 29).

Базовую регистровую адресацию обычно используют для доступа к элементам массива, положение которого в памяти в процессе вычислений может меняться. В базовый регистр заносится начальный адрес массива, а адрес элемента массива указывается в подполе Ас команды в виде смещения относительно начального ад­реса массива. Достоинство данного способа адресации в том, что смещение имеет меньшую длину, чем полный адрес, и это позволяет сократить длину адресного поля команды. Короткое смещение расширяется до полной длины исполнитель­ного адреса путем добавления слева битов, совпадающих со значением знакового разряда смещения.

Рис. 29. Базовая регистровая адресация с использованием одного из РОН.

Разрядность смещения RCM и, соответственно, затраты оборудования опреде­ляются из условия RCM = СБРА = int(log2(max(Non ))), где Non, — количество опе­рандов i-й программы.

Затраты времени составляют: ГБРА = tPOH + tСЛ + tЗУ.

2.5.9. Индексная адресация

При индексной адресации (ИА) подполе Ас содержит адрес ячейки памяти, а ре­гистр (указанный явно или неявно) — смещение относительно этого адреса. Как видно, этот способ адресации похож на базовую регистровую адресацию. Поскольку при индексной адресации в поле Ас находится полноразрядный адрес ячейки па­мяти, играющий роль базы, длина этого поля больше, чем при базовой регистро­вой адресации. Тем не менее вычисление исполнительного адреса операнда про­изводится идентично (рис. 30, рис. 31).

Рис. 30. Индексная адресация с индексным регистром.

Рис. 31. Индексная адресация с использованием одного из РОН.

Индексная адресация предоставляет удобный механизм для организации ите­ративных вычислений. Пусть, например, имеется массив чисел, расположенных в памяти последовательно, начиная с адреса N, и мы хотим увеличить на единицу все элементы данного массива. Для этого требуется извлечь каждое число из па­мяти, прибавить к нему 1 и вернуть обратно, а последовательность исполнитель­ных адресов будет следующей: N,N+1,N+2 и т.д., вплоть до последней ячейки, занимаемой рассматриваемым массивом. Значение N берется из подполя Ас ко­манды, а в выбранный регистр, называемый индексным регистром, сначала зано­сится 0. После каждой операции содержимое индексного регистра увеличивается на 1.

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

Автоиндексирование с увеличением содержимого индексного регистра носит на­звание автоинкрементной адресации.

Интересным и весьма полезным является еще один вариант индексной адреса­ции — индексная адресация с масштабированием и смещением: содержимое индекс­ного регистра умножается на масштабный коэффициент и суммируется с Лс. Мас­штабный коэффициент может принимать значения 1,2,4 или 8, для чего в адресной части команды выделяется дополнительное поле. Описанный способ адресации реализован, например, в микропроцессорах фирмы Intel.

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