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

3. Косвенный

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

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

Скобки в этом выражении означают содержимое. Существенное достоинство указанного метода состоит в том, что при длине машинного слова N бит можно в этом режиме адресовать 2N адресов в памяти. Но за это приходиться платить - при выполнении команды для выборки операнда требуется два дополнительных обращений к памяти : одно - для извлечения из памяти его адреса, а второе - для извлечения значения. Хотя сами адреса операндов в этом режиме принадлежат адресному пространству объемом 2 N слов, количество различных операндов не может превышать 2К , где К - разрядность адресного поля в коде команды. Как правило, это ограничение существенной роли не играет , и им можно пренебречь. В среде виртуальной памяти все ячейки, содержащие исполнительный адрес Ю, можно сосредоточить в нулевой странице процесса. Поскольку размер адресного поля в команде невелик , в нем содержится адрес ячейки, которая разместится в нулевой странице. Единственное ограничение состоит в том, что размер страницы должен быть не меньше 2К .Когда процесс активен, появляется интенсивный поток обращений к нулевой странице, который заставляет держать ее все время в оперативной памяти. Таким образом, при работе с виртуальной памятью использование косвенной адресации может привести максимум к одному прерыванию страничного обмена, а не к двум , как кажется на первый взгляд.

Очень редко встречается в практике проектирования процессоров вариант многоуровневой , или каскадной, косвенной адресации

ЕА=(…(А)…)

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

4. Регистровый

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

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

команда

Как правило, размер адресного поля со ссылкой на регистр не превышает 3-4 бит, что позволяет адресовать 8 или 16 регистров общего назначения процессора. Достоинства регистрового режима - малый размер адресного поля в формате команды и отсутствие дополнительных обращений к памяти при выполнении команды. Недостаток режима, который, как это обычно бывает, является продолжением достоинств возможность выборки операнда только из нескольких регистров.

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

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