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



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

    Вычисляем  S = A ± B ; | A | < 1 ; | B | < 1 ; A ≠ 0 ; B ≠ 0

              Особенности алгоритма ДД

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

2) Операции сложения и вычитания выполняются в модифицированном дополнительном коде.

3) Преобразование в модифицированный код происходит при пересылке данных из памяти в АЛУ. 

4) Знаки чисел участвуют в вычислительных операциях и знак результата образуется автоматически после окончания вычислений.

5) Переполнение разрядной сетки обнаруживается при несовпадении цифр в знаковых разрядах кода суммы.

6) Образовавшаяся сумма записывается в память в дополнительном коде.

Выполним пример вычислений по алгоритму ДД.

    S = A – B ;                      A = - .01101 ;     B = .11011;     

    Коды чисел в ОЗУ         [А]д = 1.10011;  [B]д = 0.11011        

   В регистры АЛУ принимаются модифицированные коды чисел:

                    РГА : = [A]дм = 11.10011 ; РГВ : = [B] дм = 00.11011  

   ( Точка в кодах введена условно, чтобы отделить знаковые разряды).

    Так как действие вычитание , то D: = 1. Ищем псевдосумму в виде

        S* = [ РГА] пм + [ РГВ]д ;     [ РГВ] дм = [РГВ] ом + 2-n         

                                   [РГА] пм =  11.10011

                                   [РГВ] дм = 11.00101

                                        S*      = 110.11000     

Анализ цифр кода псевдосуммы слева направо показывает следующее. Крайняя левая цифра 1 представляет собой перенос из старшего разряда. Она выходит за пределы разрядной сетки. Два следующих разряда являются знаковыми. Цифры в этих разрядах не совладают. Следовательно, | S| > 1.

Приведем пример вычислений для алгоритма ОО.

     S= A + B ;     A= .110101 = 53    B = -.001101 = 13

  Так как ДЕЙСТВИЕ D: =0, А> 0, В < 0 , то ищем псевдосумму

S* = А + В , следовательно : [A] пм = 00.110101

                                            + [B] ом = 11.110010

                                                S*     = 100.100111

                                                           +                1

                                               [S] пм =   00.101000 = 40

 Крайняя слева "1" в численном значении S' является единицей переноса за пределы разрядной сетки и приводит к процессу "циклического переноса" который состоит в прибавлении 1=2-n к псевдосумме.                                                                             

       ( Выполним контроль в десятичном коде S = 53 – 13 = 40)

Сложение и вычитание десятичных чисел

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

В табл. 1.2 приведены для примера несколько двоично-десятичных кодов. Каждый код обозначается той последовательностью весов разрядов, которая ему соответствует.  Наиболее употребительным является код 8-4-2-1, который совпадает с обычным двоичным кодом.

                                                                                         Таблица 1.2

Номер разряда

4

3

2

1

Двоично-дес.код

Код 3-3-2-1

3

3

2

1

Код 4-2-2-1

4

2

2

1

Код 5-2-2-1

5

2

1

1

Код 8-4-2-1

8

4

2

1

 

Двоично-десятичное сложение в коде 8-4-2-1

В табл. 1.3 представлено соответствие десятичных цифр и их обозначений в двоично-десятичном коде 8-4-2-1.                                                                    

Сформулируем  правила сложения в коде 8-4-2-1 на основе анализа числовых  примеров  в пределах  одной  декады  для десятичного и   двоично-десятичного кодов.

                                                              Таблица 1.3        

Десятич. цифра

двоич.-дес. код

0

0

0 0 0

1

0

0 0 1

2

0

0 1 0

3

0

0 1 1

4

0

1 0 0

5

0

1 0 1

6

0

1 1 0

7

0

1 1 1

8

1

0 0 0

9

1

0 0 1

 

   1) 3+5=8   0 0 1 1 как видим, результаты совпадают

                        +0 1 0 1

                          1 0 0 0   

   2) 8+9=17    1 0 0 0

                        + 1 0 0 1

                        1 0 0 0 1 результат неправильный

                        + 0 1 1 0 выполняем коррекцию

                        1 0 1 1 1 теперь результат верен

  3) 6+8=14      0 1 1 0

                        + 1 0 0 0

                           1 1 1 0 сумма не совпадает

                        + 0 1 1 0 коррекция

                        1 0 1 0 0 результат совпал с десятичным примером.

Анализируя приведенные примеры, можно отметить следующие особенности.

В примере 1) двоичное сложение в пределах десятичной декады дает правильный результат, так как сумма меньше 9 ( меньше 1001 в двоично-дес. коде).

В примере 2) после двоичного сложения в декаде получается неправильный результат и возникает единица переноса в следующую декаду. Однако этот перенос является двоичным, а не десятичным, т.к. равен 16 единицам младшего разряда декады. Пример 3) также приводит к неправильному результату, так как получившаяся в декаде сумма чисел больше девяти. Для получения правильного результата в обоих примерах необходимо после двоичного сложения выполнить коррекцию. Для этого к полученной сумме добавляется число 6 ( 0110 ).

Сформулируем правила двоично-десятичного сложения:

- выполнить двоичное сложение внутри каждой декады с учетом возникающих между декадами переносов;

- переносы образуются из данной декады в следующих случаях:

если перенос возникает автоматически во время двоичного сложения, или если образовавшаеся сумма больше 9 (1001);

- к содержимому всех декад, из которых возникали переносы, прибавить для коррекции 6 ( 0110).

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

Выполним           S = А + В сначала в десятичном коде

                              А = 6 5 3 8 0 4

                           + В = 1 7 5 9 9 8

                              S = 8 2 9 8 0 2

    Теперь вычислим этот пример в двоично- десятичном коде.

                              1      1        1          1   дв.-дес. переносы

А = 0 1 1 0  0 1 0 1   0 0 1 1  1 0 0 0    0 0 0 0  0 1 0 0   

+В = 0 0 0 1   0 1 1 1   0 1 0 1   1 0 0 1    1 0 0 1   1 0 0 0  

    1 0 0 0 1 1 0 0 1 0 0 1 0 0 1 0   1 0 1 0 1 1 0 0 двоичная сумма

+ 0 0 0 0 0 1 1 0 0 0 0 0  0 1 1 0      0 1 1 0     0 1 1 0 коррекция

S = 1 0 0 0 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 1 0 дв.-дес. сумма

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


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

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






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