- •Глава 16. Типы и форматы команд
- •16.1. Команды пересылки данных
- •16.2. Команды арифметической и логической обработки
- •16.3. Команды для работы со строками
- •16.4. Simd-команды
- •Перспективы векторных операций
- •16.5. Команды преобразования форматов
- •16.6. Команды ввода-вывода
- •16.7. Команды управления ходом выполнения программы
- •16.8. Команды ветвления
- •16.9. Команды пропуска
- •16.10. Форматы команд
- •Длина команды
- •Количество адресов в команде
- •16.11. Контрольные вопросы
16.10. Форматы команд
Типичная команда, в общем случае, должна содержать:
- код операции;
- адреса операндов, над которыми выполняется операция;
- адрес результата операции.
Формат команды определяет ее структуру, то есть:
количество двоичных разрядов, отводимых под всю команду,
количество и расположение отдельных полей команды.
Полем называется совокупность двоичных разрядов, кодирующих составную часть команды.
Оценивая возможные форматы, нужно учитывать следующие факторы:
общее число различных команд;
общую длину команды;
тип полей команды (фиксированной или переменной длины) и их длина;
простоту декодирования;
адресуемость и способы адресации;
стоимость оборудования для декодирования и исполнения команд.
Длина команды
Это важнейшее обстоятельство, влияющее на организацию и емкость оперативной памяти, структуру коммуникационной подсистемы, сложность и быстродействие ядра процессора. С одной стороны, удобно иметь в распоряжении мощный набор команд, то есть как можно больше кодов операций, операндов, способов адресации, и максимальное адресное пространство. Однако все это требует выделения большего количества разрядов под каждое поле команды, что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из оперативной памяти желательно, чтобы команда была как можно короче, а ее длина была равна или кратна целому числу байтов. Для упрощения аппаратуры и повышения быстродействия компьютера длину команды обычно выбирают кратной байту, поскольку в большинстве компьютеров оперативная память организована в виде последовательности байтов.
В рамках системы команд одной архитектуры могут использоваться разные форматы команд. Обычно это связано с особенностями команд различных типов.
Количество адресов в команде
В «максимальном» варианте в команде необходимо указать 4 компонента: адрес первого операнда, адрес второго операнда, адрес результата операции и адрес следующей команды. В итоге имеет место четырехадресный формат команды (рис. 2).
-
Код операции
Адрес первого операнда
Адрес
второго операнда
Адрес результата
Адрес следующей команды
Рис. 16.1. Четырехадресный формат команды
В фон-неймановских архитектурах необходимость в четвертом адресе отпадает, поскольку команды располагаются в оперативной памяти в порядке их выполнения, и адрес очередной команды может быть получен простым увеличением адреса текущей команды в счетчике команд. Это позволяет перейти к трехадресному формату команды (рис. 16.2). Требуется только добавить в систему команд архитектуры команды, способные изменять порядок вычислений.
-
Код операции
Адрес первого операнда
Адрес
второго операнда
Адрес результата
Рис. 16.2. Трехадресный формат команды
К сожалению, и в трехадресном формате длина команды может оказаться весьма большой. Так, если адрес ячейки оперативной памяти 32- разрядный, а длина кода операции — 8 разрядов, то длина команды составит 104 разряда (13 байт).
Если по умолчанию взять в качестве адреса результата адрес одного из операндов (обычно второго), то можно обойтись без третьего адреса, и в итоге получится двухадресный формат команды (рис. 16.3). Естественно, что в этом случае соответствующий операнд после выполнения операции теряется.
-
Код операции
Адрес первого операнда
Адрес второго операнда и результата
Рис. 16.3. Двухадресный формат команды
Команду можно еще более сократить, перейдя к одноадресному формату (рис. 16.4), что возможно при выделении определенного стандартного места для хранения первого операнда и результата. Обычно для этой цели используется специальный регистр процессора, известный под названием аккумулятора, поскольку здесь аккумулируется результат.
-
Код операции
Адрес операнда
Рис. 16.4. Одноадресный формат команды
Применение единственного регистра для хранения одного из операндов и результата является ограничивающим фактором, поэтому помимо аккумулятора часто используют и другие регистры процессора. Так как число регистров в процессоре невелико, для указания одного из них в команде достаточно иметь сравнительно короткое адресное поле. Соответствующий формат носит название полутораадресного или регистрового формата (рис. 16.5).
-
Код операции
Регистр
Адрес второго операнда
Рис. 16.5. Полутораадресный формат команды
Наконец, если для обоих операндов указать четко заданное местоположение, а также в случае команд, не требующих операнда, можно получить нуль-адресный формат команды.
В современных архитектурах процессоров преобладают два подхода к выбору формата команд, а именно, формат команд переменной длины и формат команд фиксированной длины.
В архитектуре процессоров IA-32/64 был принят формат с переменной длиной команд. Это объяснялось обстоятельствами того времени, когда эта архитектура разрабатывалась. В изменившихся условиях, когда оперативная память (очень дорогостоящий ресурс компьютера во времена разработки архитектуры IA-32/64) существенно подешевела, такой подход стал тормозом при разработке структур процессоров.
В архитектурах процессоров, которые разрабатывались в новых условиях (когда оперативная память перестала быть определяющим фактором стоимости компьютера) был принят формат с фиксированной длиной команд.
