Операции с числами в форме с плавающей запятой
Для работы с числами, представленными в форме с плавающей запятой, в АСК большинства машин предусмотрены:
- основные арифметические операции: сложение, вычитание, умножение и деление;
- операции сравнения, обеспечивающие сравнение двух вещественных чисел с выработкой признаков: =, <>, >, <, <=, >=;
- операции преобразования: формы представления (между фиксированной и плавающей запятой), формата представления (с одинарной и двойной точностью).
Логические операции
Стандартная система команд ВМ содержит команды для выполнения различных логических операций над отдельными битами слов или других адресуемых единиц. Такие команды предназначены для обработки символьных и логических данных. Минимальный набор поддерживаемых логических операций — это «НЕ», «И», «ИЛИ» и сложение по модулю 2.
Операции сдвигов
В дополнение к побитовым логическим операциям, практически во всех АСК предусмотрены команды для реализации операций логического, арифметического и циклического сдвигов (рис. 2.32).
Рисунок - Варианты операций сдвига
При логическом сдвиге вправо (см. рис 2.32, а), сдвигаются все разряды слова. Биты, вышедшие за пределы разрядной сетки, теряются, а освободившиеся позиции заполняются нулями.
При арифметическом сдвиге (см. рис. 2.32, б) данные трактуются как целые числа со знаком, причем бит знака не изменяет положения. При сдвиге вправо освободившиеся позиции заполняются значением знакового разряда, а при сдвиге влево — нулями. Арифметические сдвиги позволяют ускорить выполнение некоторых арифметических операций. Так, если числа представлены двоичным дополнительным кодом, то сдвиги влево и вправо эквивалентны соответственно умножению и делению на 2.
При циклическом сдвиге (см. рис. 2.32, в) смещаются все разряды слова, причем значение разряда, выходящего за пределы слова, заносится в позицию, освободившуюся с противоположной стороны, то есть потери информации не происходит. Одно из возможных применений циклических сдвигов — это перемещение интересующего бита в крайнюю левую (знаковую) позицию, где он может быть проанализирован как знак числа.
Операции с десятичными числами
Десятичные числа представляются в ВМ в двоично-кодированной форме. В вычислительных машинах первых поколений для обработки таких чисел предусматривались специальные команды, обеспечивавшие выполнение основных арифметических операций (сложение, вычитание, умножение и деление). В АСК современных машин подобных команд обычно нет, а соответствующие вычисления имитируются с помощью команд целочисленной арифметики.
SIMD-команды
Название данного типа команд представляет собой аббревиатуру от Single Instruction Multiple Data — буквально «одна инструкция — много данных». В отличие от обычных команд, оперирующих двумя числами, SIMD-команды обрабатывают сразу две группы чисел (в принципе их можно называть групповыми командами). Операнды таких команд обычно представлены в одном из упакованных форматов.
С 1992 года команды типа SIMD становятся неотъемлемым элементом АСК микропроцессоров фирм Intel и AMD.
Поводом послужило широкое распространение мультимедийных приложений. Видео, трехмерная графика и звук в ВМ представляются большими массивами данных, элементы которых чаще всего обрабатываются идентично. Так, при сжатии видео и преобразовании его в формат MPEG один и тот же алгоритм применяется к тысячам битов данных. В трехмерной графике часто встречаются операции, которые можно выполнить за один такт: интерполирование и нормировка векторов, вычисление скалярного произведения векторов, интерполяция компонентов цвета и т. д. Включение SIMD-команд в АСК позволяет существенно ускорить подобные вычисления.
Фирма Intel первой добавила в систему команд своего микропроцессора Pentium ММХ 57 SIMD-команд.
Следующим шагом стало создание новых наборов SIMD-команд, работающих также с операндами, представленными в виде упакованных чисел с плавающей запятой. Такие команды в соответствующих приложениях повышают производительность процессора примерно вдвое. Первой подобную технологию в середине 1998 года предложила фирма AMD. Это мультимедийное расширение включало в себя 21 SIMD-команду и получило название 3DNow!.
Позже фирма Intel ввела в свои микропроцессоры так называемые потоковые SIMD-команды, обозначив их аббревиатурой SSE — Streaming SIMD Extension (потоковая обработка по принципу «одна команда — много данных»).
Дальнейшее развитие технологии SSE вылилось в SSE2 и получило реализацию в Pentium 4. Этот вариант включает в себя 271 команду и позволяет выполнять групповые арифметические и логические операции, сдвиги, сравнения чисел, перегруппировку и извлечение отдельных чисел, различные варианты пересылок. За один такт обрабатываются четыре 32-разрядных числа с плавающей запятой упакованных в 128-разрядное слово.
Новый импульс получила и технология SDNow!, более совершенный вариант, которой получил название Enhanced 3DNow!. Этот набор команд близок к SSE2.
Таблица дает представление о том, какие из рассмотренных мультимедийных расширений поддерживаются наиболее популярными микропроцессорами класса Pentium.
Таблица -Поддержка Мультимедийных расширений в различных микропроцессорах
MMX | 3DNow! | SSE | SSE2 | |
VIAC3 | Да | Да | Нет | Нет |
Celeron-2, Pentium III | Да | Нет | Да | Нет |
Pentium 4 | Да | Нет | Да | Да |
Duron | Да | Да | Да | Нет |
Athlon XP | Да | Да | Да | Нет |
Еще один вариант архитектуры системы команд с SIMD-командами воплощен фирмой IBM в процессорах серии PowerPC.