Современные высокопроизводительные компьютеры
Адресация регистров, как правило, рассматривается отдельно. В данном разделе методы адресации, связанные со счетчиком команд (адресация относительно счетчика команд) рассматриваются отдельно. Этот вид адресации используется главным образом для определения программных адресов в командах передачи управления. На рисунке на примере команды сложения (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 Для индексации массивов
Рис.
|