Методы адресации и типы команд
В машинах с регистрами общего назначения метод (или режим) адресации объектов, с которыми манипулирует команда, может задавать константу, регистр или ячейку памяти.
В табл. 2.2 представлены основные методы адресации операндов, которые реализованы в компьютерах, рассмотренных в настоящей книге.
Таблица 2.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 | Для индексации массивов |
Адресация непосредственных данных и литерных констант обычно рассматривается как один из методов адресации памяти (хотя значения данных, к которым в этом случае производятся обращения, являются частью самой команды и обрабатываются в общем потоке команд).
В табл. 2.2 на примере команды сложения (Add) приведены наиболее употребительные названия методов адресации, хотя при описании архитектуры в документации производители компьютеров и ПО используют разные названия для этих методов.
В табл. 2.2. знак "=" используется для обозначения оператора присваивания, а буква M обозначает память (Memory). Таким образом M(R1) обозначает содержимое ячейки памяти, адрес которой определяется содержимым регистра R1.
Использование сложных методов адресации позволяет существенно сократить количество команд в программе, но при этом значительно увеличивается сложность аппаратуры.
Команды традиционного машинного уровня можно разделить на несколько типов, которые показаны в табл. 2.3.
Таблица 2.3. Основные типы команд
Тип операции |
Примеры |
Арифметические и логические |
Целочисленные арифметические и логические операции: сложение, вычитание, логическое сложение, логическое умножение и т. д. |
Пересылки данных |
Операции загрузки/записи |
Управление потоком команд |
Безусловные и условные переходы, вызовы процедур и возвраты |
Системные операции |
Системные вызовы, команды управления виртуальной памятью и т. д. |
Операции с плавающей точкой |
Операции сложения, вычитания, умножения и деления над вещественными числами |
Десятичные операции |
Десятичное сложение, умножение, преобразование форматов и т. д. |
Операции над строками |
Пересылки, сравнения и поиск строк |
Обычно тип операнда (целый, вещественный, символ) определяет и его размер. Как правило, целые числа представляются в дополнительном коде. Для задания символов компания IBM использует код EBCDIC, другие компании применяют код ASCII. Для представления вещественных чисел с одинарной и двойной точностью придерживаются стандарта IEEE 754.
В ряде процессоров применяют двоично кодированные десятичные числа, которые представляют в упакованном и неупакованном форматах. Упакованный формат предполагает, что для кодирования цифр 0 – 9 используют 4 разряда и две десятичные цифры упаковываются в каждый байт.В неупакованном формате байт содержит одну десятичную цифру, которая обычно изображается в символьном коде ASCII.