Аппаратно программные платформы корпоративных информационных систем

       

Методы адресации и типы данных



Методы адресации и типы данных

Методы адресации

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

На рисунке 5.1 представлены все основные методы адресации операндов, которые реализованы в компьютерах, рассмотренных в настоящем обзоре. Адресация непосредственных данных и литеральных констант обычно рассматривается как один из методов адресации памяти (хотя значения данных, к которым в этом случае производятся обращения, являются частью самой команды и обрабатываются в общем потоке команд). Адресация регистров, как правило, рассматривается отдельно. В данном разделе методы адресации, связанные со счетчиком команд (адресация относительно счетчика команд) рассматриваются отдельно. Этот вид адресации используется главным образом для определения программных адресов в командах передачи управления.

На рисунке 5.1 на примере команды сложения (Add) приведены наиболее употребительные названия методов адресации, хотя при описании архитектуры в документации разные производители используют разные названия для этих методов. На этом рисунке знак "(" используется для обозначения оператора присваивания, а буква М обозначает память (Memory). Таким образом, M[R1] обозначает содержимое ячейки памяти, адрес которой определяется содержимым регистра R1.



Метод адресации Пример команды Смысл команды метода Использование
Регистровая 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 Для индексации массивов



Содержание раздела