Преобразование данных

 

Теперь, вероятно, вы уже поняли, в чем заключается проблема, связанная с преобразованием данных. Раньше считывание десятичных чисел с карт мы выполняли с помощью макро RWD. Результатом работы RWD было полное слово, содержащее исходное число, записанное в двоичной форме. Выполнение RWD на самом деле заключалось в вызове подпрограммы преобразования исходных EBCDIC-кодов в зонный формат, зонного формата в упакованный и, наконец, упакованного в обычную двоичную запись. WWD производило описанные преобразования в обратном порядке, и в конце концов результирующая строка EBCDIC-кодов выводилась устройством печати. Прочитав данную главу, вы сможете обходиться без макро RWD и WWD, поскольку вам будет известно, как можно организовать выполняемые ими преобразования без них.

На рис. 15.2 схематически изображен весь процесс преобразования Данных. Прямоугольниками отмечены различные форматы. Каждая стрелка, означающая преобразование, снабжена указанием, что необходимо сделать для выполнения этого преобразования. Указания относительно прямых преобразований помещены сверху соответствующих стрелок, указания, касающиеся обратных,— снизу

Рис. 15.2. Взаимосвязь преобразований для рассматриваемых форматов данных.

Пусть необходимо провести преобразование числа, отперфорированного на карте, в двоичную форму. Процесс преобразования состоит из следующих шагов:

А1. Устройство чтения с перфокарт осуществляет перевод кодов Холлерита в коды EBCDIC. Полученная строка кодов EBCDIC записывается в память.

А2. Для определения знака числа исследуется знаковый символ, при этом предполагается, что выполнены обычные соглашения относительно кодирования знаков. Такое исследование обычно означает проверку на наличие знаков + или — перед числом, а также, возможно, на отсутствие знака. Если код знака присутствует, то он удаляется и в код последнего символа вносится соответствующее изменение для получения зонного формата.

АЗ. По команде PACK число из зонного формата преобразуется в упакованный формат. Полученное число можно использовать в качестве операнда в командах десятичной арифметики.

А4. По команде CVB (Convert to Binary — ПРЕОБРАЗОВАНИЕ В ДВОИЧНУЮ) число из упакованного формата переводится в привычный нам двоичный и записывается в виде полного слова. Теперь число можно использовать в качестве операнда в командах арифметики с фиксированной точкой.

Посмотрим теперь, как производятся обратные преобразования. Для распечатки двоичного числа в коде EBCDIC необходимо выполнение следующих шагов:

В1. По команде CVD (Convert to Decimal — ПРЕОБРАЗОВАНИЕ В ДЕСЯТИЧНУЮ) исходное число преобразуется в упакованный формат.

В2. После выполнения команды UNPK (Unpack — РАСПАКОВАТЬ) получается десятичное число в зонном формате.

ВЗ. Исследуется содержимое знаковой зоны, и перед числом помещается код соответствующего алгебраического знака. В знаковую зону помещается F16, и, таким образом, преобразование исходного числа в код EBCDIC завершено.

В4. Полученные EBCDIC-коды посылаются устройству печати в качестве очередной части выводимой строки. Производится окончательный перевод кодов EBCDIC в печатный текст.

Преобразование кодов Холлерита в коды EBCDIC и кодов EBCDIC в печатные символы (шаги А1 и В4) выполняются автоматически. Рассмотрим теперь выполнение представляющих интерес для программиста шагов А2, АЗ, А4, В1, В2, ВЗ. В процессе ввода-вывода перечисленные шаги выполняются именно в этом порядке.