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

Способ деления без записи очередного остатка на место предыдущего с вычислением разряда частного подобный изложенному в разделе 4.5.2.3.

Рассмотрим способ деления на примере.

Пример 4-68. Здесь (рис.4-10) операнды те же, что и в примере 4-67.

В первом шаге выполняют сравнение старшего разряда делимого с делителем и вычисляют их разность. Сравнивают одноразрядный код с разрядным, и вычисляют только один младший разряд разности. Исполнителю последующего шага передают при один разряд разности или при старший разряд делимого . Результат сравнения – цифра старшего разряда частного. Цифра только при условии и .

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

В каждом очередном шаге вплоть до шага к переданному коду приписывают очередной разряд делимого. В последующих шагах приписывают 0. В примере рис.4-10 эти нули заменены пробелами.

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

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

При делении целых с вычислением целого частного остаток содержится в старших разрядах последнего пересылаемого кода. В примере рис.4-10 он выделен жирным шрифтом.

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

Деление без записи очередного остатка на место предыдущего с вычислением разряда частного в соответствии с (4-25).

Этот способ деления отличается от предыдущего тем, что значение определяют по знаку разности . Сравнение не выполняют.

Для этого вычисляют младшие разряды разности необходимые для формирования остатка и заем из разряда определяющий ее знак.

Трудоемкость вычисления разности в этом случае больше, чем в примере 4-68 рис.4-10.

Возможны модификации этого способа деления направленные на сокращение затрат.

Попробуйте самостоятельно выполнить деление этим способом при тех же операндах, что и в примере 4-68.

      1. Деление двоичных чисел в дополнительном коде

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

Очевидно, что знак частного равен результату сложения по модулю 2 знаковых разрядов операндов. В основу способов вычисления значащих разрядов частного, когда операнды представлены в дополнительном коде, можно положить рассмотренные способы деления в прямых кодах, внеся в них необходимые изменения. Особенности деления операндов в дополнительных кодах рассмотрим на примере способа деления с вычислением очередного сдвинутого влево остатка (раздел 4.5.2.3).

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

Формат делимого со знаком расширяют влево на разрядов, копируя знаковый разряд в дополнительные разряды делимого, чтобы не изменить его количественный эквивалент. Делитель со знаком смещают влево на разряд, чтобы совместить младший разряд делителя со старшим значащим разрядом формата делимого до его расширения, как это показано в последующем примере 4-69. Различие в начальном размещении операндов в примере 4-69 и в его прототипе (пример 4-67, рис.4-9) обусловлено тем, что в прототипе выполняется деление целых без знака, а в примере 4-69 операнды целые со знаком.

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

Для сравнения можно применить оператор подобно тому, как в примере 4-67 применяли оператор , или руководствоваться следующими правилами.

Если знаки чисел и совпадают, то , если знак разности совпадает со знаком или . Например:

; ; ;

; ; .

Если знаки чисел и не совпадают, то , если знак суммы совпадает со знаком или . Например:

; ; ;

; ; .

При вычислении прямого кода частного цифра частного равна значению отношения .

При вычислении обратного кода частного цифра частного равна значению

  • , если знак частного (+);

  • инверсии , если знак частного (–).14

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

При определении очередного остатка следует учитывать, что знак остатка, если он не равен нулю, должен совпадать со знаком делимого. При отрицательном делимом остаток равный 0 имеет знак (+), так как в дополнительном коде (–0) не существует.

Для определения цифры частного и очередного остатка следует:

  • при совпадении знаков делимого и делителя вычесть из делимого, или из сдвинутого влево на разряд предыдущего остатка, делитель;

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

Если знак разности (суммы) совпадает со знаком делимого или если разность (сумма) равна нулю, то очередная цифра прямого кода частного 1 иначе 0, и вычисленная разность (сумма) является очередным остатком.

Пример 4-69. Здесь (рис.4-11) операнды в дополнительных кодах. Жирным шрифтом выделены знаковые разряды. Вычислен обратный код частного. Знаковый разряд частного определен как сумма по модулю два операндов.

Вычитание (сложение) выполняется в дополнительном коде.

Если разность (сумма) не является остатком, то предыдущий остаток сдвигается влево на один разряд. Если разность (сумма) является остатком, то в процессе сдвига предыдущего остатка его старшие разряды замещаются цифрами разности (суммы) как это показано косыми линиями. Обратите внимание, что в варианте B разность, отмеченная знаком , не равна нулю, так как ее младшие разряды не участвующие в вычитании не равны нулю. Фактически эта разность имеет значение 00001.000. В варианте C разность, отмеченная знаком , равна нулю и является остатком, хотя ее знак не совпадает со знаком делимого. Вычисление остатка равного нулю позволяет прекратить процедуру деления, так как все не вычисленные цифры прямого кода частного и обратного кода положительного частного будут равны 0, а обратного кода отрицательного частного 1. Поэтому в варианте C результаты всех последующих вычислений зачеркнуты.