Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
БЕКИН_Д_ЖЕНАТОВ.doc
Скачиваний:
35
Добавлен:
24.08.2019
Размер:
4.5 Mб
Скачать

7.7. Вычитание модулей двоично-десятичных чисел

По аналогии с операциями вычитания в двоичном коде, операцию X-Y можно представить как X+(-Y). При этом отрицательное число представляется в дополнительном коде, аналогичном дополнительному коду в двоичной арифметике. Этот код используется только для выполнения операций вычитания. Хранятся двоично-десятичные числа (как положительные, так и отрицательные) в прямом коде со знаком.

Алгоритм выполнения операции состоит в следующем:

1. Модуль положительного числа представляется в прямом двоично-десятичном коде (8421).

Модуль отрицательного числа - в дополнительном коде (ДК) с избытком 6.

Для получения ДК необходимо:

- инвертировать значения разрядов всех тетрад числа;

- к младшему разряду младшей тетрады прибавить 1.

Таким образом, цепочка ПК(mod)  ОК  ОК+1  ДК аналогична цепочке в двоичной арифметике. Только здесь получается ДК с избытком 6, т.к. дополнение идет не до 10, а до 16.

2. Произвести сложение операндов ( ) в ПК и ( ) в ДК.

3. Если при сложении тетрад возник перенос из старшей тетрады, то он отбрасывается, а результату присваивается знак "+", т.е. результат получается в прямом избыточном коде. Он корректируется по тем же правилам, что и при сложении модулей.

4. Если при сложении тетрад не возникает переноса из старшей тетрады, то результату присваивается знак "-", т.е. результат получается в избыточном ДК. В этом случае необходимо перейти к избыточному ПК (т.е. инвертировать все двоичные разряды двоично-десятичного числа и прибавить к младшему разряду 1).

5. Полученный в этом случае результат в ПК корректируется. Для этого к тем тетрадам, из которых возникал перенос при выполнении пункта 2 (при суммировании) необходимо добавить 10(10) или 1010(2). Таким образом, корректировка происходит в тех тетрадах, которые в положительных числах не корректируются. Следует отметить, что при выполнении операции вычитания большего числа из меньшего ( ), при | || |) т.е. при 0, алгоритм коррекции результата после перевода из ДК в ПК требует уточнения. А именно, после перевода в ПК необходимость коррекции определяется не только приведенными правилами, но и следующими требованиями:

а) нулевой результат не корректируется;

б) незначащие нули слева не корректируются;

в) значащие нули справа не корректируются.

Если 0 и отсутствуют значащие и незначащие нули (т.е. п.п. 1-3 не имеют места), необходимо анализировать . Если в есть значащие нули справа, то соответствующие им разряды (тетрады) требуют обязательной коррекции, независимо от наличия переносов при сложении и .

Пример 7.10. =49(10) -238(10) =-189(10)

Представим |Y| в ДК с избытком 6:

Выполним сложение:

Отсутствие переноса из старшей тетрады является признаком того, что результат получился в ДК (т.е. отрицательный).

Перейдем к нескорректированному избыточному ПК.

.

Произведем коррекцию результата в соответствии с пунктом 5 алгоритма.

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

= -(0001 1000 1001) = -189

Пример 7.11. = 43(10) -58(10) =85(10)

Представим |Y| в ДК с избытком 6:

Выполним сложение:

Наличие переноса из старшей тетрады указывает на то, что результат получился в ПК (т.е. положительный).

Произведем коррекцию результата в соответствии с пунктом 3 алгоритма: