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

При преобразовании необходимо учитывать свойства кодов (раздел 3.2), из которых следует:

  • При преобразовании знак числа может измениться в единственном случае, когда выполняется преобразование прямого кода отрицательного нуля в дополнительный код (вариант кода B или C), т.к. в этих вариантах ноль может быть записан только как (+0).

  • Дополнительный код 1|00...0 в варианте кода A кодирует -0. При преобразовании в прямой код он не должен измениться.

  • Дополнительный код 1|00...0 в варианте кода B не может быть преобразован в прямой код без расширения формата прямого кода в любой системе счисления. Если исходный дополнительный код 1|00...0 и длина формата должна оставаться прежней, формируют признак исключительной ситуации переполнения формата. Выполнение программы вычислений прерывают.

  • Если код 1|00...0 не применяется при представлении числа в дополнительном коде (вариант кода C), то операция преобразования этого кода в прямой код невыполнимая. В этой исключительной ситуации формируют признак невыполнимая операция и выполнение программы прерывают.

Все способы преобразований кодов отрицательных чисел можно разделить на три группы:

  1. Преобразование прямого кода в обратный код и последующее преобразование обратного кода в дополнительный.

  1. Преобразование дополнительного кода в обратный код и последующее преобразование обратного кода в прямой.

  1. Непосредственное преобразование прямого кода в дополнительный и дополнительного – в прямой.

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

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

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

Возьмем за основу способ взаимного преобразования обратного и дополнительного двоичного кода (варианты кода A или C) отрицательного числа, прибавлением 1 к младшему биту обратного кода (пример 3-8).

П ример 3-10. В вариантах A-F выполнено преобразование прямого кода двоичных отрицательных чисел в дополнительный код. В вариантах G- M выполнено преобразование дополнительного кода двоичных отрицательных чисел в прямой код.

В вариантах A, C, E выполнено преобразование прямого кода в обратный код и затем преобразование обратного кода в дополнительный выбранным способом. Значения младшего разряда результата и исходного кода совпадают, так как прибавление 1 приводит к повторному инвертированию младшего разряда, а перенос в следующий разряд равен 1, если младший разряд исходного кода равен 0. В вариантах B, D, F это учтено. Младший разряд копируется в результат, а для получения остальных значащих разрядов к инверсии обратного кода этих разрядов прибавляется инверсия младшего разряда .

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

В вариантах G-M выполнено преобразование в .

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

Модифицированный способ имеет преимущества перед базовым способом состоящие в сокращении длины пробега переноса и в упрощении вычисления младшего разряда результата. Кроме того, если младший разряд исходного кода 1 (варианты D, K, L примера 3-10), в результат можно копировать младший разряд и инверсию остальных значащих разрядов и тем самым исключить выполнение операции сложения. Если принять, что значения младших разрядов и знаков в исходных кодах равновероятны, то в среднем операция сложения будет выполняться только при каждом четвертом преобразовании.

Замечание. Любой способ преобразования прямого двоичного кода в дополнительный позволяет преобразовывать дополнительный двоичный код в прямой код правильно. Обратное утверждение не во всех случаях верно. Ошибка может возникать в знаковом разряде при преобразовании прямого кода (–0) в дополнительный. Чтобы исключить такую ошибку, достаточно уточнить правило вычисления знака результата.

Предлагаю читателю, сконструировать модифицированный вариант преобразования двоичного дополнительного кода вариант B в прямой код и наоборот, положив в основу преобразование дополнительного кода в обратный код, использованное в примере 3-7. Учтите, что правило определения знака результата, придется изменить.

Возникает вопрос: можно ли конструировать модифицированные правила преобразования для систем счисления с основанием . Ответ на этот вопрос: да, можно.

Рассмотрим процесс поиска модифицированного способа преобразования на примере.

Возьмем за основу способ преобразования обратного десятичного кода в дополнительный код, прибавлением 1 к младшему биту обратного кода (пример 3-8 варианты A, B, C).

П ример 3-11. В вариантах A-F выполнено преобразование прямого кода десятичных отрицательных чисел в дополнительный код. В вариантах G-M выполнено преобразование дополнительного кода десятичных отрицательных чисел в прямой код.

В вариантах A, C, E выполнено преобразование прямого кода в обратный код и затем преобразование обратного в дополнительный код выбранным способом.

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

В вариантах B, D, F это учтено.

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

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

Прибавление 1 при преобразовании десятичных кодов будет выполняться гораздо реже, чем при преобразовании двоичных чисел, так как вероятность нуля в младшем разряде десятичного кода 0,1, а в двоичном коде 0,5. При вероятность нуля в младшем разряде составит 1:16 = 0,0625. Из этого следует возможность ускорить преобразование двоичных кодов, интерпретируя их как двоично-шестнадцатеричные. Конструирование способов ускоренного преобразования двоичных кодов при таком подходе предоставим читателю.

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

При преобразовании кода значащих разрядов не равного 0 следует

– цепочку нулей в младших разрядах копировать в результат;

– цифру не равную 0, у которой справа только нули6, – заменять ее дополнением до ;

– цифры, у которых справа есть хотя бы одна цифра не равная нулю, – заменять обратными:

– код знака числа сохранить.

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

При взаимном преобразовании прямого кода и дополнительного (вариант A) исходный код 1|00…0 (-0) совпадает с кодом результата.

При преобразовании прямого кода 1|00…0 в дополнительный код (варианты кода B и C) достаточно заменить код знака.

Преобразование дополнительного кода (вариант кода C) в прямой код при исходном коде 1|00…0 должно вызывать исключительную ситуацию невыполнимая операция и прерывание выполняемой программы.

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

Преобразуйте самостоятельно прямой десятичный код 1|20500 в дополнительный и дополнительный десятичный код 1|79500 в прямой. Результаты должны совпасть.

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

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

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