4. Основные архитектурные понятия
-
-
-
Методы адресации и типы данных
-
-
-
-
Методы адресации и типы данных
Методы адресации
В машинах к регистрами общего назначения метод (или режим) адресации
объектов, с которыми манипулирует команда, может задавать константу,
регистр или ячейку памяти. Для обращения к ячейке памяти процессор
прежде всего должен вычислить действительный или эффективный адрес
памяти, который определяется заданным в команде методом адресации.
На рис. 4.1 представлены все основные методы адресации операндов,
которые реализованы в компьютерах, рассмотренных в настоящем обзоре.
Адресация непосредственных данных и литеральных констант обычно
рассматривается как один из методов адресации памяти (хотя значения
данных, к которым в этом случае производятся обращения, являются
частью самой команды и обрабатываются в общем потоке команд). Адресация
регистров, как правило, рассматривается отдельно. В данном разделе
методы адресации, связанные со счетчиком команд (адресация относительно
счетчика команд) рассматриваются отдельно. Этот вид адресации используется
главным образом для определения программных адресов в командах передачи
управления.
На рисунке на примере команды сложения (Add) приведены наиболее
употребительные названия методов адресации, хотя при описании архитектуры
в документации разные производители используют разные названия для
этих методов. На этом рисунке знак "(" используется для
обозначения оператора присваивания, а буква М обозначает память
(Memory). Таким образом, M[R1] обозначает содержимое ячейки памяти,
адрес которой определяется содержимым регистра R1.
Использование сложных методов адресации позволяет существенно сократить
количество команд в программе, но при этом значительно увеличивается
сложность аппаратуры. Возникает вопрос, а как часто эти методы адресации
используются в реальных программах? На рис. 4.2 представлены результаты
измерений частоты использования различных методов адресации на примере
трех популярных программ (компилятора с языка Си GCC, текстового
редактора TeX и САПР Spice), выполненных на компьютере VAX.
Метод адресации |
Пример
команды |
Смысл команды
метода |
Использование |
Регистровая |
Add R4,R3 |
R4(R4+R5 |
Требуемое значение в регистре |
Непосредственная или литеральная |
Add R4,#3 |
R4(R4+3 |
Для задания констант |
Базовая со смещением |
Add R4,100(R1) |
R4(R4+M[100+R1] |
Для обращения к
локальным переменным |
Косвенная регистровая |
Add R4,(R1) |
R4(R4+M[R1] |
Для обращения по указателю или вычисленному адресу |
Индексная |
Add R3,(R1+R2) |
R3(R3+M[R1+R2] |
Иногда полезна при работе с массивами: R1 - база, R3 - индекс
|
Прямая или
абсолютная |
Add R1,(1000) |
R1(R1+M[1000] |
Иногда полезна для обращения к статическим данным |
Косвенная |
Add R1,@(R3) |
R1(R1+M[M[R3]] |
Если R3-адрес указателя p, то выбирается значение по этому
указателю |
Автоинкрементная |
Add R1,(R2)+ |
R1(R1+M[R2]
R2(R2+d |
Полезна для прохода в цикле по массиву с шагом: R2 - начало
массива
В каждом цикле R2 получает приращение d |
Автодекрементная |
Add R1,(R2)- |
R2(R2-d
R1(R1+M[R2] |
Аналогична предыдущей
Обе могут использоваться для реализации стека |
Базовая индексная со смещением и масштабированием |
Add R1,100(R2)[R3] |
R1(
R1+M[100]+R2+R3*d |
Для индексации массивов |
Рис. 4.1. Методы адресации
Рис. 4.2. Частота использования различных методов
адресации на программах TeX, Spice, GCC
Из этого рисунка видно, что непосредственная адресация и базовая
со смещением доминируют.
При этом основной вопрос, который возникает для метода базовой
адресации со смещением, связан с длиной (разрядностью) смещения.
Выбор длины смещения в конечном счете определяет длину команды.
Результаты измерений показали, что в подавляющем большинстве случаев
длина смещения не превышает16 разрядов.
Этот же вопрос важен и для непосредственной адресации. Непосредственная
адресация используется при выполнении арифметических операций, операций
сравнения, а также для загрузки констант в регистры. Результаты
анализа статистики показывают, что в подавляющем числе случаев 16
разрядов оказывается вполне достаточно (хотя для вычисления адресов
намного реже используются и более длинные константы).
Важным вопросом построения любой системы команд является оптимальное
кодирование команд. Оно определяется количеством регистров и применяемых
методов адресации, а также сложностью аппаратуры, необходимой для
декодирования. Именно поэтому в современных RISC-архитектурах используются
достаточно простые методы адресации, позволяющие резко упростить
декодирование команд. Более сложные и редко встречающиеся в реальных
программах методы адресации реализуются с помощью дополнительных
команд, что вообще говоря приводит к увеличению размера программного
кода. Однако такое увеличение длины программы с лихвой окупается
возможностью простого увеличения тактовой частоты RISC-процессоров.
Этот процесс мы можем наблюдать сегодня, когда максимальные тактовые
частоты практически всех RISC-процессоров (Alpha, R4400, Hyper SPARC
и Power2) превышают тактовую частоту, достигнутую процессором Pentium.
|