Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СОДЕРЖАНИЕ 3 (2).doc
Скачиваний:
28
Добавлен:
31.08.2019
Размер:
5.65 Mб
Скачать
      1. Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа

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

Пример 4-72. Выполняется преобразование прямого кода десятичного числа -537 в обратный код.

В варианте A десятичное число представлено в коде 8421+3. Преобразование выполнено в соответствии с (4-37) инвертированием значащих разрядов кода. Если исходный код интерпретировать как прямой код двоичного числа, то результат преобразования является обратным кодом этого числа.

В вариантах B и C десятичное число представлено в коде 8421+6. Преобразование выполнено в соответствии с (4-34) и (4-35) соответственно. Для этого к инверсиям тетрад в варианте B прибавлена константа 0110, а в варианте C из инверсий тетрад вычтена константа 1010. Поскольку младшие разряды констант равны 0, то они не участвуют в выполнении операций.

В варианте D десятичное число представлено в коде 8421. Преобразование выполнено в соответствии с (4-31).

Преобразование обратного кода в прямой выполняется аналогично.

При взаимном преобразовании прямого и дополнительного двоично-десятичного кода необходимо учитывать вариант применяемого дополнительного кода (раздел 3.2). Преобразование кодов можно выполнить способами, описанными в разделе 3.2.1.3. Преобразование выполняют, только если число отрицательное. Здесь рассмотрим лишь особенности преобразования при представлении десятичных цифр двоично-десятичными кодами.

При преобразовании следует учитывать, что дополнительные коды 1|00…0доп и 0|00…0доп десятичных чисел в двоично-десятичном представлении содержат нули только в коде 8421; в кодах 8421+6 и 8421+3 поля значащих разрядов содержат коды и соответственно.

При косвенном преобразовании коды значащих цифр заменяют обратными по правилам, описанным в разделе 4.7.1. Обратный код отрицательного числа должен быть увеличен на 1 младшего разряда. Это можно сделать разными способами.

Сложить обратный двоично-десятичный код с двоично-десятичным кодом положительной единицы по правилам, описанным в разделе 4.7.4. Например, при преобразовании прямого кода в дополнительный код десятичного числа -537, представленного в двоично-десятичном коде 8421+6, взять его обратный код (пример 4-72 варианты B или С) и сложить с кодом 0|0110 0110 0111 (+1).

Можно сложить обратный код младшей тетрады с 1 по правилу сложения двоичных чисел, и, если код суммы в тетраде не применяется для кодирования десятичной цифры, заменить его кодом 0 и увеличить на 1 код следующей тетрады.

Пример 4-73. Выполняется преобразование прямых кодов десятичных чисел в дополнительный код с промежуточным преобразованием в обратный код с прибавлением 1 к младшей тетраде.

В

A B C D

Код: 8421+3 8421+3 8421+6 8421+6

- 5 3 7 - 5 3 0 - 5 3 7 - 5 3 0

1|1000 0110 1010пр 1|1000 0110 0011пр 1|1011 1001 1101п 1|1011 1001 0110п

1|0111 1001 0101об 1|0111 1001 1100об 1|0100 0110 0010 1|0100 0110 1001

+ 1 + 1 ` 1 + 0110 +0110 +0111 +0110 +0111 +0111

1|0111 1001 0110д 1010 1101 1|1010 1100 1001д 1|0100 1101 0000

- 4 6 3 1|0111 1010 0011д - 4 6 3 1|0100 1101 0110д

- 4 7 0 - 4 7 0

варианте A результат сложения младшей тетрады обратного кода с 1 является кодом десятичной цифры. Поэтому вычислен дополнительный код.

В варианте B результат сложения младшей тетрады обратного кода с 1 не является кодом десятичной цифры. Поэтом он заменен на код 0, и к очередной тетраде прибавлена 1. Так как результат прибавления 1 к очередной тетраде является кодом десятичной цифры, то вычислен дополнительный код. Если бы вычисленный код не был кодом десятичной цифры, то он был бы заменен кодом 0, и выполнялось бы прибавление 1 следующей тетраде.

В коде 8421+3 результат увеличения обратного кода тетрады на 1 не являющийся кодом десятичной цифры всегда равен 1101, что и является признаком переноса 1 в следующую тетраду и необходимости замены кода в тетраде кодом 0.

В вариантах C и D прибавление 1 к обратному коду тетрады совмещено с его вычислением. Вычисление обратного кода выполняется в соответствии с (4-34) подобно тому, как это выполнено в варианте B примера 4-72, но константа 1010 в младшей тетраде увеличена на 1. Можно не увеличивать константу 1010, а принять при сложении перенос в младший двоичный разряд равным 1.

В варианте C результат содержит в младшей тетраде код десятичной цифры. Поэтому вычислен дополнительный код.

В варианте D результат сложения в младшей тетраде содержит код 0000 не являющийся кодом десятичной цифры. Поэтому он заменен на код нуля 0110, и константа в следующей тетраде увеличена на 1.

В коде 8421+6 результат увеличения обратного кода тетрады на 1 не являющийся кодом десятичной цифры всегда равен 0000, что и является признаком переноса 1 в следующую тетраду и необходимости замены кода в тетраде кодом 0110. При вычислении по (4-34) и сумме в тетраде равной 0000 перенос из старшего бита 1. Этот перенос можно направить в следующую тетраду и использовать для замены кода 0000 на код 0110.

При вычислении по (4-33) или (4-35) можно совмещать вычисление обратного кода с увеличением его на 1 и кроме кода 0000 использовать иные признаки переноса/займа в следующую тетраду.

При непосредственном преобразовании просматривают справа налево двоично-десятичные коды цифр, и оставляют их без изменения пока не встретится код цифры не равной 0. Код первой цифры не равной 0 заменяют кодом цифры дополняющей ее до 10. Коды всех последующих цифр заменяют кодами обратных цифр.

П

A B C

Код: 8421 8421+6 8421+3

- 8 7 0 0 - 3 6 2 0 - 3 0 8 1

1|1000 0111 0000 0000 1|1001 1100 1000 0110 1|0110 0011 1011 0100

1|0001 0011 0000 0000 1|1100 1001 1110 0110 1|1001 1100 0100 1100

- 1 3 0 0 - 6 3 8 0 - 6 9 1 9

ример 4-74
. Выполнено непосредственное преобразование прямых кодов двоично-десятичных чисел в дополнительный код.

В варианте C код в младшей тетраде не является кодом цифры 0. Поэтому он заменен кодом цифры дополняющей исходную цифру до 10.

Замену кода цифр обратным кодом можно выполнять по правилам, описанным в разделе 4.7.1. Код, дополняющий исходную цифру до 10, можно получить увеличением обратного кода цифры на 1 в процессе его вычисления подобно тому, как это выполнялось в примере 4-73, причем перенос в следующую тетраду всегда равен 0.

Систему, выполняющую непосредственное преобразование двоично-десятичного кода 8421+3, можно легко перенастроить на преобразование двоично-шестнадцатеричного кода и, следовательно, двоичного кода. Для этого достаточно заменить код 0011 признака цифры 0 в тетраде кодом 0000. При этом длина пробега переноса в тетраде не будет превышать 3 разряда.

Для перенастройки системы, выполняющей непосредственное преобразование двоично-десятичного кода 8421, на преобразование двоично-шестнадцатеричного кода необходимо изменить константы при вычислении обратного кода десятичных цифр. При вычислении по (4-30) константу 1001 заменить константой 1111, а при вычислении по (4-31) или (4-32) заменить константы кодом 0000.

Для перенастройки системы, выполняющей преобразование кода 8421+6, нужно заменить не только константы, а и код 0110 признака цифры 0 в тетраде кодом 0000.

Во всех случаях длина пробега переноса в тетраде не будет превышать 3 разряда.