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

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

Вычитание с расширением поля значащих разрядов операндов на одну позицию слева.

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

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

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

П ример 4-15. Выполнено вычитание десятичных чисел в обратном коде.

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

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

П ример 4-16. Выполнено вычитание в обратном коде тех же десятичных чисел, что и в одноименных вариантах примера 4-15. Формат операндов расширен на один разряд целого влево приписыванием кода знака числа показанного жирным шрифтом. В разряде знака и в дополнительном разряде целого вычитание выполняется по таблице вычитания двоичных цифр (табл.4.3). Циклический заем достаточно вычитать только из значащих разрядов промежуточной разности.

В нижней строке вариантов приведен обратный код точной разности, пересылаемый системе Записи в формат результата.

П ример 4-17. Выполнено вычитание в обратном коде двоичных чисел в формате расширенном на 1 бит целого влево. Дополнительный бит в операндах и в результате показан жирным шрифтом. Обратный код разности вычислен точно.

Вычитание без расширения поля значащих разрядов операндов на одну позицию слева.

Можно не расширять поле целого, а лишь выравнивать идентичные поля операндов, расширяя меньшее до большего. Тогда код разности можно интерпретировать двояко:

  • как обратный код значащих разрядов точной разности без разряда знака;

  • как обратный код разности со знаком в формате операндов, но возможно переполненный.

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

Во втором случае следует вычислить признак R переполнения формата.

Варианты правил определения знака разности.

  1. Сложить по модулю 2 знаковые разряды операндов и циклический заем.

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

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

  1. Если циклический заем совпадает с займом из знакового разряда, код знака равен старшему значащему разряду промежуточной разности; иначе – инверсии старшего значащего разряда промежуточной разности.

Комментарий к правилу 1.

Именно по этому правилу вычисляется разряд знака при расширении формата операндов на разряд целого, так как бит знака дублируется.

Комментарий к правилу 2.

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

Комментарий к правилу 3.

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

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

Комментарий к правилу 4.

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

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

Старший значащий разряд не переполненной разности совпадает с кодом ее знака, а при переполненной разности – с инверсией кода знака. Поэтому в правиле 4 нельзя старший значащий разряд промежуточной разности заменить старшим значащим разрядом разности.

Пример 4-18. Выполнено точное вычитание в обратном коде тех же десятичных чисел, что и в одноименных вариантах примеров 4-15 и 4-16, но без расширения формата операндов.

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

В нижней строке вариантов примера приведен обратный код точной разности, пересылаемый системе Записи в формат результата.

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

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

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

Признаки переполнения следующие.

  1. Знаки операндов не совпадают, а знак разности не совпадает со знаком уменьшаемого.

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

  1. При вычислении промежуточной разности заем из знакового разряда не совпадает с циклическим займом и при вычитании циклического займа заем из знакового разряда равен 0.

Комментарий к правилу 1. При разных знаках операндов знак точной разности совпадает со знаком уменьшаемого. Несовпадение знака разности и знака уменьшаемого является признаком переполнения.

Комментарий к правилу 2. Если код знака уменьшаемого 1, а вычитаемого 0 (знаки не совпадают), то, чтобы случилось переполнение, код знака разности должен стать равным 0 (следует из п.1). Для этого необходим заем 1 из знакового разряда при вычислении промежуточной разности, поскольку циклический заем 0. Следовательно, при сочетании кодов знаков операндов 1–0 и переполнении заем из знакового разряда при вычислении промежуточной разности должен совпадать с кодом знака уменьшаемого.

Если код знака уменьшаемого 0, а вычитаемого 1 то, чтобы случилось переполнение, код знака разности должен стать равным 1. Для этого оба займа из знакового разряда должны быть равны 0. Следовательно, при сочетании кодов знаков операндов 0–1 и переполнении заем из знакового разряда при вычислении промежуточной разности должен совпадать с кодом знака уменьшаемого и при вычитании циклического займа заем из знакового разряда должен быть равен 0.

Комментарий к правилу 3. Заем из знакового разряда не совпадает с циклическим займом только при разных знаках операндов. При коде знака уменьшаемого 1, а вычитаемого 0, циклический заем всегда 0. Чтобы при таком сочетании знаков операндов случилось переполнение, необходим заем 1 из знакового разряда при вычислении промежуточной разности (следует из п.2). Следовательно, займы не должны совпадать.

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

П ример 4-19. Выполнено вычитание в обратном коде тех же десятичных чисел, что и в одноименных вариантах примеров 4-15, 4-16 и 4-18, в формате операндов. Результат вычислен со знаком и проверен на переполнение по одному из трех правил.

В вариантах A, B, E признак переполнения R=0, и вычисленный точный результат может быть отправлен по назначению.

В вариантах C, D, F признак переполнения R=1. Результат переполнен и должен быть выдан сигнал прерывания по переполнению.

В нижней строке дан точный результат, вычисленный обработчиком прерывания по переполнению по полученному им коду переполненного результата. Для вычисления точной разности обработчик инвертирует знак, так как он вычислен неправильно. Кроме того, обработчик интерпретирует весь полученный им код как код значащих разрядов точного результата и заменяет код 0 или 1 в старшем разряде (в разряде знака) по правилу, изложенному в разделе 4.3.1.

Пример 4-20. Выполнено вычитание в обратном коде двоичных чисел в формате операндов.

Р езультат вычислен со знаком и проверен на переполнение по одному из трех правил

При переполнении формата R=1. Обработчик прерывания по переполнению вычислил точное значение разности, приписав к полученному им переполненному результату код знака равный инверсии кода знака в переполненной разности. Точное значение разности, вычисленное обработчиком прерывания, приведено в нижней строке примера.