Алгоритмы алгебраического сложения и вычитания



       Рассмотрим сначала указанные операции для чисел в форме с фиксированной запятой. Конкретные алгоритмы, которые используются для выполнения этих операций в арифметическо-логических устройствах (АЛУ), зависят от многих факторов, основными из которых являются:

- в каких кодах числа хранятся в оперативном запоминающем

устройстве (ОЗУ);

- в каких кодах выполняется операция вычитание.

    В зависимости от этих факторов существуют алгоритмы следующих типов:

       ПП - числа в ОЗУ хранятся в прямом коде, операция вычитание выполняется также в прямом коде;

       ПД(ПО) – числа в ОЗУ хранятся в прямом коде, операция вычитание выполняется в дополнительном (обратном) коде;

      ДД(ОО) - числа в ОЗУ хранятся в дополнительном (обратном) коде, операция вычитание выполняется также в дополнительном (обратном) коде.

Алгоритм типа ПП

   Основной особенностью этого алгоритма является то, что он аналогичен методу десятичного ручного счета. Как известно, ручное сложение-вычитание выполняется по следующим правилам:

- вычисления осуществляются над модулями чисел;

- действие над модулями определяется на основе анализа вычислительной операции (действия ) и знаков чисел;

- выполняется действие над модулями;

- если действие над модулями вычитание, то из большего модуля вычитается меньший;

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

             Рассмотрим S=A ± B   ïA ê< 1  êB ê< 1 A≠0 B≠0

Для того, чтобы формализовать постановку задачи, введем обозначения:

             Действие сложение - D:=0

             Действие вычитание - D:=1     

             Сложение модулей - DM:=0

             Вычитание модулей - DM:=1

             Знак числа           - ¢+¢:=0

             Знак числа           - ¢-¢:=1

             Соотношение êA ê³ êB ê соответствует W:=1

                  При            êA ê< êB ê принято         W:=0

        Зададим условия этой задачи в виде таблицы истинности (табл. 1.1), в которой описаны все варианты исходных данных.

                                                                        Таблица 1.1

                         ЗН A

ЗН B

D

DM

ЗН S

 

 

 

 

W:=1

W:=0

0

0

0

0

0

0

1

0

0

1

1

0

0

1

0

1

0

1

1

1

0

0

1

1

0

0

1

1

0

1

1

0

1

0

1

1

0

1

1

0

0

0

1

1

1

1

1

0

 

     В этой таблице истинности входными переменными являются ЗНА, ЗНВ, D, а выходными переменными - DM и ЗНS. После анализа данных в таблице можно сделать заключение, что действие над модулями DM является двоичной суммой трех входных переменных, а именно

                           DM = SM ( ЗНА, ЗНВ, D)                        (1.7)

 Таким же образом составим логическое выражение для знака суммы

             

 ЗНS := W & ЗНA Ú & DM &   Ú  &  & ЗНA             (1.8)

    Сформулируем теперь в словесном виде алгоритм типа прямой-прямой (ПП), в соответствии с которым должны осуществляться преобразование и анализ кодов двоичных чисел при выполнении в АЛУ операции S = A ± B.

  1) Ввод из ОЗУ в АЛУ [А]п и [В]п.

  2) Определение DM по табл. 1.1.

  3) Если DM=0, то êSê= êАê+êВê,

если перенос p =1,  то имеется переполнение разрядной сетки сумматора. В противном случае перенос p =0 и  переход к п. 5), иначе

   4) Если DM:=1, то выполняется вычитание модулей, причем

сначала определяется êS ê= êA ê- êB ê и, если p =0, то êA ê³ êB ê и переход к п.5), иначе находится êS ê = êB ê- ï A ï и êA ê< êB ê                                     

   5) Определение ЗНS и запись результата в память.         

   Выполним, пользуясь этим алгоритмом,

пример:  

    Вычислить   S = A + B    A = .01011   B = - .10101

    Следовательно                 [A]п = 0.01011 [B]п = 1.10101

Определим DM.     Так как D:= 0   ЗНA:=0   ЗНB:=1,

  то на основании (1.1)  

DM = SM ( 0,0,1) = 1

Теперь выполним вычитание модулей

                 ïA ê _= .0 1 0 1 1

                  êB ê = .1 0 1 0 1

                            1.1 0 1 1 0      

так как р=1, то êAê< êBê и следует выполнить вычитание

 модулей в обратном порядке:

                                       êB ê=.1 0 1 0 1

                                     -

                                       êA ê=. 0 1 0 1 1

                                       êS ê=. 0 1 0 1 0

Очевидно, что знак результата ЗНS = ЗНВ.  

В память должен заноситься прямой код результата, т. е.

                                     [S]п = 1. 0 1 0 1 0

В обычной записи сумма выглядит следующим образом:

                                      S = - . 0 1 0 1 0

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

Недостатком является необходимость использовать в АЛУ, кроме сумматоров, многоразрядные вычитатели, что приводит к увеличению оборудования.

Алгоритмы типов ПД или  ПО

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

1) Числа в памяти хранятся в прямых кодах.

2) Вычисления выполняются над модулями чисел.

3) Действия над модулями определяются в соответствии с табл. 1.1.

4)Если DM:=0, то êSê= êАê+êВê, далее проверяется наличие переполнения разрядной сетки сумматора, в противном случае

ЗНS=ЗНА и переход к п. 9), иначе

5) DM=1 и выполняется сложение модулей в дополнительном (обратном) кодах, вычисляется псевдосумма S* = ïAï + [-çBç]д.      

6) Анализируется значение переноса P0 из старшего разряда сумматора. Если P0=1, то результат положителен, S* =ïSï и ЗНS=ЗНА ,переход к п. 9), иначе

7) P0=0 и, значит, результат суммирования отрицателен, т.е. модуль суммы получился в дополнительном (или обратном) коде S*=[- êS ê]д, ЗНS=ЗНВ.

8) Следует преобразовать дополнительный (или обратный) код модуля суммы в прямой код.

  9) Запись [S]п в память.

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

- Имеется два числа А≠0 В≠0   êА ê< 1 ïВï< 1

Вычислить  S=A-B;  A= -.011011 ,   В = -.110011 ;

1) Числа из памяти принимаются в АЛУ в прямом коде

   [A]п = 1.011011        [B]п = 1.110011

2) Определим действия над модулями DМ, пользуясь формулой (3.1).

  Так как D:=1 ЗНA:=1 ЗНB: =1 , то DM: =1.

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

   Находим [-êBê]д =   [-êBê]о = . 0 0 1 1 0 0

                                                        + . 0 0 0 0 0 1

                                                            . 0 0 1 1 0 1

   Далее вычисляем псевдосумму S* = êAêп + [-êBê]д        

                S* = .0 1 1 0 1 1

                    + .0 0 1 1 0 1

                        .1 0 1 0 0 0  

4) Как видим, P0 = 0 , следовательно, S* < 0 и S*= [- êSê]д

5) Найдем прямой код модуля суммы по формуле

           êS êп = [ S* ] д = [S*]о = .0 1 0 1 1 1

                                                      +.0 0 0 0 0 1

                                            êS êп = .0 1 1 0 0 0        

   6) Далее определим логическим путем по формуле (3.2) знак результата.

 Так как  P0 = 0 , то  êА ê< êВ ê, , DM: = 1, ЗНА = 1. Следовательно  

ЗНS: = 0

 Сумма в прямом коде [S] п = 0.011000 ; S = .011000 

     Алгоритм алгебраического сложения и вычитания типа ПО в значительной степени совпадает с рассмотренным в этом разделе алгоритмом ПД.

 Имеют место отличия в п 5, где при DM := 1 вычитание выполняется не в дополнительном, а в обратном коде, а также в п. 8 при переходе к представлению отрицательного результата из обратного кода в прямой код. 

     Оценим кратко основные характеристики алгоритма ПД.

 К достоинствам можно отнести хранение чисел в памяти в прямых кодах, благодаря чему отсутствует преобразование кодов при вводе и выводе чисел из ЭВМ. Кроме того, выполнение операции вычитание в дополнительном коде позволяет в АЛУ обойтись одним сумматором, что уменьшает оборудование по сравнению с алгоритмом ПП.  Недостатком является необходимость преобразования отрицательного результата из дополнительного кода в прямой перед записью в память, что  снижает быстродействие.      


Дата добавления: 2018-05-12; просмотров: 590; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!