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

Правила умножения в дополнительном коде зависят от применяемого варианта кодирования (раздел 3.2). Примем за основу способы умножения в дополнительном коде варианта B. Правила умножения в дополнительных кодах вариантов A и C являются модификацией правил умножения в коде варианта B учитывающей особенности кодирования нуля и не числа в этих кодах.

Код произведения в дополнительном коде варианта B имеет значащих разрядов, где n – количество значащих разрядов в кодах операндов. В прямом и дополнительном коде вариантов A и C код произведения имеет 2n значащих разрядов. Это различие вызвано тем, что в дополнительном коде варианта B код 1|00…0 кодирует число меньшее минимального числа представляемого в иных кодах. Если, например,

, то

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

Дополнительный код варианта C отличается от кода варианта B лишь тем, что 1|00…0 кодирует не число. При умножении в коде варианта C, если хотя бы один из операндов 1|00…0, складывается исключительная ситуация невыполнимая операция и произведение не вычисляется. Умножение операндов по правилам умножения кодов варианта B приводит к правильному результату. Но поскольку результат не может быть равным 0|100…0, то старший дополнительный разряд не вычисляют.

Дополнительный код варианта A отличается от кода варианта B тем, что 1|00…0доп кодирует (-0), а не минимальное число и произведение равное нулю может иметь разные знаки. Операнды в коде варианта A проверяют на 0. Если хотя бы один операнд равен (+0) или (-0), произведению присваивают код нуля с кодом знака равным сумме по модулю 2 кодов знака операндов. Коды операндов не равные 0|00…0доп и 1|00…0доп умножают по правилам умножения кодов варианта B. Поскольку результат не может быть равным 0|100…0, то старший дополнительный разряд не вычисляют.

При разработке способов умножения следует учитывать, что код знака произведения в дополнительном коде варианта B или C равен сумме по модулю 2 кодов знаков операндов, только если операнды не равны нулю. Знак произведения равного нулю всегда (+).

При умножении дополнительных кодов варианта B можно проверять операнды на коды 0|00…0д (+0) и 1|00…0д .

  • Если один из операндов 0|00…0д, то код произведения 0|00…0д.

  • Если оба операнда 1|00…0д, то код произведения 0|100…0д (дополнительный разряд произведения показан жирным шрифтом).

  • Если операнды не равны нулю и код одного из них 1|00…0д, то код произведения равен другому операнду с обратным знаком, к которому справа приписаны n нулей.

  • Если код произведения не равен 0|100…0д, то цифра в дополнительном разряде 0, если код знака результата 0, иначе цифра обратная нулю.

Применение этих правил позволяет вычислять только значащих разрядов произведения, перемножая сомножители с кодами не равными 0|00…0д (+0) и 1|00…0д.

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

В вариантах A-D вычислены все разряды произведения.

В варианте E операнды не равны 100...0 или 000...0. Поэтому вычислен только разряд знака и дополнительный старший значащий разряд, выделенный жирным шрифтом. Остальные значащих разрядов дополнительного кода произведения придется вычислять, выполняя умножение значащих разрядов операндов.

Если код 100...0 не применяется для представления числа, то дополнительный значащий разряд произведения вычислять не следует, и результат будет иметь разрядов (в примере 4-27 9 разрядов).

Известно множество подходов к решению задачи умножения в дополнительном коде. Некоторые из них.

  1. Преобразуем дополнительные коды операндов в прямые, перемножим прямые коды и преобразуем прямой код результата в дополнительный.

  1. Перемножим дополнительные коды операндов по правилу умножения в прямом коде. Результат получится правильным, только если оба операнда имеют знак (+). Выполним анализ ошибок при иных комбинациях знаков и разработаем правила введения в результат корректирующих поправок для получения дополнительного кода правильного результата.

  1. Умножение это Y–кратное сложение множимого с самим собой. Следовательно, операции сложения достаточно выполнять в дополнительном коде по правилам сложения в дополнительном коде.

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

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