Преобразование данных - Двоичное-упакованное десятичное

Мы проследили выполнение всех шагов, необходимых для перевода кодов EBCDIC в двоичную форму, удобную для арифметической обработки. Рассмотрим теперь обратный процесс. Задача состоит в следующем: дано 32-разрядное двоичное целое, необходимо описать последовательные этапы его преобразования в коды EBCDIC, т. е. в форму, удобную для печати.

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

CVD R1,D2(X2,B2)

ConVert to Decimal

Десятичный эквивалент (R1) — D2 + (Х2) + (B2)D

Второй операнд команды CVD является двойным словом. В это двойное слово записывается получившееся упакованное число, которое спереди в целях выравнивания дополняется необходимым количеством нулей.

Итак, если

(5)=00000340

то после выполнения команды

CVD 5,PD

получим

PD: 000000000000832С

При этом предполагается, что PD определено в программе как двойное слово. (Если PD не выровнено по границе двойного слова, фиксируется особый случай спецификации.)

Аналогично, если

(6)=FFFFFF40

и PACDECK определено как двойное слово, то результатом выполнения команды

CVD 6,PACDECK

будет

PACDECK: 000000000000192D

что представляет отрицательное число.

Мы знаем, что если в качестве кода знака выступает F, то рассматриваемое число положительно. Тем не менее, машина при проведении преобразований положительных чисел всегда использует код С. То есть если в результате выполнения CVD или любой команды десятичной арифметики получается положительный результат, то он имеет С в качестве кода знака.