Выполнение операций сложения и вычитания над числами с фиксированной запятой и над двоично-десятичными числами.

Автор: Пользователь скрыл имя, 08 Января 2012 в 18:52, лабораторная работа

Краткое описание

Ознакомление с алгоритмами выполнения операции сложения и вычитания чисел, представленных в формате с фиксированной запятой, чисел, представленных в D-кодах, приобретение практических навыков выполнения операций над этими числами.

Файлы: 1 файл

№2.doc

— 68.00 Кб (Скачать)
 

Лабораторная  работа№2 

Тема: Выполнение операций сложения и вычитания над числами с фиксированной запятой

и над двоично-десятичными  числами. 

    Цель  работы: ознакомление с алгоритмами выполнения операции сложения и вычитания чисел, представленных в формате с фиксированной запятой,  чисел, представленных в D-кодах, приобретение практических навыков выполнения операций над этими  числами. 
 

    Теоретические сведения 

    Операции  сложения и вычитания  чисел в машинных кодах  

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

  1. Сложение  чисел в прямом коде.
 

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

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

    Рассмотрим  четыре случая получения суммы при │Х1│> │Х2│   и

    │Х1│ +│Х2│ < 1 

    Пусть заданы два числа: Х1 = 0,10110;    Х2 = 0,00101;

    1) Х1 > 0 ;   Х2 > 0 ;   Х3 = Х1 + Х2 > 0

            

            │Х1│ = +0,10110  

            │ Х2 =  0,00101

             │Х3 = 0,11011          Результат [Х3]пр = 0,11011 

    2) Х1 > 0 ;   Х2 < 0 ;   Х3 = Х1 + Х2 > 0 

           │ Х1 =   __0,10110                          

           │ Х2 =   _   0,00101

        │Х3 │ =      0,10001        Результат [Х3]пр = 0,10001 

    3) Х1 < 0 ;   Х2 > 0 ; Х3 = Х1 + Х2 < 0

           │ Х1 =   __0,10110                          

           │ Х2 =   _   0,00101

        │Х3 │ =      0,10001        Результат [Х3]пр = 1,10001 

    4)  Х1 < 0 ;   Х2 < 0 ;   Х3 = Х1 + Х2 < 0

            

            │Х1│ = +0,10110  

            │ Х2 =  0,00101

             │Х3 =  0,11011          Результат [Х3]пр = 1,11011 

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

  1. Сложение  чисел в дополнительном коде
 
 

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

      Считаем, что  │Х1│> │Х2│   и   [Х1]д + [Х2]д < 1

    Пусть заданы два числа: Х1 = 0,10110;   Х2 = 0,00101. Рассмотрим четыре случая:

    1) Х1 > 0 ;   Х2 > 0 ;   Х3 = Х1 + Х2 > 0

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

                [Х3]д = [Х1]д + [Х2]д = Х1 + Х2

    Правильный  знак суммы получается автоматически, так как знаковые цифры равны 0, а [Х1]д + [Х2]д < 1 по условию, т.е. нет 1 переноса в знаковый разряд. 

             Х1 = +0,10110  

            Х2 =  0,00101

             Х3 =   0,11011          Результат:     [Х3]д = [Х3]пр = 0,11011  

    2)  Х1 > 0 ;   Х2 < 0 ;   Х3 = Х1 + Х2 > 0

    Сумма положительна, значит результат должен быть получен в прямом коде. Правильный знак суммы получается в связи с тем, что есть перенос в знаковый разряд суммы, что дает результирующий знак 0. В этом случае возникает перенос из знакового разряда суммы, который не должен учитываться, т.е. найденная сумма требует коррекции (-2), которая производится автоматически (не учитывается перенос из знакового разряда суммы):  

         [Х1]д  = +0,10110

          [Х2]д  =  1,11011

            [Х3]д  = 10,10001       Результат:     [Х3]д = [Х3]пр = 0,10001

     

    3) Х1 < 0 ;   Х2 > 0 ; Х3 = Х1 + Х2 < 0

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

          [Х1]д  = +1,01010

           [Х2]д  =  0,00101

             [Х3]д  =   1,01111       Результат:  [Х3]д =  1,01111; [Х3]пр =  1,10001 

    4)   Х1 < 0 ;   Х2 < 0 ;   Х3 = Х1 + Х2 < 0.

    Так как сумма отрицательна, то результат  получается в дополнительном коде. Поскольку оба знаковых разряда равны 1 и есть перенос из цифровых разрядов в знаковые, получается правильный знак. В этом случае возникает перенос из знакового разряда суммы, который не должен учитываться. Как и во втором случае, сумма требует коррекции (-2), которая производится автоматически (не учитывается перенос из знакового разряда). 

          [Х1]д  = +1,01010

           [Х2]д  =   1,11011

          [Х3]д  = 11,00101      Результат:    [Х3]д =  1,00101; [Х3]пр =  1,11011  

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

     

  1. Сложение чисел в обратном коде
 

    В обратном коде, как и в дополнительном операция вычитания заменяется операцией  сложения. При этом знаковый разряд и цифровая часть рассматриваются  так же как единое целое, вследствие чего машина оперирует с отрицательными числами как с неправильными  дробями. Правильный знак суммы получается автоматически в процессе суммирования цифр знаковых разрядов операндов и единицы переноса из цифровой части, если она есть. Характерной особенностью обратного кода является наличие циклического переноса (если он возникает) из знакового разряда в младший разряд цифровой части, благодаря которому осуществляется коррекция суммы на 2-n .

    Считаем, что  │Х1│> │Х2│   и   [Х1]об + [Х2]об < 1

    Пусть заданы два числа: Х1 = 0,10110;   Х2 = 0,00101. Рассмотрим четыре случая:

    1) Х1 > 0 ;   Х2 > 0 ;   Х3 = Х1 + Х2 > 0

    Так как обратный код положительных  чисел не отличается от самих чисел, то определение их суммы совпадает  с ее получением в прямом коде:

                 [Х3]об = [Х1]об + [Х2]об = Х1 + Х2

    Правильный  знак суммы получается автоматически, так как знаковые цифры равны 0, а [Х1]об + [Х2]об < 1 по условию, т.е. нет 1 переноса в знаковый разряд. 

             Х1 = +0,10110  

            Х2 =  0,00101

             Х3 =   0,11011          Результат:     [Х3]об =  [Х3]пр = 0,11011

     

    2)  Х1 > 0 ;   Х2 < 0 ;   Х3 = Х1 + Х2 > 0

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

          [Х1]об  = +0,10110

           [Х2]об  =  1,11010

                           10,10001      

                                  + 1

          [Х3]об  =  0,10001       Результат:     [Х3]об = [Х3]пр =  0,10001 

    3)  Х1 < 0 ;   Х2 > 0 ; Х3 = Х1 + Х2 < 0

    Сумма отрицательна, значит, результат должен получиться в обратном коде, т.е. результат  коррекции не требует.

        

         [Х1]об  = +1,01001

           [Х2]об  =   0,00101

             [Х3]об =   1,01110       Результат:   [Х3]об =  1,01110; [Х3]пр =  1,10001 

    4)  Х1 < 0 ;   Х2 < 0 ;   Х3 = Х1 + Х2 < 0.

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

          [Х1]об  = +1,01001

           [Х2]об  =  1,11010

                        11,00011     

                                    +1         

            [Х3]об  = 1,00100        Результат:   [Х3]об =  1,00100; [Х3]пр =  1,11011 

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

Информация о работе Выполнение операций сложения и вычитания над числами с фиксированной запятой и над двоично-десятичными числами.