Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

1.3. Операции двоичного сложения и вычитания с использованием дополнительного и обратного кодов




1. 3. Операции двоичного сложения и вычитания с использованием дополнительного и обратного кодов

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

    1. 3. 1 Вычитание  на основе дополнительного кода

  Пусть надо найти (действия выполняются над модулями чисел):

S=A+B; |A|< 1; |B|< 1; A> 0; B< 0. Тогда S= A - |B|;

Будем вычислять сумму модулей  в виде 

S* = [A]п + [-|В|]д = A+10 -|B|=10+(A - |B|)       (1. 5)

Рассмотрим два возможных случая:

1) А - |B| ≥ 0, тогда S* ≥ 0; S*≥ 10

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

              [S]п = S* - 10  =  A - |B|

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

2) Если в выражении (2. 1) принять (А - |B|) < 0, то S* < 10, S< 0 и по определению (1. 3) оказывается, что S* = [A- |B|]д.  Следовательно, отсутствие переноса из старшего разряда сумматора является признаком того, что сумма получилась в дополнительном коде.

    Рассмотрим для иллюстрации несколько примеров.

    Пример 1:

    S = A+B; A=. 11011; B= -. 00101 [-|В|]д =. 11011.

    S* = |A| + [-|В|]д =. 11011

                                   . 11011

                  S*=1. 10110                 S*> 1.

    В этом примере за пределы разрядной сетки вышла единица переноса Р0 = 1, следовательно, результат получился положительный и в прямом коде S = [S]п = 0. 10110.

Пример 2:                                                      

S=A+B; A= -. 11001              [A]д = 1. 00111    B=. 00101

S*=[|A| ]д + [|B| ]п   . 00111

                          +. 00101            

                       S* =  . 01100        

В этом примере перенос из старшего разряда отсутствует, т. е.  Р0 = 0, следовательно, результат отрицательный и получился в дополнительном коде, S* = [S]д.

1. 3. 2 Вычитание на основе обратного кода     Остановимся на особенностях выполнения операций сложения и вычитания на основе обратного кода.

Будем вычислять ( действия выполняются над модулями чисел):

    S = A+B;   |A| < 1; |B| < 1; A > 0; B < 0.

    Найдем решение в виде:

    S* = A  + [-|B|]o = A + 10 - |B| - 10-n = 10+(A - |B|) - 10-n      (1. 6)

    Оценим возможные варианты решения:

      1) Если   А - |B| ≥ 0, то           S* ≥ 10                  

    Анализ выражения (1. 6) показывает, что так как “10” образуется за счет переноса  из  старшего разряда Р0 = 1, то в разрядной сетке остается выражение (А - |B|) - 10-n.

    Следовательно, для получения правильного результата, если

Р0 = 1, необходимо добавить к полученной сумме единицу младшего разряда:

               |S| = (A - |B|) - 10-n +10-n = A - |B|

    Эта процедура носит название “циклический перенос”, так как при возникновении переноса из старшего разряда Р0 = 1 именно этот сигнал должен поступать на вход переноса младшего разряда сумматора для коррекции результата. При этом  результат получается положительным и в прямом коде.

2) Если  А - |B| < 0, то  выражение (1. 6)  представляет собой по определению обратный код искомой разности. При этом S* < 10, переноса из старшего разряда не возникает Р0 = 0, результат отрицательный S< 0, S* = [|S|]o

     Пример 1 S=A+B; A=. 11011              B= -. 00101

S*= |A|  + [- |B| ]о   =. 11011

+ . 11010

                                   1. 10101   так как Р0 = 1, то выполняется 

                               + . 00001       циклический перенос                                  |S| =. 10110 ЗНS = ЗНА   [S]п = 0. 10100

     Пример 2

S=A - B; A=. 00101.             B=. 11001

S*= |A|  + [- |B| ]о =  . 00101

                       +. 00110

                 S*=. 01011

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

    S*=[|S|]о; [S]о = 1. 01011 [S]п = 1. 10100

    Рассмотрим еще один пример, в котором представляется вариант с переполнением сетки

S=A + B; A=. 11011             B=. 01001

S*=  |A| + |B| =. 11011

                + . 01001

               S*=1. 00100

    На основе приведенных выше способов оценки результат должен получиться отрицательным, так как Р0 = 0, да и в знаковом разряде также стоит “1”. Однако сумма положительна, но |S*|> 1 т. е. произошло переполнение разрядной сетки. Следовательно, для обнаружения такой ситуации должны быть использованы дополнительные логические условия.

1. 4. Модифицированные коды

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

№ разряда .......... n
Значение ЗН[0] ЗН[1] 2-1 2-2 .......... 2-(n-1)

 

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

ЗН[0] ЗН[1]    
|S|< 1 S> 0
|S|< 1 S< 0
|S|≥ 1 S> 0
|S|≥ 1 S< 0

 

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

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

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

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

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

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

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

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

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

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

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...