Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции АКС / лекции АКС / Лекция №8_Система команд компьютера режимы адресации и форматы команд.doc
Скачиваний:
57
Добавлен:
26.02.2016
Размер:
83.46 Кб
Скачать

5. Косвенный через регистр

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

ЕА=(R)

Исполнительный адрес ячейки, в которой находится операнд (ЕА) = (содержимому адресного поля в коде команды, которое ссылается на определенный регистр процессора (R))

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

команда

6. Со смещением

R - содержимое адресного поля в коде команды, которое ссылается на определенный регистр процессора

A- содержимое адресного поля в коде команды

Память

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

ЕА=А+(R)

Исполнительный адрес ячейки, в которой находится операнд (ЕА) = содержимое адресного поля в коде команды + (содержимому адресного поля в коде команды, которое ссылается на определенный регистр процессора (R))

Этот метод адресации требует, чтобы в коде команды было два адресных поля, причем по крайней мере одно их них позволяло хранить явный адрес. Значение одного адресного поля - А- используется непосредственно при вычислении исполнительного адреса операнда. ХЗначение второго адресного поля , или нечвно заданная ссылка, определяемая кодом операции, указывает на регистр, содержимое которого суммируется с А для определения исполнительного адреса.

Рассмотрим три варианта адресации со смещением:

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

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

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

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

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

Поскольку это очень распространенный способ применения индексной адресации в программе, в соответствующиющих командах часто вычисление исполнительного адреса завершается приращением ( или уменьшением на 1 ) значения в индексном регистре. Такой способ работы с индексным регистром получил названиеавтоиндексации. Если для индексации в процессоре специально выделены некоторые регистры, их автоматическое приращение выполняется неявно при каждом обращении. Если же в качестве индексного регистра используется любой регистр общего назначения , операция автоиндексации должна быть специфицировна отдельным битом в коде команды. Автоиндексация с положительным приращение описывается следующим образом:

ЕА=А+(R)

Исполнительный адрес ячейки, в которой находится операнд (ЕА) = содержимое адресного поля в коде команды + (содержимому адресного поля в коде команды, которое ссылается на определенный регистр процессора (R))

R---(R) + 1

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

Если индексация выполняется после выборки адреса , заданного косвенно (такой вариант наз. постиндексацией), исполнительный адрес формируется так:

EA=(A) +(R)

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

В варианте преиндексации исполнительный адрес вычислется так:

ЕА = (А+(R))

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