Преобразование в зонный формат из десятичного формата с плавающей точкой
Иллюстрации
Показать всеИзобретение относится к обработке внутри вычислительной среды, в частности к преобразованию данных из одного формата в другой формат. Технический результат заключается в упрощении компилируемого кода и улучшении производительности, в частности производительности операций память-память. Технический результат достигается за счет машинных команд, которые считывают данные из памяти, преобразуют их в соответствующий десятичный формат с плавающей точкой и записывают их в целевой регистр с плавающей точкой или пару регистров с плавающей точкой. Также предоставляются машинные команды, которые преобразуют десятичный операнд с плавающей точкой в исходном регистре с плавающей точкой или паре регистров с плавающей точкой в данные и сохраняют его в целевой ячейке памяти. 3 н. и 17 з.п. ф-лы, 8 табл., 18 ил.
Реферат
ПРЕДПОСЫЛКИ СОЗДАНИЯ ИЗОБРЕТЕНИЯ
[001] Аспект изобретения относится, в общем, к обработке внутри вычислительной среды, и в частности, к преобразованию данных из одного формата в другой формат.
[002] Данные могут храниться во внутреннем запоминающем устройстве компьютера или во внешнем запоминающем устройстве в ряде различных форматов, включая расширенный двоично-десятичный код обмена информацией (Extended Binary Coded Decimal Interchange, EBCDIC), американский стандартный код для информационного обмена (American Standard for Information Interchange, ASCII), и десятичный с плавающей точкой, среди прочих.
[003] Различные компьютерные архитектуры поддерживают различные форматы данных и могут желать выполнять операции над определенным форматом. В таком случае данные, которые находятся в одном формате, могут потребовать преобразования в желательный формат.
[004] Кроме того, обычно операции, используемые для обработки числовых десятичных данных, хранящихся в форматах EBCDIC или ASCII в базах данных, работают напрямую с запоминающим устройством. Эти операции, называемые десятичными операциями память-память, и производительность этих операций ограничивается латентностью интерфейса памяти. Каждая операция, которая зависит от результатов из предыдущей операции, должна ждать, пока результаты запишутся в память, перед тем как она может начаться. Так как разрыв между латентностью памяти и скоростью процессора продолжает возрастать, относительная производительность этих операций продолжает снижаться.
КРАТКОЕ ИЗЛОЖЕНИЕ
[005] Устраняются недостатки уровня техники и предоставляются преимущества с помощью предоставления компьютерного программного продукта для выполнения машинной команды в центральном процессорном устройстве. Компьютерный программный продукт включает считываемую компьютером запоминающую среду, считываемую обрабатывающим устройством и хранящую команды для выполнения обрабатывающим устройством для выполнения способа. Способ включает, например, получение процессором машинной команды для выполнения, где машинная команда определена для выполнения компьютером согласно архитектуре компьютера, машинная команда включает: по меньшей мере одно поле кода операции для предоставления кода операции, где код операции идентифицирует функцию преобразования в зонный из десятичного с плавающей точкой; поле первого регистра, определяющее первый регистр, причем первый регистр содержит первый операнд; поле второго регистра и поле смещения, причем содержимое второго регистра, указанного полем второго регистра, комбинируется с содержимым поля смещения с образованием адреса второго операнда; и поле маски, поле маски включает одну или более директив, используемых во время выполнения машинной команды; и выполнение машинной команды, выполнение включает: преобразование по меньшей мере части первого операнда в десятичном формате с плавающей точкой в зонный формат; и помещение результата преобразования в ячейку, определенную адресом второго операнда.
[006] В заявке также описываются и заявляются способы и системы, относящиеся к одному или более аспектов данного изобретения. Далее, здесь также описываются и могут заявляться службы, относящиеся к одному или более аспектов данного изобретения.
[007] С помощью методик согласно настоящему изобретению реализуются и другие особенности и преимущества. Другие варианты воплощения и аспекты изобретения излагаются здесь подробно и считаются частью формулы изобретения.
КРАТКОЕ ОПИСАНИЕ И НЕСКОЛЬКО ПРЕДСТАВЛЕНИЙ ЧЕРТЕЖЕЙ
[008] Один или более аспектов настоящего изобретения выделены особо и явно заявлены как примеры в формуле изобретения в конце описания. Вышеуказанное и объекты, особенности и преимущества изобретения понятны из следующего подробного описания с помощью сопровождающих чертежей, в которых:
На ФИГ.1 изображен один вариант реализации вычислительной среды, включающей и использующей один или более аспектов настоящего изобретения;
На ФИГ.2А изображен другой вариант реализации вычислительной среды, включающей и использующей один или более аспектов настоящего изобретения;
На ФИГ.2Б изображены дальнейшие подробности памяти согласно ФИГ.2А, в соответствии с аспектом настоящего изобретения;
На ФИГ.3 изображен общий обзор логики для преобразования из зонного формата в десятичный формат с плавающей точкой в соответствии с аспектом настоящего изобретения;
На ФИГ.4 изображен один вариант формата команды Convert from Zoned (преобразовать из зонного), использующейся в соответствии с аспектом настоящего изобретения;
На ФИГ.5 изображены дальнейшие подробности логики для преобразования из зонного в десятичный с плавающей точкой в соответствии с аспектом настоящего изобретения;
На ФИГ.6 изображен общий обзор логики для преобразования в зонный формат из десятичного формата с плавающей точкой в соответствии с аспектом настоящего изобретения;
На ФИГ.7 изображен один вариант формата команды Convert to Zoned (преобразовать в зонный) из десятичного с плавающей точкой, использующейся в соответствии с аспектом настоящего изобретения;
На ФИГ.8 изображены дальнейшие подробности логики для преобразования в зонный из десятичного с плавающей точкой в соответствии с аспектом настоящего изобретения;
На ФИГ.9 изображен один вариант реализации компьютерного программного продукта, включающего один или более аспектов настоящего изобретения;
На ФИГ.10 изображен один вариант реализации основной компьютерной системы, включающей и использующей один или более аспектов настоящего изобретения;
На ФИГ.11 изображен другой пример компьютерной системы, включающей и использующей один или более аспектов настоящего изобретения;
На ФИГ.12 изображен еще один пример компьютерной системы, содержащей компьютерную сеть, включающую и использующую один или более аспектов настоящего изобретения;
На ФИГ.13 изображена одна из реализации различных элементов компьютерной системы, включающей и использующей один или более аспектов настоящего изобретения;
На ФИГ.14А изображена одна из реализации устройства выполнения компьютерной системы согласно ФИГ.13, включающего и использующего один или более аспектов настоящего изобретения;
На ФИГ.14Б изображена одна из реализации устройства ветвления компьютерной системы согласно ФИГ.13, включающего и использующего один или более аспектов настоящего изобретения;
На ФИГ.14В изображена одна из реализации устройства загрузки/сохранения компьютерной системы согласно ФИГ.13, включающего и использующего один или более аспектов настоящего изобретения;
На ФИГ.15 изображена одна из реализации эмулируемой основной компьютерной системы, включающей и использующей один или более аспектов настоящего изобретения;
ПОДРОБНОЕ ОПИСАНИЕ
[009] Различные компьютерные архитектуры могут поддерживать различные форматы данных, и поддерживаемые форматы данных могут меняться со временем. Например, машины, предлагаемые корпорацией International Business Machines, традиционно поддерживали форматы EBCDIC и ASCII. Более поздние машины начали поддерживать десятичные форматы с плавающей точкой (decimal floating point, DFP) и операции, для которых есть стандарт IEEE (IEEE 754-2008). Однако, для использования операций DFP, данные EBCDIC и ASCII должны быть преобразованы в DFP.
[0010] В соответствии с аспектом настоящего изобретения предоставляется эффективный механизм для преобразования между EBCDIC или ASCII и десятичным с плавающей точкой. В одном примере этот механизм осуществляет преобразование без издержек памяти других методик.
[0011] В одном аспекте настоящего изобретения предоставляются машинные команды, которые считывают данные EBCDIC или ASCII (которые имеют зонный формат) из памяти, преобразуют их в соответствующий десятичный формат с плавающей точкой, и записывают их в целевой регистр с плавающей точкой или пару регистров с плавающей точкой. Эти команды называются в данной заявке длинной командой Convert from Zoned (CDZT) и расширенной командой Convert from Zoned (CXZT).
[0012] В другом аспекте настоящего изобретения предоставляются машинные команды, которые преобразуют десятичный операнд с плавающей точкой (DFP) в исходном регистре с плавающей точкой или паре регистров с плавающей точкой в данные EBCDIC или ASCII и сохраняют его в целевой ячейке памяти. Эти команды называются в данной заявке длинной командой Convert to Zoned (CZDT) и расширенной командой Convert to Zoned (CZXT).
[0013] Один вариант реализации вычислительной среды, включающий и использующий один или более аспектов согласно настоящему изобретению, описывается при помощи ФИГ.1. Вычислительная среда 100 включает, например, процессор 102 (напр., центральное процессорное устройство), память 104 (напр., основную память), и одно или более устройств и/или интерфейсов ввода-вывода (I/O) 106, соединенных между собой через, например, одну или более шин 108 и/или других соединений.
[0014] В одном примере процессор 102 является процессором z/Architecture®, который является частью сервера System z®, предлагаемого корпорацией International Business Machines (IBM®), Армонк, штат Нью-Йорк. Сервер System z® использует архитектуру z/Architecture®, предлагаемую корпорацией International Business Machines, которая определяет логическую структуру и функционирование компьютера. Одна из реализации z/Architecture® описана в публикации IBM®, озаглавленной, "z/Architecture Principles of Operation" ("z/Architecture. Принципы работы"), публикация IBM® номер SA22-7832-08, девятое издание, август 2010 г., которая таким образом включается сюда по ссылке во всей ее целостности. В одном примере сервер выполняет операционную систему, такую как z/OS, также предлагаемая корпорацией International Business Machines. IBM®, z/Architecture® и z/OS® являются зарегистрированными торговыми марками корпорации International Business Machines, Армонк, штат Нью-Йорк, США. Другие названия, использующиеся здесь, могут быть зарегистрированными торговыми марками, торговыми марками или названиями изделий корпорации International Business Machines или других компаний.
[0015] Другой вариант реализации вычислительной среды, включающий и использующий один или более аспектов согласно настоящему изобретению, описывается при помощи ФИГ.2А. В этом примеру вычислительная среда 200 включает, например, собственное центральное процессорное устройство 202, память 204 и одно или более устройств ввода-вывода и/или интерфейсов 206, соединенных между собой посредством, например, одной или более шин 208 и/или других соединений. Как примеры, вычислительная среда 200 может включать процессор PowerPC®, сервер pSeries® или сервер xSeries®, предлагаемые корпорацией International Business Machines, Армонк, штат Нью-Йорк; HP Superdome с процессорами Intel Itanium II®, предлагаемый компанией Hewlett Packard Co., Пало-Альто, штат Калифорния; и/или другие машины на основе архитектур, предлагаемых корпорациями IBM®, Hewlett Packard, Intel, Sun Microsystems или другими. PowerPC®, pSeries® и xSeries® являются зарегистрированными торговыми марками корпорации International Business Machines, Армонк, штат Нью-Йорк, США. Intel® и Itanium II® являются зарегистрированными торговыми марками корпорации Intel, Санта-Клара, Калифорния.
[0016] Собственное центральное процессорное устройство 202 содержит один или более собственных регистров 210, такие как один или более регистров общего назначения и/или один или более регистров специального назначения, использующихся при обработке внутри среды. Эти регистры содержат сведения, которые представляют состояние среды в любой конкретный момент времени.
[0017] Кроме того, собственное центральное процессорное устройство 202 выполняет команды и код, хранящиеся в памяти 204. В одном конкретном примере центральное процессорное устройство выполняет код эмулятора 212, хранящийся в памяти 204. Этот код задействует вычислительную среду, настроенную на одной архитектуре, для эмуляции другой архитектуры. Например, код эмулятора 212 позволяет машинам, основанным на архитектурах, отличных от z/Architecture, таким как процессоры PowerPC®, серверы pSeries®, серверы xSeries®, серверы HP Superdome или другие, эмулировать z/Architecture® и выполнять программное обеспечение и команды, разработанные на основе z/Architecture®.
[0018] Дальнейшие подробности касательно кода эмулятора 212 описаны при помощи ФИГ.2Б. Гостевые команды 250 включают программные команды (напр., машинные команды), которые были разработаны для выполнения в архитектуре иной, нежели таковая собственного ЦПУ 202. Например, гостевые команды 250 могли быть разработаны для выполнения на процессоре z/Architecture® 102, но вместо этого эмулируются на собственном ЦПУ 202 (которое может быть, например, процессором Intel® Itanium II®). В одном примере код эмулятора 212 включает модуль считывания команд 252 для получения одной или более гостевых команд 250 из памяти 204 и опционального обеспечения локальной буферизации полученных команд. Он включает также программу трансляции команд 254 для определения типа гостевой команды, которая была получена, и для трансляции гостевой команды в одну или более соответствующих собственных команд 256. Эта трансляция включает, например, идентификацию функции для выполнения гостевой командой и выбор собственной команды для выполнения этой функции.
[0019] Далее, эмулятор 212 включает программу управления эмуляцией 260, заставляющую собственные команды выполняться. Программа управления эмуляцией 260 может заставить собственное ЦПУ 202 выполнить программу собственных команд, которые эмулируют одну или более ранее полученных гостевых команд, и, по завершению этого выполнения, вернуть управление программе считывания команд для эмуляции получения следующей гостевой команды или группы гостевых команд. Выполнение собственных команд 250 может включать загрузку данных в регистр из памяти 204; запись данных обратно в память из регистра; или выполнение некоторого типа арифметической или логической операции, как определено программой трансляции.
[0020] Каждая программа, например, реализована в программном обеспечении, которое хранится в памяти и выполняется собственным центральным процессорным устройством 202. В других примерах одна или более программ или операций могут быть реализованы в микропрограммном, аппаратном, программном обеспечении или в некоторой их комбинации. Регистры эмулируемого процессора могут быть реализованы с помощью регистров 210 собственного ЦПУ или с помощью ячеек в памяти 204. В вариантах реализации гостевые команды 250, собственные команды 256 и код эмулятора 212 могут находиться в одной памяти или могут быть рассредоточены по различным запоминающим устройствам.
[0021] В данном контексте, микропрограмма включает, напр., микрокод, милликод и/или макрокод процессора. Она включает, например, команды аппаратного уровня и/или структуры данных, используемые в реализации машинного кода высокого уровня. В одном варианте реализации она включает, например, проприетарный код, который обычно поставляется как микрокод, который включает достоверное программное обеспечение или микрокод, специфичный для нижележащего аппаратного обеспечения, и управляет доступом операционной системы к системному аппаратному обеспечению.
[0022] В одном примере гостевая команда 250, которая считывается, транслируется и выполняется, является одной из команд, описываемых здесь. Команда, которая в данном примере является командой z/Architectwe®, считывается из памяти, транслируется и представляется в виде последовательности собственных команд 256 (напр., PowerPC®, pSeries®, xSeries®, Intel®, и т.д.), которая выполняется.
[0023] В другом варианте реализации одна или более команд выполняются в среде другой архитектуры, включая, например, архитектуру, описанную в "Intel® 64 and IA-32 Architectures Software Developer's Manual Volume 1" ("Архитектуры Intel® 64 и IA-32. Руководство разработчика программного обеспечения. Том I"), порядковый номер 253665-022US, ноябрь 2006; "Intel® 64 and IA-32 Architecture Software Developer's Manual Volume 2A" ("Архитектуры Intel® 64 и IA-32. Руководство разработчика программного обеспечения. Том 2A"), порядковый номер 253666-022US, ноябрь 2006; "Intel® Itanium® Architecture Software Developer's Manual Volume 1" ("Архитектура Intel® Itanium®. Руководство разработчика программного обеспечения. Том I"), док. номер 245317-005, январь 2006; "Intel® Itanium® Architecture Software Developer's Manual Volume 2" ("Архитектура Intel® Itanium®. Руководство разработчика программного обеспечения. Том 2"), док. номер 245318-005, январь 2006; и/или "Intel® Itanium® Architecture Software Developer's Manual Volume 3" ("Архитектура Intel® Itanium®. Руководство разработчика программного обеспечения. Том 3"), док. номер 245319-005, январь 2006; каждое из которых таким образом включается сюда по ссылке во всей его целостности.
[0024] Процессоры, описанные здесь, так же как и другие, выполняют команды для осуществления некоторых функций, таких как, например, преобразование между форматами EBCDIC или ASCII и десятичным с плавающей точкой. В одном примере данные EBCDIC или ASCII имеют зонный формат, и поэтому примеры команд включают, например, команды преобразования из зонного в десятичный с плавающей точкой, а также команды преобразования в зонный из десятичного с плавающей точкой, как описано в заявке.
[0025] Перед описанием команд, однако, опишем различные форматы данных, упоминаемые в заявке. Например, в зонном формате четыре правых бита байта называются числовыми битами (N) и обычно содержат код, представляющий десятичную цифру. Четыре левых бита байта называются байтами зоны (Z), за исключением самого правого байта десятичного операнда, где эти биты могут трактоваться либо как зона, либо как знак (S).
[0026] Десятичные цифры в зонном формате могут быть частью большего набора символов, который включает также алфавитные и специальные символы. Зонный формат, таким образом, подходит для ввода, редактирования и вывода числовых данных в удобочитаемой человеком форме. В одном варианте реализации десятичные арифметические команды не работают напрямую с десятичными числами в зонном формате; такие числа сперва преобразуются, например, в один из десятичных форматов с плавающей точкой.
[0027] Десятичные данные с плавающей точкой могут быть представлены в любом из трех форматов данных: коротком, длинном или расширенном. Содержимое каждого формата данных представляет кодированную информацию. Присваиваются специальные коды для различения конечных чисел, неопределенностей (NaN, Not-a-Number) и бесконечных.
[0028] Для конечных чисел в формате используется смещенный порядок. Для каждого формата, используется различное смещение для порядков вида правых единиц (right-umts-view, RUV) и вида левых единиц (left-units-view, LUV). Смещенные порядки являются беззнаковыми числами. Смещенный порядок кодируется самой левой цифрой (leftmost digit, LMD) мантиссы в комбинационном поле. Оставшиеся цифры мантиссы кодируются в поле кодированной ведомой мантиссы.
[0029] Примерами этих форматов данных являются:
Короткий формат DFP
S | Комбинация | Кодированная ведомая мантисса | |
0 | 1 | 12 | 31 |
[0030] Когда операнд в коротком формате DFP загружается в регистр с плавающей точкой, он занимает левую половину регистра, а правая половина остается неизменной.
Длинный формат DFP
S | Комбинация | Кодированная ведомая мантисса | |
0 | 1 | 14 | 31 |
Кодированная ведомая мантисса (продолжение) | |||
32 | 63 |
[0031] Когда операнд в длинном формате DFP загружается в регистр с плавающей точкой, он занимает весь регистр.
Расширенный формат DFP
S | Комбинация | Кодированная ведомая мантисса | |
0 | 18 | 31 | |
Кодированная ведомая мантисса (продолжение) | |||
32 | 63 | ||
Кодированная ведомая мантисса (продолжение) | |||
64 | 95 | ||
Кодированная ведомая мантисса (продолжение) | |||
96 | 127 |
[0032] Операнд в расширенном формате DFP занимает пару регистров с плавающей точкой. Левые 64 бит занимают весь регистр с низшим номером в паре, а правые 64 бит занимают весь регистр с высшим номером.
[0033] Бит знака находится в бите 0 каждого формата, и равен, например, нулю для положительного и единице для отрицательного.
[0034] Для конечных чисел комбинационное поле включает смещенный порядок и самую левую цифру мантиссы; для NaN и бесконечностей, это поле включает коды для их идентификации.
[0035] Если биты 1-5 формата находятся в диапазоне 00000-11101, операнд является конечным числом. Два самых левых бита смещенного порядка и самая левая цифра мантиссы кодируются в битах 1-5 формата. Бит 6 в конце комбинационного поля включает остаток смещенного порядка.
[0036] Если биты 1-5 формата равны 11110, операнд является бесконечностью. Все биты в комбинационном поле справа от бита 5 формата составляют зарезервированное поле для бесконечности. Ненулевое значение в зарезервированном поле приемлемо для исходной бесконечности; зарезервированное поле устанавливается в нуль в результирующей бесконечности.
[0037] Если биты 1-5 формата равны 11111, операнд является NaN, а бит 6, называющийся битом SNaN, далее различает QNaN от SNaN. Если бит 6 равен нулю, то это QNaN; иначе, это SNaN. Все биты в комбинационном поле справа от бита 6 формата составляют зарезервированное поле для NaN. Ненулевое значение в зарезервированном поле приемлемо для исходного NaN; зарезервированное поле устанавливается в нуль в результирующем NaN.
[0038] Нижеприведенная таблица обобщает кодировку и схему комбинационного поля. В таблице смещенный порядок конечного числа является конкатенацией двух частей: (1) двух самых левых бит, выведенных из бит 1-5 формата, и (2) оставшихся бит в комбинационном поле. Например, если комбинационное поле короткого формата DFP содержит двоичное 10101010101, оно представляет смещенный порядок двоичного 10010101 и самую левую цифру мантиссы 5.
Биты | Бит | Тип | Смещенный | LMD |
1 2 3 4 5 | 6 | Порядок | ||
00000 | m | Конечное число | 00ξRBE | 0 |
00001 | m | Конечное число | 00ξRBE | 1 |
00010 | m | Конечное число | 00ξRBE | 2 |
00011 | m | Конечное число | 00ξRBE | 3 |
00100 | m | Конечное число | 00ξRBE | 4 |
00101 | m | Конечное число | 00ξRBE | 5 |
00110 | m | Конечное число | 00ξRBE | 6 |
00111 | m | Конечное число | 00ξRBE | 7 |
01000 | m | Конечное число | 01ξRBE | 0 |
01001 | m | Конечное число | 01ξRBE | 1 |
01010 | m | Конечное число | 01ξRBE | 2 |
01011 | m | Конечное число | 01ξRBE | 3 |
01100 | m | Конечное число | 01ξRBE | 4 |
01101 | m | Конечное число | 01ξRBE | 5 |
01110 | m | Конечное число | 01ξRBE | 6 |
01111 | m | Конечное число | 01ξRBE | 7 |
10000 | m | Конечное число | 10ξRBE | 0 |
10001 | m | Конечное число | 10ξRBE | 1 |
10010 | m | Конечное число | 10ξRBE | 2 |
10011 | m | Конечное число | 10ξRBE | 3 |
10100 | m | Конечное число | 10ξRBE | 4 |
10101 | m | Конечное число | 10ξRBE | 5 |
10110 | m | Конечное число | 10ξRBE | 6 |
10111 | m | Конечное число | 10ξRBE | 7 |
11000 | m | Конечное число | 00ξRBE | 8 |
11001 | m | Конечное число | 00ξRBE | 9 |
11010 | m | Конечное число | 01ξRBE | 8 |
11011 | m | Конечное число | 01ξRBE | 9 |
Биты | Бит | Тип | Смещенный | LMD |
1 2 3 4 5 | 6 | Порядок | ||
11100 | m | Конечное число | 10ξRBE | 8 |
11101 | m | Конечное число | 10ξRBE | 9 |
11110 | r | Бесконечность1 | -- | -- |
11111 | 0 | QNaN2 | -- | -- |
11111 | 1 | SNaN2 | -- | -- |
Пояснение: | ||||
-- Не применимо. | ||||
ξ Конкатенация. | ||||
1 Все биты в комбинационном поле справа от бита 5 формата составляют зарезервированное поле для бесконечности. | ||||
2 Все биты в комбинационном поле справа от бита 6 формата составляют зарезервированное поле для NaN. | ||||
LMD Самая левая цифра мантиссы. | ||||
m Бит 6 является частью оставшегося смещенного порядка. | ||||
RBE Оставшийся смещенный порядок. Включает все биты в комбинационном поле справа от бита 5 формата. | ||||
r Бит 6 зарезервирован для бесконечности. |
[0039] Поле кодированной ведомой мантиссы включает кодированное десятичное число, которое представляет цифры ведомой мантиссы. Ведомая мантисса включает все цифры мантиссы, кроме самой левой цифры. Для бесконечностей, ненулевые цифры ведомой мантиссы приемлемы для исходной бесконечности; все цифры ведомой мантиссы в результирующей бесконечности устанавливаются в нули, если не определено иное. Для NaN, это поле включает диагностические сведения, называемые полезной нагрузкой.
[0040] Поле кодированной ведомой мантиссы является множеством 10-битных блоков, называющихся деклетами. Количество деклетов зависит от формата. Каждый деклет представляет три десятичные цифры в 10-битном значении.
[0041] Значения конечных чисел в различных форматах представлены в следующей таблице:
Формат | Величина | |
Вид левых единиц | Вид правых единиц | |
Короткий | !10e-95%(d0.d1d2…d6) | !10e-101%(d0d1d2…d6) |
Длинный | !10e-383%(d0.d1d2…d15) | !10e-398%(d0d1d2…d15) |
Расширенный | !10e-6143%(d0.d1d2…d33) | !10e-6176%(d0.d1d2…d33) |
Пояснение:d0.d1d2…dp-1 Мантисса в виде левых единиц. Десятичная точка находится непосредственно справа от самой левой цифры, a d1 является десятичной цифрой, где 0 [i[(р-1), а р является точностью формата. |
d0d1d2…dp-1 Мантисса в виде правых единиц. Десятичная точка находится справа от самой правой цифры, a d1 является десятичной цифрой, где 0 [i[(р-1), а р является точностью формата. | |
e Смещенный порядок. |
[0042] Термин «мантисса» используется для обозначения, например, следующего:
[0043] 1. Для конечных чисел, мантисса включает все цифры ведомой мантиссы, дополненные слева самой левой цифрой мантиссы, выведенной из комбинационного поля.
[0044] 2. Для бесконечностей и NaN, мантисса содержит все цифры ведомой мантиссы, дополненные слева нулем.
[0045] Для конечного числа, цифры мантиссы DFP начинаются с самой левой ненулевой цифры мантиссы и заканчиваются самой правой цифрой мантиссы.
[0046] Для конечного числа, количество цифр мантиссы DFP равняется разности вычитания количества ведущих нулей из точности формата. Количество ведущих нулей равно количеству нулей в мантиссе слева от самой левой ненулевой цифры.
[0047] В дополнение к вышесказанному, существует плотно упакованный десятичный (densely packed decimal, DPD) формат. Примеры отображения 3-значного десятичного числа (000-999) на 10-битное значение, называемое деклетом, показаны в таблице ниже. Пункты DPD показаны в шестнадцатеричном виде. Первые две цифры десятичного числа показаны в левом крайнем столбце, а третья цифра вдоль верхней строки.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | |
00_ | 000 | 001 | 002 | 003 | 004 | 005 | 006 | 007 | 008 | 009 |
01_ | 010 | 011 | 012 | 013 | 014 | 015 | 016 | 017 | 018 | 019 |
02_ | 020 | 021 | 022 | 023 | 024 | 025 | 026 | 027 | 028 | 029 |
03_ | 030 | 031 | 032 | 033 | 034 | 035 | 036 | 037 | 038 | 039 |
04_ | 040 | 041 | 042 | 043 | 044 | 045 | 046 | 047 | 048 | 049 |
05_ | 050 | 051 | 052 | 053 | 054 | 055 | 056 | 057 | 058 | 059 |
06_ | 060 | 061 | 062 | 063 | 064 | 065 | 066 | 067 | 068 | 069 |
07_ | 070 | 071 | 072 | 073 | 074 | 075 | 076 | 077 | 078 | 079 |
08_ | 00А | 00В | 02А | 02В | 04А | 04В | 06А | 06В | 04Е | 04F |
09_ | 01А | 01В | 03А | 03В | 05А | 05В | 07А | 07В | 05Е | 05F |
10_ | 080 | 081 | 082 | 083 | 084 | 085 | 086 | 087 | 088 | 089 |
90_ | 08С | 08D | 18C | 18D | 28C | 28D | 38C | 38D | 0AE | 0AF |
91_ | 09С | 09D | 19C | 19D | 29C | 29D | 39C | 39D | 0BE | 0BF |
92_ | 0АС | 0AD | 1AC | 1AD | 2AC | 2AD | 3AC | 3AD | 1AE | 1AF |
93_ | 0ВС | 0BD | 1BC | 1BD | 2BC | 2BD | 3BC | 3BD | 1BE | 1BF |
94_ | 0СС | 0CD | 1CC | 1CD | 2CD | 2CD | 3CC | 3CD | 2AE | 2AF |
95_ | 0DC | 0DD | 1DC | 1DD | 2DC | 2DD | 3DC | 3DD | 2BE | 2BF |
96_ | 0ЕС | 0ED | 1EC | 1ED | 2EC | 2ED | 3EC | 3ED | 3AE | 3AF |
97_ | 0FC | 0FD | 1FC | 1FD | 2FC | 2FD | 3FC | 3FD | 3BE | 3BF |
98_ | 08Е | 08F | 18E | 18F | 28E | 28F | 38E | 38F | 0EE | 0EF |
99_ | 09Е | 09F | 19E | 19F | 29E | 29F | 39E | 39F | 0FE | 0FF |
[0048] Примеры отображения 10-битного деклета на 3-значное десятичное число показаны в таблице ниже. Значение 10-битного деклета разделено на 6-битный индекс, показанный в левом столбце, и 4-битный индекс, показанный вдоль верхней строки, оба представлены в шестнадцатеричном виде.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | А | В | С | D | Е | F | |
00_ | 000 | 001 | 002 | 003 | 004 | 005 | 006 | 007 | 008 | 009 | 080 | 081 | 800 | 801 | 880 | 881 |
01_ | 010 | 011 | 012 | 013 | 014 | 015 | 016 | 017 | 018 | 019 | 090 | 091 | 810 | 811 | 890 | 891 |
02_ | 020 | 021 | 022 | 023 | 024 | 025 | 026 | 027 | 028 | 029 | 082 | 083 | 820 | 821 | 808 | 809 |
03_ | 030 | 031 | 032 | 033 | 034 | 035 | 036 | 037 | 038 | 039 | 092 | 093 | 830 | 831 | 818 | 819 |
04_ | 040 | 041 | 042 | 043 | 044 | 045 | 046 | 047 | 048 | 049 | 084 | 085 | 840 | 841 | 088 | 089 |
05_ | 050 | 051 | 052 | 053 | 054 | 055 | 056 | 057 | 058 | 059 | 094 | 095 | 850 | 851 | 098 | 099 |
06_ | 060 | 061 | 062 | 063 | 064 | 065 | 066 | 067 | 068 | 069 | 086 | 087 | 860 | 861 | 888 | 889 |
07_ | 070 | 071 | 072 | 073 | 074 | 075 | 076 | 077 | 078 | 079 | 096 | 097 | 870 | 871 | 898 | 899 |
08_ | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 180 | 181 | 900 | 901 | 980 | 981 |
09_ | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 190 | 191 | 910 | 911 | 990 | 991 |
0А_ | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 182 | 183 | 920 | 921 | 908 | 909 |
*
*
*
37_ | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 696 | 697 | 876 | 877 | 898* | 899* |
38_ | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 780 | 781 | 906 | 907 | 986 | 987 |
39_ | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 790 | 791 | 916 | 917 | 996 | 997 |
3А_ | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 782 | 783 | 926 | 927 | 968 | 969 |
3В_ | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 792 | 793 | 936 | 937 | 978 | 979 |
3С_ | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 784 | 785 | 946 | 947 | 788 | 789 |
3D_ | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 794 | 795 | 956 | 957 | 798 | 799 |
3Е_ | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | 768 | 786 | 787 | 966 | 967 | 988* | 989* |
3F_ | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 796 | 797 | 976 | 977 | 998* | 999* |
* Результат отображается из неканонического деклета. |
[0049] В соответствии с аспектом настоящего изобретения предоставляются команды для преобразования из зонного формата в десятичный с плавающей точкой. В одном варианте реализации существует два типа команд преобразования из зонного в десятичный с плавающей точкой, включая длинную команду Convert from Zoned (CDZT), и расширенную команду Convert from Zoned (CXZT), каждая из которых описывается ниже. Эти команды предоставляют эффективные средства для преобразования данных из EBCDIC или ASCII непосредственно в памяти в десятичные форматы с плавающей точкой в регистре.
[0050] Например, согласно ФИГ.3, в одном варианте реализации, каждая машинная команда считывает данные EBCDIC или ASCII из памяти, ШАГ 300; преобразует их в соответствующий десятичный формат с плавающей точкой, ШАГ 302; и записывает их в целевой регистр с плавающей точкой или пару регистров с плавающей точкой, ШАГ 304.
[0051] Длинная команда Convert from Zoned, CDZT, считывает данные операнда из заданной ячейки памяти, преобразует их в операнд DFP двойной точности с нулевым порядком, и записывает их в заданный целевой регистр с плавающей точкой. Расширенная команда Convert from Zoned, CXZT, считывает данные операнда из заданной ячейки памяти, преобразует их в операнд DFP расширенной точности с нулевым порядком, и записывает их в заданную целевую пару регистров с плавающей точкой. Количество байт в исходной ячейке памяти задается в команде и может быть от 1 до 16 байт для CDZT или от 1 до 34 байт для CXZT. Все цифры исходного операнда проверяются на допустимость кодов цифр. Поле знака в команде указывает, что полубайт знака исходного операнда следует обработать. Если поле знака установлено, знак проверяется на допустимость кода знака. При условии допустимости, знак результирующего DFP устанавливается в тот же знак, что указан полубайтом знака исходного операнда. Если обнаружен недопустимый код цифры или знака, распознается исключение десятичных данных.
[0052] В одном варианте реализации каждая из команд Convert from Zoned имеет одинаковый формат (формат RSL-b), пример которого изображен на ФИГ.4. Как изображено в одном варианте реализации, формат 400 команды Convert from Zoned включает, например, следующие поля:
[0053] Поля кода операции (Opcode fields) 402a, 402b: Поля кода операции предоставляют код операции, который указывает функцию, выполняемую командой. К примеру, один определенный код операции определяет функцию как длинную команду Convert from Zoned, а другой предопределенный код операции обозначает ее как расширенную команду Convert from Zoned.
[0054] Поле длины (Length field) (L2) 404: Поле длины 404 определяет длину (напр., в байтах) второго операнда. К примеру, поле длины включает код длины от 0 до 33 для расширенной команды Convert to Zoned, и код длины от 0 до 15 для длинной команды Convert from Zoned.
[0058] Поле базового регистра (Base register field) (В2) 406: Поле базового регистра определяет регистр общего назначения, содержимое которого прибавляется к содержимому поля смещения для получения адреса второго операнда.
[0056] Поле смещения (Displacement field) (D2) 408: Поле смещения включает содержимое, которое прибавляется к содержимому регистра общего назначения, определенного полем базового регистра, для получения адреса второго операнда.
[0057] Поле регистра (Register field) (R1) 410: Поле регистра определяет регистр, содержимое которого является первым операндом. Регистр, включающий первый операнд, иногда называется ячейкой первого операнда.
[0058] Поле маски (Mask field) (М3) 412: Поле маски включает, например, директиву знака (S) (напр., бит), который в одном примере является битом 0 поля М3. Если этот бит нуль, второй операнд не имеет поля знака, и бит знака результата первого операнда DFP устанавливается в 0. Если единица, второй операнд имеет знак. То есть, четыре самых левых бита самого правого байта являются знаком. Бит знака результата первого операнда DFP устанавливается в нуль, если поле знака обозначает положите