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



 Операцию вычитание в коде 8-4-2-1 можно реализовать, как и при двоичном вычитании, на основе прямого, обратного или дополнительного кодов.

В машинной арифметике, как известно, чаще всего применяется дополнительный код числа. Рассмотрим правила двоично-десятичного вычитания при использовании дополнительного кода на основе общих положений ( см.1.5.2 ).

Прежде всего необходимо разработать методику нахождения дополнительного кода отрицательного числа, представленного в двоично- десятичном коде 8-4-2-1.

   Вычислим S = А – В. Примем для простоты, что А > 0 , В > 0 , А > В.

Сначала выполним вычитание в десятичном коде, используя машинные алгоритмы ПП и ПД ( см. раздел 1.5 ). В обоих алгоритмах числа в памяти хранятся в в прямых кодах, в действиях сложения и вычитания участвуют только модули чисел. Знак результата определяется логическим путем.   

                    A = . 8 3 7 5 4

                  - B = . 2 5 4 9 6                                                       (1.9)             

                    S = . 5 8 2 5 8                                   

    Заменим вычитание сложением в дополнительном коде. Будем искать псевдосумму  С = [А]п + [-В]д

Сначала в соответствии с правилами определим дополнительный код

     [-B]д = 1+ (- B ) = 1 – B = 1. 0 0 0 0 0

                                              - . 2 5 4 9 6                          (1.10)                    

                                                 . 7 4 5 0 4

Продолжим [А]п = . 8 3 7 5 4                                            (1.11)

                 +[-B]д =  . 7 4 5 0 4                                     

                     С  =  1.5 8 2 5 8

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

С = . 5 8 2 5 8 = S

и совпадает с результатом, полученным выше при вычитании в прямых кодах (1.9).

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

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

           B = { b1 b2  b3 …  bi …    bn }              (1.12)

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

          [-B]д = { b1д b2д b3д … biд … bnд }                    (1.13)

Анализ процедуры получения дополнительного кода десятичного числа (1.10) показывает, что младшая цифра дополнительного кода получается вычитанием из десяти цифры младшего разряда исходного числа, а десятичные цифры всех остальных разрядов дополнительного кода получаются вычитанием из девяти соответствующих цифр прямого кода. Запишем выражение для вычисления цифры произвольного разряда дополнительного кода ( кроме i = n ) и преобразуем его, заменяя операцию вычитание сложением в дополнительном коде.

          [-bi]д = 9- bi = 16 – 7 – bi = ( 16 – bi ) + [ - 7 ]д16 =

       = [- bi ] o16 + ( 16 – 7 + 1 ) = [- bi ]o16  + 10                  ( 1.14 )

Используя выражение ( 2.4 ) , запишем аналогичное соотношение для

            i = n      [- bn ]д = [ - bn ]o16 + 11

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

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

- ко всем декадам ( кроме последней справа ) прибавить 1010 = 10102;

- к последней декаде прибавить 1110 = 10112;

- в процессе сложения переносы внутри декады учитываются;

- возникающие междекадные переносы игнорируются.

Найдем  по этим правилам дополнительный  код двоично-десятичного числа

( - В ) = -- 25496 из примера (1.10).

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

             [В]о =   1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 0 1 0 0 1

                       + 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 1

           [-B]д2-10 = 0 1 1 1 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 

             [-B]д10 =      7       4         5        0        4

Как видим, дополнительный код двоично-десятичного числа [-B]д2-10 равен дополнительному коду десятичного числа [-B]д10.                        

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

                                1                  1   

           [A]п2-10 =     1 0 0 0 0 0 1 1 0 1 1 1 0 1 0 1 0 1 0 0

       + [-B]д2-100 1 1 1 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0

                         =  1 1 1 1 1 1 0 0 0 1 1 0 0 0 1 0 1 1 0 0 0

                         + 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0

                    С = 1 0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0

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

               S2-10 =  0 1 0 1 1 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0

S10 = . 5 8 2 5 8

Операции сложения и вычитания чисел в форме с плавающей запятой

Формат числа с плавающей запятой рассматривался выше в разделе 1.1.

В общих чертах алгоритм выполнения операций сложения и вычитаниясоответствует процедурам ручного счета.

Рассмотрим       g = a ± b

            a = A ×10a

            b = B ×10b

            g = S ×10c

A,B,S – нормализованные мантиссы : 1/10 £ A < 1 ,

10 – основание системы счисления;

a,b,c – порядки.

Выполним этот пример в десятичной системе счисления:

a = -0.9572 ×10-4   a = -4 А=-0.9572

b = 0.1567 ×10-3             b = -3 В= 0.1567

g = a + b

1) Находится разность порядков:

z = a – b = -4 + 3 = -1  так как z < 1, то a < b

2) Уравнивание порядков чисел происходит за счет того, что сдвигается вправо мантисса числа с меньшим порядком, т.е А = -0.09572

3) Порядок результата приравнивается порядку большего числа с=в= -3

4) Выполняется сложение мантисс

А = - 0.09572

+ В = 0.15670

S = 0.06098   

5) Нормализация мантиссы, т.е. мантисса сдвигается влево на 1 разряд

S = 0.60980

6) Коррекция порядка c= – 4

7) Окончательный результат

g =  0.60980 ×10-4

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

- АЛУ для действий над порядками;

- АЛУ для действий над мантиссами.

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


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

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






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