Типы команд 87
Рассмотренные формы представления статической видеоинформации исполь­зуются, в частности, для отдельных кадров, образующих анимационные фильмы. Для хранения анимационных фильмов применяются различные методы сжатия информации, большинство из которых стандартизовано,.
Аудиоинформация
Понятие аудио связано со звуками, которые способно воспринимать человеческое ухо. Частоты аудиосигналов лежат в диапазоне от 15 Гц до 20 КГц, а сигналы по своей природе являются непрерывными (аналоговыми). Прежде чем быть пред-' ставленной в ВМ, аудиоинформация должна быть преобразована в цифровую форму (оцифрована). Для этого значения звуковых сигналов (выборки, samples), взятые через малые промежутки времени, с помощью аналого-цифровых преобра­зователей (АЦП) переводятся в двоичный код. Обратное действие выполняется цифро-аналоговыми преобразователями (ЦАП). Чем чаще производятся выборки, тем выше может быть точность последующего воспроизведения исходного сигнала, но тем большая емкость памяти требуется для хранения оцифрованного звука.
Цифровой эквивалент аудиосигналов обычно хранится в виде файлов, причем широко используются различные методы сжатия такой информации. Как прави­ло, к методам сжатия аудиоинформации предъявляется требование возможности восстановления непрерывного сигнала без заметного ухудшения его качества. В на­стоящее время распространен целый ряд форматов хранения аудиоинформации. Некоторые из них перечислены в табл. 2.14.
Таблица 2.14. Форматы аудиофайлов
Обозначение
Полное название
AVI
Audio Yideo Interleave
W
WAVeform Extension.
MIDI
Musical Instrument Digital Interface
AIF
Audio Interchange Format
MPEG
Motion Picture Expert Group Audio
RA
Real Audio
Типы команд
Несмотря на различие в системах команд разных ВМ, некоторые основные типы операций могут быть найдены в любой из них. Для описания этих типов примем следующую классификацию:
и   · команды пересылки данных;
ш   · команды арифметической и логической обработки;
   · команды работы со строками;
ш   · команды SIMD;
ш   · команды преобразования;
88 Глава 2. Архитектура системы команд
•    команды ввода/вывода;
•   команды управления потоком команд.
Команды пересылки данных
Это наиболее распространенный тип машинных команд. В таких командах долж­на содержаться следующая информация:
•   адреса источника и получателя операндов — адреса ячеек памяти, номера реги­стров процессора или информация о том, что операнды расположены в стеке;
•   длина подлежащих пересылке данных (обычно в байтах или словах), заданная явно или косвенно;
•   способ адресации каждого из операндов, с помощью которого содержимое ад­ресной части команды может быть пересчитано в физический адрес операнда.
Рассматриваемая группа команд обеспечивает передачу информации между процессором и ОП, внутри процессора и между ячейками памяти. Пересылочные операции внутри процессора имеют тип «регистр-регистр». Передачи между про­цессором и памятью относятся к типу «регистр-память», а пересылки в памяти — к типу «память-память».
Команды арифметической и логической обработки
В данную группу входят команды, обеспечивающие арифметическую и логичес­кую обработку информации в различных формах ее представления. Для каждой формы представления чисел в АСК обычно предусматривается некий стандарт­ный набор операций.
Помимо вычисления результата выполнение арифметических и логических операций сопровождается формированием в АЛУ признаков (флагов), характе­ризующих этот результат. Наиболее часто фиксируются такие признаки, как: Z (Zero) — нулевой результат; N (Negative) — отрицательный результат; V (over­flow) — переполнение разрядной сетки; С (Carry) — наличие переноса.
Операции с целыми числами
К стандартному набору операций над целыми числами, представленными в форме с фиксированной запятой, следует отнести:
•   двухместные арифметические операции (операции с двумя операндами): сло­жение, вычитание, умножение и деление;
•  одноместные арифметические операции (операции с одним операндом ): вычис-
ление абсолютного значения (модуля) операнда, изменение знака операнда;
•   операции сравнения, обеспечивающие сравнение двух целых чисел и выработ­ку признаков, характеризующих соотношение между сопоставляемыми вели­чинами (",<>, >,*<, <=, >=).
Часто этот перечень дополняют такими операциями, как вычисление остатка, от целочисленного деления, сложение с учетом переноса, вычитание с учетом заема,
Типы команд 89
увеличение значения операнда на единицу (инкремент), уменьшение значения операнда на единицу (декремент).
Отметим, что выполнение арифметических команд может дополнительно со­провождаться перемещением данных из устройства ввода в АЛУ или из АЛ У на устройство вывода.
Операции с числами в форме с плавающей запятой
Для работы с числами, представленными в форме с плавающей запятой, в АСК большинства машин предусмотрены:
•  основные арифметические операции: сложение, вычитание, умножение и деление;
•   операции сравнения, обеспечивающие сравнение двух вещественных чисел с выработкой признаков: =,<>,>,<,<=,>=;
•   операции преобразования: формы представления (между фиксированной и плавающей запятой), формата представления (с одинарной и двойной точно­стью).
Логические операции
Стандартная система команд ВМ содержит команды для выполнения различных логических операций над отдельными битами слов или других адресуемых еди­ниц. Такие команды предназначены для обработки символьных и логических дан­ных. Минимальный набор поддерживаемых логических операций — это «НЕ», «И», «ИЛИ» и сложение по модулю 2.
Операции сдвигов
В дополнение к побитовым логическим операциям, практически во всех АСК пре­дусмотрены команды для реализации операций логического, арифметического и циклического сдвигов (рис. 2.32).
90 Глава 2. Архитектура системы команд
При логическом сдвиге влево или вправо (см. рис. 2.32, а), сдвигаются все раз­ряды слова. Биты, вышедшие за пределы разрядной сетки, теряются, а освободив­шиеся позиции заполняются нулями.
При арифметическом сдвиге (см. рис. 2.32, б)цанные трактуются как целые чис­ла со знаком, причем бит знака не изменяет положения. При сдвиге вправо осво­бодившиеся позиции заполняются значением знакового разряда, а при сдвиге вле­во — нулями. Арифметические сдвиги позволяют ускорить выполнение некоторых арифметических операций. Так, если числа представлены двоичным дополнитель­ным кодом, то сдвиги влево и вправо эквивалентны соответственно умножению и делению на 2.
При циклическом сдвиге (см. рис. 2.32, в) смещаются все разряды слова, причем значение разряда, выходящего за пределы слова, заносится в позицию, освободив­шуюся с противоположной стороны, то есть потери информации не происходит. Одно из возможных применений циклических сдвигов — это перемещение инте­ресующего бита в крайнюю левую (знаковую) позицию, где он может быть про­анализирован как знак числа.
Операции с десятичными числами
Десятичные числа представляются в ВМ в двоично-кодированной форме. В вычи­слительных машинах первых поколений для обработки таких чисел предусматрива­лись специальные команды, обеспечивавшие выполнение основных арифметиче­ских операций (сложение, вычитание, умножение и деление). В АСК современных машин подобных команд обычно нет, а соответствующие вычисления имитируют­ся с помощью команд целочисленной арифметики.
SlMD-команды
Название данного типа команд представляет собой аббревиатуру от Single Instruc­tion Multiple Data — буквально «одна инструкция — много данных». В отличие от обычных команд, оперирующих двумя числами, SIMD-команды обрабатывают сразу две группы чисел (в принципе их можно называть групповыми командами). Операнды таких команд обычно представлены в одном из упакованных форматов.
Идея SIMD-обработки была выдвинута в Институте точной механики и вы­числительной техники им. С. А. Лебедева в 1978 году в рамках проекта «Эльбрус-1». С 1992 года команды типа SIMD становятся неотъемлемым элементом АСК мик­ропроцессоров фирм Intel и AMD. Поводом послужило широкое распространение мультимедийныхлриложений. Видео, трехмерная графика и звук в ВМ представ­ляются большими массивами данных, элементы которых чаще всего обрабатыва­ются идентично. Так, при сжатии видео и преобразовании его в формат MPEG один и тот же алгоритм применяется к тысячам битов данных. В трехмерной гра­фике часто встречаются операции, которые можно выполнить за один такт: интер­полирование и нормировка векторов, вычисление скалярного произведения век­торов, интерполяция компонентов цвета и т. д. Включение SIMD-команд в АСК позволяет существенно ускорить подобные вычисления.
Первой на мультимедийный бум отреагировала фирма Intel, добавив в систему команд своего микропроцессора Pentium ММХ 57 SIMD-команд. Название ММХ (MultiMedia eXtention — мультимедийное расширение) разработчики обосновы-
ι
Типы команд 91
вали тем, что при выборе состава новых команд были проанализированы алгорит­мы, применяемые в различных мультимедийных приложениях. Команды ММХ обеспечивали параллельную обработку упакованных целых чисел. При выполне­нии арифметических операций каждое из чисел, входящих в группу, рассматрива­ется как самостоятельное, без связи с соседними числами. Учитывая специфику обрабатываемой информации, команды ММХ реализуют так называемую ариф­метику с насыщением: если в результате сложения образуется число, выходящее за пределы отведенных под него позиций, оно заменяется наибольшим двоичным числом, которое в эти позиции вмещается. На рис. 2.33 показано сложение двух групп четырехразрядных целых чисел, упакованных в 32-разрядные слова.
Рис. 2.33. Сложение с насыщением упакованных целых чисел
Следующим шагом стало создание новых наборов SIMD-команд, работающих также с операндами, представленными в виде упакованных чисел с плавающей запятой. Такие команды в соответствующих приложениях повышают производи­тельность процессора примерно вдвое. Первой подобную технологию в середине 1998 года предложила фирма AMD в микропроцессоре Кб-2. Это мультимедий­ное расширение включало в себя 21 SIMD-команду и получило название 3DNow!. Расширение 3DNow! в дополнение к SIMD-обработке целочисленной информа­ции типа ММХ позволяло оперировать парой упакованных чисел в формате с пла­вающей запятой.
Полугодом позже фирма Intel ввела в свои микропроцессоры так называемые потоковые SIMD-команды, обозначив их аббревиатурой SSE — Streaming SIMD Extension (потоковая обработка по принципу «одна команда — много данных»). Сначала это были 70 команд в микропроцессоре Pentium III. Команды дополняли групповые целочисленные операции ММХ и расширяли их за счет групповых опе­раций с 32-разрядными вещественными числами.
В зависимости от типа чисел (целые или вещественные) команды SSE делятся на три категории:
•   работа с упакованными группами целых чисел, которые могут иметь размер байта, слова, двойного слова или квадрослова (количество чисел в группе зави­сит от их разрядности и от разрядности всей группы — 64 или 128);
•   оперирование одной парой 32-разрядных или 64-разрядных чисел с плаваю­щей запятой (обычная или двойная точность);
92 Глава 2. Архитектура системы команд
• обработка четырех пар вещественных чисел обычной точности или двух пар вещественных чисел двойной точности.
Дальнейшее развитие технологии SSE вылилось в SSE2 и получило реализа-   \
пию в Pentium 4. Этот вариант включает в себя 271 команду и позволяет выпол-   ί нять групповые арифметические и логические операции, сдвиги, сравнения чисел,
перегруппировку и извлечение отдельных чисел, различные варианты пересылок.   :
За один такт обрабатываются четыре 32-разрядных числа с плавающей запятой,   ]
упакованных в 128-разрядное слово.                                                                      '
Новый импульс получила и технология 3DNow!, более совершенный вариант   \
которой получил название Enhanced 3DNow!. Этот набор команд близок к SSE2.   \
Таблица 2.15 дает представление о том, какие из рассмотренных мультимедий-   j
ных расширений поддерживаются наиболее популярными микропроцессорами  j
класса Pentium.                                                                                                    ')
Таблица 2.15. Поддержка мультимедийных расширений в различных микропроцессорах
MMX
3DNow!
SSE
SSE2
VIAC3
Да
Да
Нет
Нет
Celeron-2, Pentium III
Да
Нет
Да
Нет
Pentium 4
Да
Нет
Да
Да
Duron
Да
Да
Да
Нет
Athlon XP
Да
Да
Да
Нет
Еще один вариант архитектуры системы команд с SIMD-командами воплощен фирмой IBM в процессорах серии PowerPC. Эта реализация носит название AltiVec и во многих отношениях превосходит вышеупомянутые расширения АС К. В част- ; ности, имеются трехоперандные команды, допускаются нестандартные целочис­ленные форматы, например «упаковка» из 1+5 + 5 + 5 битов.
Команды для работы со строками
Для работы со строками в АСК обычно предусматриваются команды, обеспечива- ; ющие перемещение, сравнение и поиск строк. В большинстве машин перечислен- ; ные операции просто имитируются за счет других команд.
Команды преобразования
Команды преобразования осуществляют изменение формата представления дан- ; ных. Примером может служить преобразование из десятичной системы счисления -: в двоичную или перевод 8-разрядного кода символа из кодировки ASCII в коди- ! ровку EBCDIC, и наоборот.
Команды ввода/вывода
Команды этой группы могут быть подразделены на команды управления перифе- ; рийным устройством (ПУ), проверки его состояния, ввода и вывода.
Комащцлуправления периферийным устройством служат для запуска ПУ и ука-; зания ему требуемого действия. Например, накопителю на магнитной ленте мо- '
' \                                                                                                                    Типы команд 93
жет быть предписано на необходимость перемотки ленты или ее продвижения впе­ред на одну запись. Трактовка подобных инструкций зависит от типа ПУ.
Команды проверки состояния ввода/вывода применяются для тестирования
различных признаков, характеризующих состояние модуля В/ВЫВ и подключен-
' ных к нему ПУ. Благодаря этим командам центральный процессор может выяс-
. нить, включено ли питание ПУ, завершена ли предыдущая операция ввода/вывода,
возникли ли в процессе ввода/вывода какие-либо ошибки и т. п.
Собственно обмен информацией с ПУ обеспечивают команды ввода и вывода.
■  Команды ввода предписывают модулю В/ВЫВ получить элемент данных (байт ': или слово) от ПУ и поместить его на шину данных, а команды вывода — заставля-: ют модуль В/ВЫВ принять элемент данных с шины данных и переслать его на
ПУ.
Команды управления системой
■." Команды, входящие в эту группу, являются привилегированными и могут выпол-ΐ няться, только когда центральный процессор ВМ находится в привилегированном :: состоянии или выполняет программу, находящуюся в привилегированной облас-. ти памяти (обычно привилегированный режим используется лишь операционной ;. системой). Так, лишь эти команды способны считывать и изменять состояние ряда ' регистров устройства -управления.
Команды управления потоком команд
Концепция фон-неймановской вычислительной машины предполагает, что коман­ды программы, как правило, выполняются в порядке их расположения в памяти. Для получения адреса очередной команды достаточно увеличить содержимое счет-• чика команд на длину текущей команды. В то же время основные преимущества ВМ заключаются именно в возможности изменения хода вычислений в зависимо­сти от возникающих в процессе счета результатов. С этой целью в АСК вычисли­тельной машины включаются команды, позволяющие нарушить естественный порядок следования и передать управление в иную точку программы. В адресной части таких команд содержится адрес точки перехода (адрес той команды, которая должна быть выполнена следующей). Переход реализуется путем загрузки адреса точки перехода в счетчик команд (вместо увеличения содержимого этого счетчика
■ надлинукоманды).
В системе команд ВМ можно выделить три типа команд, способных изменить последовательность вычислений:
•    безусловные переходы;
•   условные переходы (ветвления);
•   вызовы процедур и возвраты из процедур.
Степень утилизации каждого из этих типов команд в реальных приложениях 'иллюстрирует диаграмма, приведенная на рис. 2.34.
Согласно приведенным данным, среди команд рассматриваемой группы доми­нируют условные переходы.
Несмотря на то что присутствие в программе большого числа команд безуслов­ного перехода считается признаком плохого стиля программирования, такие
94 Глава 2. Архитектура системы команд
команды обязательно входят в АСК любой ВМ. Для их обозначения в языке ассемблера обычно используется английское слово jump (прыжок). Команда безусловного перехода обеспечивает переход по заданному адресу без проверки каких-либо условий.
Условный переход происходит только при соблюдении определенного условия, в противном случае выполняется следующая по порядку команда программы. Боль­шинство производителей ВМ в своих ассемблерах обозначают подобные команды словом branch (ветвление). Статистика случаев, когда переход имеет место, приве­дена на рис. 2.35.
Условием, на основании которого осуществляется переход, чаще всего высту­пают признаки результата предшествующей арифметической или логической операции. Каждый из признаков фиксируется в своем разряде регистра флагов процессора. Возможен и иной подход, когда решение о. переходе принимается в зависимости от состояния одного из регистров общего назначения, куда предвари­тельно помещается результат операции сравнения. Третий вариант — это объеди­нение операций сравнения и перехода в одной команде.
В системе команд ВМ для каждого признака результата предусматривается своя команда ветвления (иногда — две: переход при наличии признака и переход при его отсутствии). Большая часть условных переходов связана с проверкой взаим­ного соотношения двух величин или с равенством (неравенством) некоторой ве­личины нулю. Последний вид проверок используется в программах наиболее ин­тенсивно, о чем свидетельствуют статистические данные, приведенные на рис. 2.36. На верхней диаграмме показаны частоты употребления разных видов условий для программ GCC, Spice и ТеХ, выполнявшихся на ВМ MIPS 2000. Нижняя диаг­рамма дает представление о результатах, полученных для двух тестовых смесей
Типы команд
95
программ, где в одной из смесей превалировали целочисленные вычисления, а в другой — вычисления с плавающей запятой.
Помимо приведенных на рис. 2.36 данных необходимо отметить, что по резуль­татам тех же исследований доля команд, где проверяются простые условия (= или О), составляет в среднем 50%. Кроме того, в качестве одного из операндов в ко­мандах, вычисляющих результат сравнения, как правило, выступает константа. Доля таких команд для уже упоминавшихся программ составляет: GCC — 84%, Spice - 92%, ТеХ - 83%.
Одной из форм команд условного перехода являются команды пропуска. В них адрес перехода отсутствует, а при выполнении условия происходит пропуск сле­дующей команды, то есть предполагается, что отсутствующий в команде адрес сле­дующей команды эквивалентен адресу текущей команды, увеличенному на длину пропускаемой команды. Такой прием позволяет сократить длину команд передачи управления.
Для всех языков программирования характерно интенсивное использование механизма процедур. Процедура может быть вызвана в любой точке программы. Для ВМ такой вызов означает, что в этой точке необходимо выполнить процедуру, после чего вернуться в точку, непосредственно следующую за местом вызова.
Процедурный механизм базируется на командах вызова процедуры, обеспечи­вающих переход из текущей точки программы к начальной команде процедуры, и командах возврата из процедуры, для возврата в точку, непосредственно распо-
96 Глава 2. Архитектура системы команд
ложенную за командой вызова. Такой режим предполагает наличие средств для сохранения текущего состояния содержимого счетчика команд в момент вызова (запоминание адреса точки возврата) и его восстановления при выходе из проце­дуры.
Форматы команд
Типовая команда, в общем случае, должна указывать:
•   подлежащую выполнению операцию;
•   адреса исходных данных (операндов), над которыми выполняется операция;
•   адрес, по которому должен быть помещен результат операции.
В соответствии с этим команда состоит из двух частей: операционной и адрес­ной (рис. 2.37).
Операционная часть
Адресная часть
Рис. 2.37. Структура команды Формат команды определяет ее структуру, то есть количество двоичных раз­рядов, отводимых под всю команду, а также количество и расположение отдель­ных полей команды. Полем называется совокупность двоичных разрядов, кодиру­ющих составную часть команды. При создании ВМ выбор формата команды влияет на многие характеристики будущей машины. Оценивая возможные форматы, нуж­но учитывать следующие факторы:
•   общее число различных команд;
•   общую длину команды;
•  тип полей команды (фиксированной или переменной длины) и их длина;
•    простоту декодирования;
•   адресуемость и способы адресации;
•   стоимость оборудования для декодирования и исполнения команд.
Длина команды
Это важнейшее обстоятельство, влияющее на организацию и емкость памяти, струк­туру шин, сложность и быстродействие ЦП. С одной стороны, удобно иметь в рас­поряжении мощный набор команд, то есть как можно больше кодов операций, опе­рандов, способов адресации, и максимальное адресное пространство. Однако все это требует выделения большего количества разрядов под каждое поле команды, что приводит к увеличению ее длины. Вместе с тем, для ускорения выборки из памяти желательно, чтобы команда была как можно короче, а ее длина была равна или кратна ширине шины данных. Для упрощения аппаратуры и повышения быс­тродействия ВМ длину команды обычно выбирают кратной байту, поскольку в большинстве ВМ основная память организована в виде 8-битовых ячеек. В рам­ках системы команд одной ВМ могут использоваться разные форматы команд. Обычно это связано с применением различных способов адресации. В таком слу-
Hosted by uCoz