Московский государственный университет путей сообщения
Опубликован: 11.04.2006 | Доступ: свободный | Студентов: 1311 / 300 | Оценка: 4.39 / 4.00 | Длительность: 17:21:00
ISBN: 978-5-9556-0036-1
Специальности: Разработчик аппаратуры
Лекция 2:

Архитектура zSeries

Система команд процессора

Команда, исполняемая процессором, в общем случае включает код операции (code of operation - COP), определяющий тип выполняемой операции, и адресную часть, задающую используемые в операции операнды. Операнды команд относятся к одному из трех типов:

  • непосредственные, заданные в командах;
  • регистровые, расположенные в регистрах процессора;
  • операнды, хранящиеся в памяти.

Разрядности операндов, используемых в командах z/Architecture, определяются кодом операции и дополнительными управляющими кодами в регистрах процессора. Для использования в одной команде операндов разной разрядности в список команд z/Architecture включены дополнительные команды. Биты и байты в операндах нумеруются слева направо от 0. Бит 0 соответствует старшему разряду.

Непосредственные операнды являются 8-, 16- или 32-разрядными константами, задаваемыми полем I в адресной части команды.

Регистровые операнды могут находиться в одном из программно доступных регистров процессора и либо прямо адресуются четырехразрядным адресом в команде (поле R), либо подразумеваются неявно кодом операции. Форматы регистровых операндов определяются типом операции и разрядностью используемых регистров.

Операнды в памяти могут включать один или более байт, адресуемых целыми неотрицательными числами 0, 1, 2... Байты из группы соседних ячеек образуют многобайтные поля или операнды, адресуемые младшим из адресов. В архитектуре zSeries используются операнды фиксированной и переменной длины. Для представления операндов фиксированной длины используются форматы байта, полуслова (2 байта), слова (4 байта), двойного слова (8 байт) и учетверенного слова (16 байт), которые целесообразно с точки зрения производительности размещать в полях ОП, имеющих определенные граничные адреса, кратные степени 2 (табл. 2.1). Операнды переменной длины адресуются младшим из группы занимаемых адресов с указанием длины (числа байт) в команде либо непосредственно (4- или 8-разрядное поле L), либо в виде ссылки на регистр GR, содержащий код длины.

Таблица 2.1. Адресация операндов фиксированной длины
Операнды Адреса памяти \to
Байт 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
Полуслово (2 байта) 0 2 4 6 8 10 12 14 16
Слово (4 байта) 0 4 8 12 16
Двойное слово (8 байт) 0 8 16
Учетверенное слово (16 байт) 0 16

В командах z/Architecture допускается использование 24-, 31-разрядных адресов, размещаемых в формате слова, и 24-, 31-, 64-разрядных адресов - в формате двойного слова (табл. 2.2). Разрядность адреса определяется битами 31,32 в слове состояния программы PSW. Такой способ управления разрядностью позволяет в рамках одной архитектуры применять различные комбинации разрядностей адресов и операндов, используемых в z/Architecture и более ранних архитектурах. Ранее разработанные программы для 32-разрядных операндов могут быть исполнены в сочетании с 64-разрядной адресацией и, наоборот, 31-разрядная адресация может применяться совместно с 64-разрядной арифметикой. Новые дополнительные команды z/Architecture допускают использование 32-разрядных и 64-разрядных операндов в одной команде. Зависимость способа исполнения команд не только от кода операции, но и от способа адресации принято называть модальностью команд. Архитектура zSeries допускает тримодальную адресацию (по числу вариантов разрядности адреса). Большинство команд z/Architecture являются немодальными, что позволило сохранить без изменений исполнение команд предшествующих архитектур.

Таблица 2.2. Форматы адресов
а) архитектура с 24-, 31-разрядными адресами
0
8 		31
24-разрядный адрес
31-разрядный адрес

б) z/Architecture
0 33
41 		63
24-разрядный адрес
31-разрядный адрес
64-разрядный адрес

Форматы команд z/Architecture приведены на рис 2.3. Назначение используемых в командах полей пояснено в таблице 2.3. Команды имеют длину 1, 2 или 3 полуслова и относятся к одному из 21 форматов: E, I, RR, RRE, RRF, RX, RXE, RXF, RXY, RS, RSY, RSL, RSI, RI, RIE, RIL, SI, SIY, S, SSE, SS. Формат RRF имеет три модификации, форматы RS, RSY, RIL - по две модификации, а SS - 4 модификации. Длина команды определяется двумя старшими битами COP:

Старшие биты COP Длина команды (число полуслов)
00 1
01 2
10 2
11 3

z/Architectuire включает форматы всех команд предшествующих архитектур с одним или двумя байтами COP (первый и второй байты команд в разрядах 0-15). Новые команды получены в основном за счет неиспользованных кодов COP или путем добавления второго байта COP в шестой байт команд (разряды 40-47 в форматах RXE, RXF, RXY, RSY, RSE, RSL, RIE и SIY). Кодовые пространства COP команд z/Architecture приведены в Приложении 1.

Форматы команд Z900

Рис. 2.3. Форматы команд Z900
Таблица 2.3. Поля, используемые в форматах команд z/Architecture
COP Код операции команды, определяющий тип операции
1, 2, 3, 4 Индексы, указывающие на 1, 2, 3 и 4 операнды команды
R1, R2, R3 Номера регистров
B1, B2, B4 Номера базовых регистров
X2 Номера индексных регистров
D1, D2, D4, DL1, DH1, DL2, DH2 Поля смещения (L - младшая часть смещения, H - старшая часть смещения)
M1, M3, M4 Поля маски
I, I2 Поля непосредственных операндов
L, L1, L2 Поля длины операндов

Генерация адресов операндов (АО), размещенных в памяти, основана на косвенно-регистровой адресации, когда адрес берется из регистра, заданного полем R команды, либо на вычислении путем сложения содержимого базового (B), индексного (X) регистров и смещения D:

АО = (B) + (X) + D

Разрядность базового и индексного регистров определяется типом команд и способом адресации. Разрядность смещения равна 12 либо 20 (расширенный формат). В последнем случае используются два поля смещения: DL - младшие 12 бит, DH - старшие 8 бит. При суммировании база и индекс рассматриваются как целые двоичные числа, 12-разрядное смещение является целым без знака, а 20-разрядное смещение расширенного формата задано как целое со знаком. Нулевые значения номеров базового B и индексного X регистров означают отсутствие соответствующих им компонентов при формировании адреса. Если один и тот же регистр используется в команде для формирования адреса и в качестве приемника операнда, первым выполняется формирование адреса. При формировании адреса с использованием 64-разрядного формата коды базы, индекса и смещения меньшей разрядности дополняются в старших разрядах нулями, либо значениями знакового разряда. При формировании адресов с разрядностью 32, 24 старшие биты используемых регистров сохраняются без изменения.

Список команд z/Architecture, сгруппированных по классам, приведен в Приложении 2. Для большинства команд дано краткое описание выполняемой операции и ее характеристики. Подробное описание команд можно найти в [2.1].

В системе команд z/Architecture предусмотрено пять классов операций:

  • основные (или базовые): целочисленная двоичная арифметика, логические операции, переходы и др.;
  • десятичные: операции над десятичными числами;
  • с плавающей точкой: поддержка и реализация операций с плавающей точкой в двоичном (BFP) и шестнадцатеричном (HFP) форматах;
  • управления: операции для управления работой процессора;
  • ввода-вывода: управление операциями ввода-вывода.

Класс основных команд включает команды z/Architecture с операциями над числами с фиксированной точкой. Предусмотрено использование операций над целыми числами со знаком и без знака, логическими данными. Для представления чисел применяются, в основном, дополнительные, а также обратные коды.

Операции над десятичными числами выделены в особый класс. Десятичные команды выполняют операции десятичной арифметики и преобразований над десятичными операндами. Десятичные операнды размещаются всегда в основной памяти и поэтому большинство десятичных команд имеют формат SS (память-память). Длина операндов определяется полем L в командах. Используются две формы представления десятичных чисел: зонный и упакованный форматы (табл. 2.4). В зонном формате старшие четыре бита каждого байта операнда содержат код зоны, а младшие четыре бита содержат двоично-десятичную цифру.

Таблица 2.4. Форматы десятичных операндов
а) Зонный формат:
зона цифра зона цифра ... зона цифра зона/знак цифра
б) Упакованный формат:
цифра цифра цифра цифра ... цифра цифра цифра знак
с) Кодирование:
коды значения
0000 \div 1001 цифры
1010, 1100, 1110 знак "плюс"
1011, 1101 знак "минус"
1111 зона, знак "плюс"

Знак числа задается вместо зоны в крайнем правом байте операнда. Зонный формат может быть частью буквенно-цифровой строки с длиной до 256 байт, он используется для ввода-вывода и редактирования десятичной информации. В упакованном формате каждый байт содержит две цифры, а знак задается вместо крайней правой цифры. Упакованный формат имеет длину до 16 байт и используется для выполнения операций десятичной арифметики.

Команды с плавающей точкой используют два типа представления операндов в зависимости от применяемого основания характеристики:

  • шестнадцатеричное - HFP (Hexadecimal Floating Point),
  • двоичное - BFP (Binary Floating Point).
Таблица 2.5. Форматы чисел с плавающей точкой
Форматы HFP 0 7 31 63 64 70 128
S Порядок Мантисса (6 цифр)
S Порядок Мантисса (14 цифр)
S Порядок Мантисса (старшие 14 цифр) S Порядок Мантисса (младшие 14 цифр)
Не использ.
Форматы BFP 0 8 11 15 31 63 128
S Порядок Мантисса (23 бита)
S Порядок Мантисса (52 бита)
S Порядок Мантисса (112 бит)

Формат операндов может быть коротким (32 бита), длинным (64 бита) и расширенным (128 бит). Форматы чисел с плавающей точкой двух типов представлены на табл. 2.5. Числа состоят из трех компонентов: знака числа, порядка со знаком и мантиссы. Знак числа определяется битом S (S=0 - число положительное, S=1 - число отрицательное). Порядок определяет степень, в которую возводится основание, равное 16 для HFP чисел и 2 для BFP чисел. Поле порядка в форматах HFP имеет одну и ту же длину 7 бит, а в форматах BFP - различную для разных форматов: 8, 11 или 15 бит. В семиразрядном поле порядка для HFP чисел указывается смещенный порядок (characteristic), формируемый путем прибавления 64 к порядку, изменяющемуся в диапазоне -64 \div +63. Для чисел BFP формируется смещенный порядок с отрицательным нулем (biased exponent), вычисляемый путем прибавления 127 (для короткого формата), 1023 (для длинного формата), 16383 (для расширенного формата). Мантисса М для чисел HFP представляется дробным числом (запятая фиксирована перед старшим разрядом) и может быть нормализованной (старшая цифра мантиссы отлична от нуля: 1 > |М| > 1/16) и ненормализованной (unnormalize), что допускает множественное представление одного и того же числа. Мантисса для чисел BFP также содержит дробную часть с запятой перед старшим разрядом, однако включает дополнительный подразумеваемый разряд, находящийся слева от запятой, и всегда нормализована 2 > |М| > 1 (дополнительный разряд равен 1). Для малых чисел BFP, которые невозможно представить в нормализованном виде, допускается единственное ненормализованное (denormalize) представление (дополнительный разряд равен 0). Таким образом, числа BFP всегда имеют единственное представление.

Параметры и диапазоны представления чисел в форматах BFP приведены в таблице 2.6. В таблице 2.7 приведены сравнительные оценки диапазонов чисел разных типов и форматов.

Таблица 2.6. Параметры и диапазоны чисел с плавающей точкой в форматах BFP
Параметры и диапазоны Короткий формат (32 бита) Длинный формат (64 бита) Расширенный формат (128 бит)
Разрядность порядка 8 11 15
Разрядность мантиссы 23 52 112
Максимальный порядок 127 1023 16383
Минимальный порядок -126 -1022 -16382
Смещение порядка 127 1023 16383
Модуль максимального числа (1-2-24)x2128 \approx 3.4x1038 (1-2-53)x21024 \approx 1.8x10308 (1-2-113)x216384 \approx 1.2x104932
Модуль минимального числа (нормализованного) 1.0x2-126 \approx 1.2x10-38 1.0x2-1022 \approx 2.2x10-308 1.0x2-16382 \approx 3.4x10-4932
Наименьшее представляемое число (ненормализованное) 1.0x2-149 \approx 1.4x10-45 1.0x2-1074 \approx 4.9x10-324 1.0x2-16494 \approx 6.5x10-4966
Таблица 2.7. Диапазоны представления чисел с плавающей точкой
  Тип FP Короткий формат Длинный формат Расширенный формат
Максимальные значения BFP \pm 3.4x10+38 \pm 1.81x0+308 \pm 1.8x10+4932
HFP \pm 7.2x10+75 \pm 7.2x10+75 \pm 7.2x10+75
Минимальные значения BFP \pm 1.2x10-38 \pm 2.2x10-308 \pm 3.4x10-4932
HFP \pm 5.5x10-79 \pm 5.5x10-79 \pm 5.5x10-79
Минимальные ненормализованные значения BFP \pm 1.4x10-45 \pm 4.9x10-324 \pm 6.5x10-4966
HFP \pm 5.2x10-85 \pm 1.2x10-94 \pm 1.7x10-111

В командах с плавающей точкой используются операнды, размещенные в памяти и регистрах. Предусмотрено 16 64-разрядных регистров, в которых операнды короткого формата занимают левую старшую половину (без изменения младшей), а для расширенного формата используются пары регистров, как показано на рис. 2.2. Регистры 0, 2, 4, 6 использовались в предшествующих архитектурах, остальные 12 регистров добавлены и могут применяться при установке соответствующего бита в управляющем регистре 0.

Для управления операциями с плавающей точкой при возникновении особых ситуаций по данным (переполнение, потеря значимости и др.) используется дополнительный регистр управления операциями с плавающей точкой (Floating-Point-Control - FPC) в соответствии со стандартом IEEE. Поле маски (Masks) (табл. 2.8) предназначено для маскирования прерываний в пяти перечисленных особых ситуациях. Поле флагов используется для фиксации особых ситуаций без учета поля маски. Поле DXС (Data Exception Code) предназначено для хранения кода особых ситуаций, загружаемого при обработке прерываний. Поле RM определяет способ округления результата.

Таблица 2.8. Регистр управления операциями с плавающей точкой (FPC)
0  байт 0    7
8  байт 1   15
16  байт 2   23
24  байт 3    31
I I I I I
M M M M M 0 0 0
i z o u x
S S S S S
F F F F F 0 0 0
i z o u x
i z o u x
0 0 0 0 0 0 RM
Masks резерв Flags резерв DXC резерв

Обозначения:

IMi, SFi - маска и флаг недопустимой операции;

IMz, SFz - маска и флаг деления на 0;

IMz, SFz - маска и флаг переполнения;

IMz, SFz - маска и флаг потери значимости:

IMz, SFz - маска и флаг неточности;

DXC - код флагов прерываний;

RM - биты управления округлением.

Команды управления и ввода-вывода относятся к классам привилегированных или частично привилегированных команд. Привилегированные команды (все команды ввода-вывода и часть команд управления) могут исполняться только в режиме работы процессора СУПЕРВИЗОР. Частично привилегированные команды (часть команд управления) могут исполняться в режиме работы процессора ЗАДАЧА при наличии разрешающих условий.