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

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

Если в примере 4-72 исходное число -537 изменить на +537 заменой кода знака на 0, и считать, что число записано в обратном коде, то вычисленные в примере результаты будут результатами выполнения операции изменения знака числа.

При изменении знака числа в дополнительном двоично-десятичном коде необходимо учитывать вариант применяемого дополнительного кода (раздел 3.2), и изменение знака выполнить способами, описанными в разделе 4.2. Дополнение значащих разрядов вычисляют способами, применяемыми при взаимном преобразовании прямого и дополнительного кодов двоично-десятичных чисел (раздел 4.7.2).

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

      1. Сложение двоично-десятичных чисел

Сумма десятичных цифр X и Y с учетом переноса в разряд

, (4-38)

где Z – десятичная цифра суммы,

– перенос в следующий десятичный разряд.

Пусть при кодировании десятичных цифр X, Y и Z им приведены в соответствие двоичные числа x, y и z такие, что удовлетворяется равенство количественных эквивалентов

; (4-39)

; (4-40)

. (4-41)

Подставив значения X, Y и Z из (4-39) – (4-41) в выражение (4-38) найдем

. (4-42)

Следовательно, для вычисления кода z десятичной цифры суммы Z достаточно сложить коды цифр слагаемых x и y с учетом переноса C и, если перенос в последующий десятичный разряд , вычесть из суммы константу , иначе вычесть константу b. Вычисления должны выполняться в двоичной системе счисления и для этого константы должны быть представлены в этой же систем счисления. Операцию вычитания константы можно заменять сложением с ее дополнением, как это показано в разделе 4.3.7.

Перенос

(4-43)

Подставив значения X и Y из (4-39) и (4-40) найдем

(4-44)

где – константа представленная в двоичной системе счисления.

Отношение эквивалентно отношению и, следовательно, перенос

(4-45)

Существуют иные правила для определения значения и возможны упрощения вычислений. Некоторые из них покажем в процессе рассмотрения примеров сложения десятичных цифр.

  1. Сложение в двоично-десятичной системе 8421

Десятичные цифры закодированы двоичными числами со смещением (табл.4.11, колонка 3). Из (4-42) и (4-45) при получим

; (4-46)

где

(4-47)

Из (4-46) и (4-47) следует, что для вычисления кода z цифры суммы и переноса в следующий разряд, достаточно вычислить сумму кодов цифр с учетом переноса C из предыдущего разряда, сравнить вычисленную сумму с кодом 10102 и при принять код цифры результата ; в противном случае принять .

Двоичные коды v4v3v2v1v0 промежуточной суммы , превышающие 10012, принадлежат интервалу . Причем v4 – разряд переноса из старшего разряда тетрады. Из этого следует, что перенос в следующую тетраду можно определить булевым уравнением

. (4-48)

Можно при сложении вычислять перенос вместо переноса v4. Поскольку булево уравнение , то, подставив в (4-48), получим

, (4-49)

где c3 – перенос в старший разряд тетрады.

Пример 4-75. В вариантах A-F выполняется сложение одноразрядных, а в варианте G – двухразрядных десятичных чисел в двоично-десятичной системе 8421. Во всех вариантах вычисляется пятиразрядная сумма , и перенос определен по (4-48).

В варианте A . Поэтому 0 и .

В варианте B . Поэтому 1 и .

Поскольку разность имеет 4 разряда, заем из старшего разряда можно не вычислять и вычитание из старшего разряда v4 не выполнять. Так как младший разряд константы 1010 равен 0, то он может не участвовать в вычислениях. Это упрощает вычисления и учтено в последующих вариантах примера.

В варианте C . Поэтому 1 и .

Здесь выполняется вычитание только в пределах тройки разрядов.

В варианте D, поскольку 0, из вычитается константа 000. В некоторых системах проще заменять константу 101 на 000, чем копировать сумму в результат.

Вариант G иллюстрирует сложение много разрядных двоично-десятичных чисел на примере сложения двухразрядных чисел 79+94=173.

Операцию вычитания можно заменить операцией сложения (раздел 4.3.7). Следовательно, вычитание константы 1010 можно заменить сложением с ее дополнением до 10000, т.е. сложением с константой 0110.

Так как константа 0110 содержит 0 в младшем и старшем разряде, то младший разряд может не участвовать в операции сложения, а в старшем разряде достаточно прибавлять только перенос из предыдущего разряда. Вычислять перенос в пятый разряд не следует, так как результат имеет только 4 разряда.

Пример 4-76. В вариантах A-C выполняется сложение одноразрядных, а в варианте D – двухразрядных десятичных чисел в двоично-десятичной системе 8421. Во всех вариантах вычисляется пятиразрядная сумма , и перенос определен по (4-48).

В варианте A перенос 0. Поэтому прибавляется константа 00.

В вариантах B-D перенос 1. Поэтому прибавляется константа 11.

Младший и старший разряды в операции сложения с константой 11 не участвуют. Младший разряд копируется в результат, а старший служит лишь для вычисления переноса . При сложении с константой вычисляются только 3 разряда.

Можно всегда вычислять и и в зависимости от значения переноса копировать в результат то или иное значение. При этом отпадает необходимость вычислять по выражению (4-48) или (4-49). Значение переноса однозначно определяется старшим разрядом результата сложения или вычитания константы.

Пример 4-77. Выполняется сложение одноразрядных десятичных чисел в двоично-десятичной системе 8421.

В вариантах A-C значение переноса равно инверсии старшего разряда разности.

В вариантах D-F значение переноса равно старшему разряду результата прибавления константы 11.

  1. С ложение в двоично-десятичной системе 8421+6

Десятичные цифры закодированы (табл.4.11, колонка 5) двоичными числами со смещением . Из (4-42) и (4-45) при получим

, (4-50)

где

(4-51)

Двоичные коды v4v3v2v1v0 промежуточной суммы , где v4 – разряд переноса из старшего разряда тетрады, превышающие 101012, принадлежат интервалу . На этом множестве наборов булева переменная должна принимать значение 1. Следовательно, перенос в следующую тетраду можно определить булевым уравнением

. (4-52)

При вычитание константы 100002 в (4-50) сводится к отбрасыванию старшего разряда суммы или к копированию четверки ее младших разрядов в z. При =0 для вычисления z следует вычесть константу 1102 из или прибавить к дополнение константы 1102 равное 10102. В любом случае достаточно вычислять только четверку младших разрядов разности или суммы и младший разряд может не участвовать в операции, так как обе константы содержат 0 в младшем разряде.

П ример 4-78. В вариантах A-F выполняется сложение одноразрядных, а в варианте G – двухразрядных десятичных чисел в двоично-десятичной системе 8421+6. Во всех вариантах вычисляется пятиразрядная сумма , и перенос определен по (4-52).

Так как константы 110 и 1010 имеют 0 в младшем разряде, то во всех вариантах младший разряд копируется в результат. При вычитании константы 110 и сложении с константой 1010 вычисляются только 3 разряда. Поэтому заем и перенос в старший разряд не вычисляют.

В варианте A . Поэтому 0 и .

В варианте B . Поэтому 1 и . Вычитание этой константы выполняется отбрасыванием старшего разряда или, это то же самое, копированием в результат четверки младших разрядов в z.

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

В вариантах D-F выполнены те же вычисления, что и в вариантах A-C, но операция вычитания константы 11 заменена сложением с константой 101.

В варианте G выполнено сложение двухразрядных десятичных чисел. Поскольку в обоих тетрадах, результат получен копированием четверок младших разрядов .

При код , а код . Следовательно, старший разряд разности равен значению . Поэтому можно всегда выполнять вычитание константы 110 или сложение с константой 1010 кода , и в зависимости от значения старшего разряда разности или суммы копировать в результат соответствующую четверку младших разрядов или .

Рассмотрим вычисления по этим правилам на примере.

Пример 4-79. В вариантах A-F выполняется сложение одноразрядных, а в варианте G – двухразрядных десятичных чисел в двоично-десятичной системе 8421+6.

В вариантах A-C и G выполняется вычитание константы 110 из суммы . Значение цифры в старшем разряде разности совпадает со значением переноса . При =0 в код z копируются разряды разности, а при =1 – разряды суммы , причем старший разряд отбрасывается. Так как константа 110 содержит 0 в младшем разряде, то младший разряд не участвует в операции вычитания и младший разряд z всегда равен младшему разряду .

В варианте G выполнено сложение двухразрядных чисел 79+94=173.

В вариантах D-F выполняется сложение константы 1010 с суммой , причем перенос из старшего разряда отбрасывается, а младший разряд константы в операции не участвует. По значению цифры старшего разряда суммы, всегда обратной значению переноса , определяют значение , и откуда следует копировать в z старшие три разряда.

  1. Сложение в двоично-десятичной системе 8421+3

Десятичные цифры закодированы (табл.4.11, колонка 6) двоичными числами со смещением . Из (4-41) и (4-44) при получим

; (4-53)

где

(4-54)

Из (4-54) следует, что значение переноса всегда равно старшему разряду суммы , что существенно упрощает вычисление .

Из (4-53) следует, что для вычисления кода z при =0 достаточно вычесть из константу 112 (3), а при =1 – вычесть константу 11012 (13).15

Так как вычитание любой из констант можно заменить сложением с ее дополнением, то возможны четыре варианта сложения десятичных цифр. В зависимости от значения выполняют

– вычитание 112 или вычитание 11012;

– сложение 11012 или вычитание 11012;

– вычитание 112 или сложение 112;

– сложение 11012 или сложение 112.

Рассмотрим выполнение сложения двоично-десятичных цифр на примерах.

П ример 4-80. Во всех вариантах примера старший разряд кода суммы является переносом в следующий десятичный разряд. Поэтому он выделен жирным шрифтом. При вычислении кода z разряд в операции не участвует, и заем/перенос в пятый разряд не вычисляется за ненадобностью.

В варианте A вычитается константа 112, так как =0.

В варианте B вычитается константа 11012, так как =1.

Так как младший разряд обеих констант 1, то младший разряд z будет всегда обратным младшему разряду , независимо от того выполняется вычитание или сложение с константой. Заем из следующего разряда всегда равен значению младшего разряда z, а перенос – обратный ему. Этот факт позволяет упростить вычисления. Для этого достаточно модифицировать таблицу сложения, используемую при вычислении младшего разряда .

В вариантах C, D младший разряд вычислен по модифицированной таблице сложения табл.4.12 и сразу записан в младший разряд кода z. Младший разряд констант исключен из рассмотрения в явном виде, и вычитание выполнено из трехразрядного кода. При вычитании константы заем из следующего разряда принят равным младшему разряду z.

В варианте E вычитание константы 11012 заменено сложением с ее дополнением 112.

В

Таблица 4.12

x0 y0 C

z0 с1

0 0 0

0 0 1

0 1 0

0 1 1

1 0 0

1 0 1

1 1 0

1 1 1

1 0

0 0

0 0

1 1

0 0

1 1

1 1

0 1

вариантах F, G младший разряд суммы вычислен по табл.4.12 и записан в младший разряд кода z. При сложении с константой перенос из младшего разряда обратный младшему разряду кода z. Тем самым прибавление младшего разряда константы 112 выполнено в неявной форме.

Сравните выполнение операции в варианте C и в вариантах F,G. В варианте C выполняется вычитание 1 из трехразрядного кода, а в вариантах F, G сложение 1 с трехразрядным кодом.

Как было показано выше, возможны два других варианта выполнения операции. Эти варианты читатель может доработать самостоятельно.

Поскольку при сложении x с y перенос в следующий десятичный разряд совпадает со значением двоичного переноса в очередной двоичный разряд слагаемых, то фактически в первом шаге выполняется операция обычного двоичного сложения многоразрядных двоичных чисел и ее результат является их суммой. Эта особенность сложения десятичных чисел в двоично-десятичном коде 8421+3 позволяет упростить универсальные устройства, предназначенные для сложения двоичных и десятичных чисел.

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

Пример 4-81. Выполняется сложение трехразрядных десятичных чисел 415 и 226 в двоично-десятичном коде 8421+3. В обоих вариантах x и y суммируются по правилу сложения двоичных чисел с учетом переносов между тетрадами.

В варианте A в зависимости от значения переноса из тетрады, показанного жирным шрифтом, из нее вычитается или к ней прибавляется константа 11, как в вариантах A и E примера 4-80.

В варианте B применен иной вариант введения корректирующей поправки. Операция вычитания константы 11 заменена сложением с ее дополнением 1101.

Е

A B

C: 0 1 0 0 1 0

x: 0111 0100 1000 (415) [1864] 0111 0100 1000 (415) [1864]

y: + 0101 0101 1001 (226) [1369] + 0101 0101 1001 (226) [1369]

x+y: 01100 1010 0001 [3233] 01100 1010 0001 [3233]

– 11 – 11 + 11 + 1101 +1101 + 11

Z: 1001 0111 0100 (641) 1001 0111 0100 (641)

сли x и y интерпретировать как двоичные числа (их значение приведено в квадратных скобках), то независимо от способа введения корректирующих поправок строка содержит их сумму в двоичной системе счисления.

При большой разрядности операндов затраты времени на вычисление суммы десятичных чисел незначительно превосходят затраты на вычисление суммы двоичных чисел. Действительно, затраты времени на вычисление двоичных чисел определяются распространением двоичного переноса. В худшем случае, каждая последующая цифра суммы вычисляется после предыдущей с задержкой . Прибавление/вычитание констант можно начинать в каждой тетраде после вычисления из нее переноса. Поэтому к моменту завершения вычисления двоичной суммы будут вычислены двоично-десятичные коды суммы во всех разрядах кроме старшего. Для получения цифры старшего разряда потребуются дополнительные затраты времени в на вычисление двоичных цифр старшей тетрады. Например, при сложении чисел в формате 64 бита двоичная сумма при последовательном распространении переноса будет вычислена примерно через , а десятичная – через .

Эти особенности двоично-десятичной системы 8421+3 в сочетании с простотой вычисления обратной десятичной цифры, взаимного преобразования прямого, обратного и дополнительного кодов и изменения знака обратного и дополнительного кодов числа (разделы 4.7.1 – 4.7.3) являются ее существенным достоинством.