.
Начертательная геометрия Геометрическое черчение Инженерная графика Интегралы Математический анализ Матрицы Производные Векторная алгебра

 

3.4. Методы адресации и типы команд

 

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

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

 

Таблица 3.2. Методы адресации

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

Пример
команды

Смысл
команды

Использование команды

Регистровая

Add R4, R3

R4 = R4+R3

Для записи требуемого значения в регистр

Непосредственная или литерная

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 – адрес указателя р, то выбирается значение по этому указателю

Автоинкрементная

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

Для индексации массивов

 

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

В табл. 3.2 на примере команды сложения (Add) приведены наиболее употребительные названия методов адресации, хотя при описании архитектуры в документации производители компьютеров и ПО используют разные названия для этих методов. В табл. 3.2. знак "=" используется для обозначения оператора присваивания, а буква M обозначает память (Memory). Таким образом M(R1) обозначает содержимое ячейки памяти, адрес которой определяется содержимым регистра R1.

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

Команды традиционного машинного уровня можно разделить на несколько типов, которые показаны в табл. 3.3.

 

Таблица 3.3. Основные типы команд

Тип операции

Примеры

Арифметические
и логические

Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т. д.

Пересылки данных

Операции загрузки/записи

Управление потоком команд

Безусловные и условные переходы, вызовы процедур и возвраты

Системные операции

Системные вызовы, команды управления виртуальной памятью и т. д.

Операции с плавающей точкой

Операции сложения, вычитания, умножения и деления над вещественными числами

Десятичные операции

Десятичное сложение, умножение, преобразование форматов и т. д.

Операции над строками

Пересылки, сравнения и поиск строк

 

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

Обычно тип операнда (целый, вещественный, символ) определяет и его размер. Как правило, целые числа представляются в дополнительном коде. Для задания символов компания IBM использует код EBCDIC, другие компании применяют код ASCII. Для представления вещественных чисел с одинарной и двойной точностью придерживаются стандарта IEEE 754.

В ряде процессоров применяют двоично кодированные десятичные числа, которые представляют в упакованном и неупакованном форматах. Упакованный формат предполагает, что для кодирования цифр 0 – 9 используют 4 разряда и две десятичные цифры упаковываются в каждый байт. В неупакованном формате байт содержит одну десятичную цифру, которая обычно изображается в символьном коде ASCII.

На главную