
- •5.1.6.1. Обзор методов адресации
- •5.1.6.2. Методы адресации Pentium II
- •5.1.6.3. Методы адресации UltraSparc II
- •5.1.6.4. Методы адресации jvm
- •5.1.7.2. Бинарные операции
- •5.1.7.3. Унарные операции
- •5.1.7.4. Сравнения и условные переходы
- •5.1.7.5. Команды вызова процедур
- •5.1.7.6. Управление циклом
5.1.6.3. Методы адресации UltraSparc II
В процессоре UltraSPARC все команды используют непосредственную или регистровую адресацию, за исключением команд обращения к памяти. При регистровом методе 5 битов содержат номер регистра. При непосредственной адресации данные обеспечивает 13-битная константа со знаком. Для арифметических, логических и подобных им команд никакие другие методы адресации не используются.
К памяти обращаются команды трех типов: загрузка (LOAD), сохранение (STORE) и одна команда синхронизации мультипроцессора. Для команд LOAD и STORE есть два способа обращения к памяти. При первом способе вычисляется сумма двух регистров, которая затем используется как адрес (можно считать это относительной индексной адресацией без смещения). Второй способ представляет собой индексный метод с 13-битным смещением со знаком.
5.1.6.4. Методы адресации jvm
У машины JVM нет общих методов адресации в обычном смысле. Команды не содержат поля, сообщающего способ вычисления адреса. Вместо этого здесь с каждой командой связан собственный метод адресации. Поскольку в JVM нет видимых регистров, то регистровая и косвенно-регистровая адресация здесь невозможна. Несколько команд, например BIPUSH, используют непосредственную адресацию. Единственный метод адресации через регистры - индексный. Он используется командами LOAD, ISTORE, LDCW и другими командами, которые неявно определяют переменную через регистр, обычно LV или СРР. Команды перехода тоже используют индексную адресацию, при этом в качестве регистра рассматривается PC.
5.1.7. Типы команд
Команды можно условно поделить на несколько групп, которые повторяются от машины к машине, хотя и могут различаться в деталях. Кроме того, в каждом компьютере всегда имеется несколько необычных команд, которые добавлены в целях совместимости с предыдущими моделями или из-за других соображений.
5.1.7.1. Команды перемещения данных
Эти команды правильнее было бы назвать дублированием данных, но термин “перемещение данных” уже устоялся. Копирование данных из одного места в другое является одной из самых распространенных операций в программах.
Есть две цели, ради которых данные могут копироваться из одного места в другое. Одна из них - присваивание переменным значений, вторая - предоставить возможность быстрого обращения к ним. Многие команды могут обращаться к переменным только в том случае, если они имеются в регистре. Поскольку существуют два возможных источника и два возможных приемника элемента данных (память и регистр), то имеются 4 различных случая копирования. В одних компьютерах имеются 4 команды для 4 случаев, в других - одна команда на все 4 случая. Некоторые компьютеры используют команду LOAD для загрузки из памяти в регистр, команду STORE - для записи из регистра в память, команду MOVE - для копирования из регистра в регистр, но не имеют команд для копирования из одной ячейки памяти в другую.
Существуют команды для перемещения различного количества данных - от одного бита до всей памяти. Во многих машинах с фиксированной длиной слова одной командой перемещается ровно одно слово. Копирование другого количества данных может выполняться программным обеспечением с помощью сдвигов и слияний. Некоторые архитектуры дают возможность копировать отрезки данных размером меньше слова (они обычно измеряются в байтах), а также сразу несколько слов. Некоторые машины с изменяемой длиной слов содержат команды, определяющие только адреса источника и приемника, но не количество данных. Перемещение продолжается до тех пор, пока не появится специальное поле конца данных.