- •Глава 2 Архитектура системы команд
- •Классификация по месту хранения операндов
- •Стековая архитектура
- •Аккумуляторная архитектура
- •Типы и форматы операндов
- •Упакованные целые числа
- •Разрядность основных форматов числовых данных
- •Размещение числовых данных в памяти
- •Символьная информация
- •Логические данные
- •Прочие виды информации
- •Видеоинформация
- •Аудиоинформация
- •Типы команд
- •Команды пересылки данных
- •Команды арифметической и логической обработки
- •Операции с целыми числами
- •Операции с числами в форме с плавающей запятой
- •Логические операции
- •Операции сдвигов
- •Операции с десятичными числами
- •Simd-команды
- •Адресность и эффективность использования памяти
- •Способы адресации операндов
- •Непосредственная адресация
- •Выбор системы операций на основе структурирования алгоритмов
Упакованные целые числа
В АСК современных микропроцессоров имеются команды, оперирующие целыми числами, представленными в упакованном виде. Связано это с обработкой муль-
67
Рис. 2.13. Целочисленные форматы микропроцессоров фирмы Intel
тимедийной информации. Формат предполагает упаковку в пределах достаточно длинного слова (обычно 64-разрядного) нескольких небольших целых чисел, а соответствующие команды обрабатывают все эти числа параллельно. Если каждое из чисел состоит из четырех двоичных разрядов, то в 64-разрядное слово можно поместить до 16 таких чисел. Неиспользованные разряды заполняются нулями. В микропроцессорах фирмы Intel, начиная с Pentium MMX, присутствуют специальные команды для обработки мультимедийной информации (ММХ-коман-ды), оперирующие целыми числами, упакованными в квадрослова (64-разрядные слова). Предусмотрены три формата (рис. 2.14): упакованные байты (восемь 8-разрядных чисел); упакованные слова (четыре 16-разрядных числа) и упакованные двойные слова (два 32-разрядных числа).
Рис. 2.14. Форматы упакованных целых чисел в технологиях ММХ и SDNow!
68
Байты в формате упакованных байтов нумеруются от 0 до 7, причем байт 0 располагается в младших разрядах квадрослова. Аналогичная система нумерации и размещения упакованных чисел применяется для упакованных слов (номера 0-3) и упакованных двойных слов (номера 0-1).
Идентичные форматы упакованных данных применяются также в другой технологии обработки мультимедийной информации, предложенной фирмой AMD. Эта технология носит название SDNow!, а реализована в микропроцессорах данной фирмы.
Десятичные числа
В ряде задач, главным образом, учетно-статистического характера, приходится иметь дело с хранением, обработкой и пересылкой десятичной информации. Особенность таких задач состоит в том, что обрабатываемые числа могут состоять из различного и весьма большого количества десятичных цифр. Традиционные методы обработки с переводом исходных данных в двоичную систему счисления и обратным преобразованием результата зачастую сопряжены с существенными накладными расходами. По этой причине в ВМ применяются иные специальные формы представления десятичных данных. В их основу положен принцип кодирования каждой десятичной цифры эквивалентным двоичным числом из четырех битов (тетрадой), то есть так называемым двоично-десятичным кодом (BCD — Binary Coded Decimal).
Байт
|
Байт
|
|
Байт
|
Байт
| ||||
Зона |
Цифра |
Зона |
Цифра |
... |
Зона |
Цифра |
Зона |
Цифра |
а
Байт
|
Байт
|
|
Байт
|
Байт
| ||||
Цифра |
Цифра |
Цифра |
Цифра |
... |
Цифра |
Цифра |
Цифра |
Знак |
б
Рис. 2.15, Форматы десятичных чисел: а —зонный; б —уплотненный
Используются два формата представления десятичных чисел (все числа рассматриваются как целые): зонный (распакованный) и уплотненный (упакованный). В обоих форматах каждая десятичная цифра представляется двоичной тетрадой, то есть заменяется двоично-десятичным кодом. Из оставшихся задействованных шести четырехразрядных двоичных комбинаций (24 = 16) две служат для кодирования знаков «+>> и «-». Например, в ВМ семейства IBM 360/370/390 для знака «плюс» выбран код 11002 = C1G, а для знака «минус» — код 1101, = D1C.
Зонный формат (рис. 2.15, а) применяется в операциях ввода/вывода. В нем под каждую цифру выделяется один байт, где младшие четыре разряда отводятся под код цифры, а в старшую тетраду (поле зоны) записывается специальный код «зона», не совпадающий с кодами цифр и знаков. В IBM 360/370/390 это код 11112 = F16. Исключение составляет байт, содержащий младшую цифру десятичного числа, где в поле зоны хранится знак числа. На рис. 2.16 показана запись числа -7396 в зонном формате. В некоторых ВМ принят вариант зонного формата, где поле зоны заполняется нулями
69
Байт ; Байт |
Байт |
Байт | |||||
Зона |
7 |
Зона |
3 |
Зона |
9 |
Минус |
6 |
1111 |
0111 |
1111 |
001 1 |
1111 |
1001 |
1101 |
0110 |
Рис. 2.16. Представление числа -7396 в зонном формате
При выполнении операций сложения и вычитания над десятичными числами обычно используется упакованный формат и в нем же получается результат (умножение и деление возможно только в зонном формате). В упакованном формате (рис. 2.15, б) каждый байт содержит коды двух десятичных цифр. Правая тетрада последнего байта предназначается для записи знака числа. Десятичное число должно занимать целое количество байтов. Если это условие не выполняется, то четыре старших двоичных разряда левого байта заполняется нулями. Так, представление числа -7396 в упакованном формате имеет вид, приведенный на рис. 2.17.
Байт Байт Байт
0 |
7 |
3 |
9 |
6 |
Минус |
0000 |
0111 |
0011 |
1 001 |
0110 |
1101 |
Рис. 2.17. Представление числа -7396 в упакованном формате
Размещение знака в младшем байте, как в зонном, так и в упакованном представлениях, позволяет задавать десятичные числа произвольной длины и передавать их в виде цепочки байтов. В этом случае знак указывает, что байт, в котором он содержится, является последним байтом данного числа, а следующий байт последовательности — это старший байт очередного числа.
Числа в форме с плавающей запятой
От недостатков ФЗ в значительной степени свободна форма представления чисел с плавающей запятой (ПЗ), известная также под названиями нормальной или полулогарифмической формы. В данном варианте каждое число разбивается на две группы цифр. Первая группа цифр называется мантиссой, вторая — порядком. Число представляется в виде произведения X = +mq±!>, где т — мантисса числа X, р — порядок числа, q — основание системы счисления.
Для представления числа в форме с ПЗ требуется задать знаки мантиссы и порядка, их модули в д-ичном коде, а также основание системы счисления (рис. 2.18). Нормальная форма неоднозначна, так как взаимное изменение тир приводит к «плаванию» запятой, чем и обусловлено название этой формы.
Модуль порядка Модуль мантиссы
Знак т |
|
Знак р |
|
Рг-1 |
|
Pi |
Ро |
|
т-1 |
т_2 |
|
т.п |
Рис. 2.18. Форма представления чисел с плавающей запятой
Диапазон и точность представления чисел с ПТ зависят от числа разрядов, отводимых под порядок и мантиссу. На рис. 2.19 показаны диапазоны разрядностей порядка и мантиссы, характерные для известных ВМ.
70
Рис. 2.19. Типовые разрядности полей порядка и мантиссы
Помимо разрядности порядка и мантиссы диапазон представления чисел зависит и от основания используемой системы счисления, которое может быть отличным от 2. Например, в универсальных ВМ (мэйнфреймах) фирмы IBM используется база 16. Это позволяет при одинаковом количестве битов, отведенных под порядок, представлять числа в большем диапазоне. Так, если поле порядка равно 7 битам, максимальное значение qp, на которое умножается мантисса, равно 2128 (при q = 2) или 16128 (при q= 16), а диапазоны представления чисел соответственно составят 10 -19 < \Х\ < 10+19и 10 -76 < \Х\ < 10+76. Известны также случаи использования базы 8, например, в ВМ В-5500 фирмы Burroughs.
В большинстве вычислительных машин для упрощения операций над порядками последние приводят к целым положительным числам, применяя так называемый смещенный порядок. Для этого к истинному порядку добавляется целое положительное число — смещение (рис. 2.20). Например, в системе со смещением 128 порядок -3 представляется как 125 (-3 + 128). Обычно смещение выбирается равным половине представимого диапазона порядков. Отметим, что смещенный порядок занимает все биты поля порядка, в том числе и тот, который ранее использовался для записи знака поряljr
Смещенный порядок Модуль мантиссы
Знак т |
|
Рг |
Рм |
|
pi |
ро |
|
m-1 |
т.2 |
|
т-n |
71
Мантисса в числах с ПЗ обычно представляется в нормализованной форме. Это означает, что на мантиссу
налагаются такие условия, чтобы она по модулю была меньше единицы (\q\ < 1), а первая цифра после точки отличалась от нуля. Полученная таким образом мантисса называется нормализованной. Для применяемых ВМ систем счисления можно записать:
- двоичная: X = q2р, (1 > |q| = S);
- восьмеричная: X = q8 р, (1> |q| = ?);
- шестнадцатеричная: X = q16 р, (1> |q| = 1/16).
Если первые i цифр мантиссы равны нулю, для нормализации ее нужно сдвинуть относительно запятой на z разрядов влево с одновременным уменьшением порядка на г единиц. В результате такой операции число не изменяется.
База |
До нормализации |
После нормализации | ||
Порядок |
Мантисса |
Порядок |
Мантисса | |
2 |
100 |
0,000110 |
001 |
0,110000 |
16 |
8 |
0,001x109 |
6 |
0,1 х I900 |
Рис. 2.20. Формат числа с ПЗ со смещенным порядком
В примере для шестнадцатеричной системы после нормализации старшая цифра в двоичном представлении содержит впереди три нуля (0001). Это несколько уменьшает точность представления чисел по сравнению с двоичной системой при одинаковом числе двоичных разрядов, отведенных под мантиссу.
Если для записи числа с ПЗ используется база 2 (q = 2), то часто применяют еще один способ повышения точности представления мантиссы, называемый приемом скрытой единицы. Суть его в том, что в нормализованной мантиссе старшая цифра всегда равна единице (для представления нуля используется специальная кодовая комбинация), следовательно, эта цифра может не записываться, а подразумеваться. Запись мантиссы начинают с ее второй цифры, и это позволяет задействовать дополнительный значащий бит для более точного представления числа. Следует отметить, что значение порядка в данном случае не меняется. Скрытая единица перед выполнением арифметических операций восстанавливается, а при записи результата — удаляется. Таким образом, нормализованная мантисса 0,101000(1) при использовании способа «скрытой единицы» будет иметь вид 0,010001 (в скобках указана цифра, не поместившаяся в поле мантиссы при стандартной записи).
Для более существенного увеличения точности вычислений под число отводят несколько машинных слов, например два. Дополнительные биты, как правило, служат для увеличения разрядности мантиссы, однако в ряде случаев часть из них Может отводиться и для расширения поля порядка. В процессе вычислений может получаться ненормализованное число. В таком случае ВМ, если это предписано командой, автоматически нормализует его.
Рассмотренные принципы представления чисел с ПЗ поясним на примере [200]. rta рис. 2.21 представлен типичный 32-битовый формат числа с ПЗ. Старший (левый) бит содержит знак числа. Значение смещенного порядка хранится в разрядах
72
с 1 -го по 8-й и может находиться в диапазоне от 0 до 255. Для получения фактического значения порядка из содержимого этого поля нужно вычесть фиксированное значение, равное 128. С таким смещением фактические значения порядка могут лежать в диапазоне от -128 до +127. В примере предполагается, что основание системы счисления равно 2. Третье поле слова содержит нормализованную мантиссу со скрытым разрядом (единицей). Благодаря такому приему 23-разрядное поле позволяет хранить 24-разрядную мантиссу в диапазоне от 0,5 до 1,0.
0 1 8 9 31
Рис. 2.21. Типичный 32-битовый формат числа с плавающей запятой
На рис. 2.22 приведены диапазоны чисел, которые могут быть записаны с помощью 32-разрядного слова.
Рис. 2.22. Числа, Представимые в 32-битовых форматах: а — целые числа с фиксированной запятой; б — числа с плавающей запятой
В варианте с ФЗ для целых чисел в дополнительном коде могут быть представлены все целые числа от -231 до 231 - 1, то есть всего 232 различных чисел (см. рис. 2.22, о). Для случая ПЗ возможны следующие диапазоны чисел (см. рис. 2.22, б):
*отрицательные числа между -(1 – 2 -24) х 2127 и -0,5 х 2 -128;
*положительные числа между 0,5 х 2 -128 и (1 - 224) х 2127.
В эту область не включены пять участков:
*отрицательные числа, меньшие чем -(1 - 224) х 2127 — отрицательное переполнение;
73
* отрицательные числа, большие чем -0,5 х 2 -128 — отрицательная потеря значимости;
* положительные числа, меньшие чем 0,5 х 2 -28 — положительная потеря значимости;
* положительные числа, большие чем (1 – 2 -24) х 2127 — положительное переполнение.
Показанная запись числа с ПЗ не учитывает нулевого значения. Для этой цели используется специальная кодовая комбинация. Переполнения возникают, когда в результате арифметической операции получается значение большее, чем можно представить порядком 127 (2120 х 2100 = 2230). Потеря значимости — это когда результат представляет собой слишком маленькое дробное значение (2 -120 х2 -'°° = 2 -230). Потеря значимости является менее серьезной проблемой, поскольку такой результат обычно рассматривают как нулевой.
Следует также отметить, что числа в форме с ПЗ, в отличие от чисел в форме с ФЗ, размещены на числовой оси неравномерно. Возможные значения в начале числовой оси расположены плотнее, а по мере движения вправо — все реже (рис. 2.23). Это означает, что многие вычисления приводят к результату, который не является точным, то есть представляет собой округление до ближайшего значения, представимого в данной форме записи.
Рис. 2.23. Плотность чисел с плавающей запятой на числовой оси
Для формата, изображенного на рис. 2.21, имеет место противоречие между диапазоном и точностью. Если увеличить число битов, отведенных под порядок, расширяется диапазон представимых чисел. Однако, поскольку может быть представлено только фиксированное число различных значений, уменьшается плотность и тем самым точность. Единственный путь увеличения как диапазона, так и точности — увеличение количества разрядов, поэтому в большинстве ВМ предлагается использовать числа в одинарном и двойном форматах. Например, число одинарного формата может занимать 32 бита, а двойного — 64 бита.
Числа с плавающей запятой в разных ВМ имеют несколько различных форматов. В табл. 2.5 приводятся основные параметры для нескольких систем представления чисел в форме с ПЗ. В настоящее время для всех ВМ рекомендован стандарт, разработанный общепризнанным международным центром стандартизации IEEE (Institute of Electrical and Electronics Engineers).
аолица 2.5. Варианты форматов чисел с плавающей запятой'
Параметр |
IBM 390 |
VAX |
IEEE 754 |
Длина слова (бит) |
О: 32; Д: 64 |
0: 32; Д: 64 |
О: 32; Д: 64 |
Порядок (бит) |
7 бит |
8 бит |
О:8;Д:11 |
74 Глава 2. Архитектура системы команд Таблица 2.5 (продолжение)
Параметр |
IBM 390 |
VAX |
IEEE 754 1 |
Мантисса (F) |
О: 6 цифр; Д: 14 цифр |
О: (1) + 23 бита Д:(1) + 55бит |
О: (1) + 23 бита ' Д:(1) + 52бита |
Смещение порядка |
64 |
128 |
К: 127; Д: 1023 |
База |
16 |
2 |
2 |
Скрытая 1 |
Нет |
Да |
Да |
Запятая |
Слева от мантиссы |
Слева от скрытой 1 |
Справа старшего бита мантиссы |
Диапазон F |
(1,16)<F<1 |
0,5<F<1 |
1<F<2 |
Представление F |
Величина со знаком |
Величина со знаком |
Величина со знаком |
Максимальное положительное число |
1663=1076 |
2126= 1038 |
21 024 =10 308 (Д) |
Точность |
O:16-6=lO-7 Д: 16 -14=lO-17 |
O:2-24=l0-7 Д:2 -564=10 -17 |
0:2-23= l0-7 Д:2-524=10 -16 |
Стандарт IEEE 754
Рекомендуемый для всех ВМ формат представления чисел с плавающей запятой определен стандартом IEEE 754. Этот стандарт был разработан с целью облегчить перенос программ с одного процессора на другие и нашел широкое применение практически во всех процессорах и арифметических сопроцессорах.
б
Рис. 2.24. Основные форматы IEEE 754: а — одинарный; б — двойной
Стандарт определяет 32-битовый (одинарный) и 64-битовый (двойной) форматы (рис. 2.24) с 8- и 11-разрядным порядком соответственно. Основанием системы счисления является 2. В дополнение, стандарт предусматривает два расширенных формата, одинарный и двойной, фактический вид которых зависит от конкретной реализации. Расширенные форматы предусматривают дополнитель-
75
биты для порядка (увеличенный диапазон) и мантиссы (повышенная точность). Таблица 2.6 содержит описание основных характеристик всех четырех форматов.
Не все кодовые комбинации в форматах IEEE интерпретируются обычным - некоторые комбинации используются для представления специальных значений Предельные значения порядка, содержащие все нули (0) и все единицы (255 - в одинарном формате и 2047 - в двойном формате), определяют специальные значения.
Таблица 2.6. Параметры форматов стандарта IEEE 754 | ||||
|
Формат | |||
|
одинарный |
одинарный расширенный |
двойной |
двойной расширенный |
Ширина слова, бит |
32 |
>43 |
64 |
>79 |
Ширина порядка, бит |
8 |
>11 |
11 |
>15 |
Смещение порядка |
127 |
Не определено |
1023 |
Не определено |
Максимальный порядок |
127 |
>1023 |
1023 |
> 16 383 |
Минимальный порядок |
-126 |
<-1022 |
-1022 |
< -16 382 |
Диапазон чисел |
10 -38, 10+38 |
Не определен |
10-308, 10-308 |
Не определен |
Длина мантиссы, бит |
23 |
>31 |
52 |
>63 |
Количество порядков |
254 |
Не определено |
2046 |
Не определено |
Количество мантисс |
223 |
Не определено |
252 |
Не определено |
Количество значений |
1,98х231 |
Не определено |
1,99х263 |
Не определено |
Представлены следующие классы чисел:
Порядки в диапазоне от 1 до 254 для одинарного формата и от 1 до 2036 - для двойного формата, используются для представления ненулевых нормализованных чисел. Порядки смещены так, что их диапазон составляет от -126 до +127 для одинарного формата и от -1022 до +1023 - для двойного формата. Нормализованное число требует, чтобы слева от двоичной запятой был единичный бит. Этот бит подразумевается, благодаря чему обеспечивается эффективная ширина мантиссы, равная 24 битам для одинарного и 53 битам - для двойного форматов.
- Нулевой порядок совместно с нулевой мантиссой представляют положительный или отрицательный 0, в зависимости от состояния бита знака мантиссы.
- Порядок, содержащий единицы во всех разрядах, совокупно с нулевой мантиссой представляют положительную или отрицательную бесконечность, в зависимости от состояния бита знака, что позволяет пользователю самому решить, считать ли это ошибкой или продолжать вычисления со значением, равным бесконечности.
76
* Нулевой порядок в сочетании с ненулевой мантиссой представляют ненормализованное число. В этом случае бит слева от двоичной точки равен 0 и фактический порядок равен -126 или -1022. Число является положительным и отрицательным в зависимости от значения знакового бита.
* Кодовая комбинация, в которой порядок содержит все единицы, а мантисса равна 0, используется как признак «не числа» (NAN — Not a Number) и служба для предупреждения о различных исключительных ситуациях.
Упакованные числа с плавающей запятой
В последних версиях АСК, предусматривающих особые команды для обработки мультимедийной информации, помимо упакованных целых чисел исполъзуюется и упакованные числа с плавающей запятой. Так, в уже упоминавшейся технолс гии 3DNow! фирмы AMD имеются команды, служащие для увеличения произвс дительности систем при обработке трехмерных приложений, описываемых числами с ПЗ. Каждая такая команда работает с двумя операндами с плавающей занято: одинарной точности. Операнды упаковываются в 64-разрядные группы, как это показано на рис. 2.25.
В микропроцессорах фирмы Intel, начиная с Pentium III, для аналогичных целей поддержаны команды, реализующие технологию SSE, также ориентированную на параллельную обработку упакованных чисел с ПЗ. Здесь числа объединяются в группы длиной 128 бит, и это позволяет упаковать в группу четыре 32-разрядных числа с ПЗ (числа с одинарной точностью). Позже, в технологии SSE2, которую можно считать дальнейшим развитием SSE, появился формат, где в группу из 128 бит упаковываются два 64-разрядных числа с ПЗ, то есть числа, представленные с двойной точностью.