Операция деления в дополнительных кодах



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

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

и в этом же виде принимаются в АЛУ;

2) Операция вычитание выполняется по алгоритму ДД в дополни-

тельном модифицированном коде;

3) Цифры знака частного получаются автоматически в процессе деления на нулевом и первом тактах сравнения; 

4) Переполнение разрядной сетки определяется по несовпадению

цифр в знаковых разрядах.

5) Результат записывается в память без всяких преобразований.

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

7) Вычисляем C=A / B.

     Правила на нулевом такте сравнения:

    если ЗНА = ЗНВ , то С0 =0 R1 = А – В,

    если ЗНА ¹ ЗНВ , то С0 = 1 R1 = А + В. 

      Правила на всех последующих i – тых тактах сравнения

    если ЗНRi = ЗНВ , то Сi = 1 R i+1  = R i • 2 - В

    если ЗНRi ¹ ЗНВ , то Сi = 0 R i+1 = Ri • 2 + В    

Рассмотрим пример деления чисел, представленных в дополни

тельном коде, в соответствии с приведенным алгоритмом.

  Зададим исходные данные для наглядности в десятичном коде.

    С= А / В А= 15 / 32  В= - 24 / 32  очевидно С = -5 / 8.

Представим эти числа в двоичном дополнительном коде, то есть

в том виде, в котором они хранятся в ОЗУ и вводятся в регистры АЛУ.

     [РГА]пм := [А]дм =00.01111  [РГВ]пм :=[В]дм = 11.01000

( Условная точка отделяет знаковые разряды.)

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

   Итак, в первом случае будем прибавлять [РГВ]мп = 11.01000,

    во втором - будем использовать       [РГВ]мд = 00.11000

  Процесс вычислений представим в виде табл. 1.7.

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

      [C]мд =11.01011

для проверки запишем результат в прямом коде

     [C]п = 1.10101       

Переведем результат в десятичный код:

     С = - 21/32 ~ -5/8

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

 

 

Таблица 1.7

Такт Сравнение знаков Вычисления Пояснение Сi
0 ЗНА ¹ ЗНВ 00.01111 +11.01000 РГВ 11.10111 A     R1 С0 = 1
1 3НR1 = 3НВ 11.01110 + 00.11000 00.00110 R1 * 2   R2 C1 = 1
2 3НR2 ¹ 3HB 00.01100 + 11.01000 11.10100 R2 * 2   R3 C2 = 0
3 3HR3 = 3HB 11.01000 + 00.11000 00.00000 R3 * 2   R4 C3 = 1
4 3HR4 ¹ 3HB 00.00000 + 11.01000 11.01000 R4 * 2   R5 C4 = 0
5 3HR5 = 3HB 10.10000 + 00.11000 11.01000 R5 * 2   R6 C5 = 1
6 3HR6 = 3HB 10.10000 R6 * 2 C6 = 1

Логические операции

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

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

    Например, логическое сложение:

    S[1:n]=A[1:n]VB[1:n];

    для каждого разряда находится

    S[i] = A[i] V B[i].

    Аналогично, для всех логических операций.

 

Методы контроля правильности выполнения операций

              При поиске неисправностей в работе ЭВМ, контролируются , в основном, следующие операции:

     - передача  информации между устройствами, особенно между      АЛУ и ОЗУ;

-сдвиг;

    -инвертирование;

       -сложение.

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

 

 

Контроль передачи информации

Наиболее простым и распространенным способом проверки правильности передачи и хранения информации является так называемый принцип контроля по четности (нечетности), основанный на получении свертки по модулю 2 (суммы по мод.2) многоразрядного двоичного кода (∑M2).

В соответствии с этим принципом передаваемый, например, из АЛУ в ОЗУ код данных размером ``n`` разрядов А [0:n} дополняется ``n+1`` - контрольным. При этом цифра в (n+1) разряде устанавливается по следующим правилам:

если принят контроль по- четности, то ∑M2 (A [0 : n+1]) = 0,

если принят контроль по- нечетности, то ∑M2( A [0 : n+1]) = 1.

В момент приема из ОЗУ в АЛУ кода А[0 : n+1] выполняется проверка его правильности на основе принятого метода контроля.

    Контроль по- четности обнаруживает одиночные или нечетные ошибки.

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

Для подсчета четности или нечетности количества единиц в многоразрядном коде используются логические элементы - сумматоры по модулю 2 (полусумматоры).

Возможно построение полусумматоров двух типов : комбинационного и накапливающего .

Многоразрядный сумматор по модулю 2 – функциональный узел, предназначенный для определения суммы по мод2 количества единиц в многоразрядном коде. Например , имеем двоичный код

А = 1 0 1 1 0 0 1 1 ;

Сумма по модулю 2 этого числа: Smod2 = M2 ( A) = 1.

Иногда  сумму  по мод 2  многоразрядного кода называют ``остатком по мод 2`` или ``свёрткой по мод 2``.

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

Пусть имеется некоторый многоразрядный двоичный код :

 X = { X1 X2 X3… XN } , тогда сумма по модулю 2

 M2 (X) = X1 Å X2 Å X3 Å…Å XN                              (1.10)

Способы получения М2(Х) последовательного и параллельного многоразрядных кодов различны.

Для последовательного многоразрядного кода М2(Х) получается с помощью триггера со счетным входом.

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

M2 (X) = (…( ( ( X1 Å X2 ) Å X3 ) Å X4 ) … Å XN )     (1.11)

В схеме используется (N-1) одноразрядных сумматоров по модулю 2 . Если через t1 обозначить задержку одноразрядного сумматора по модулю 2 , то время срабатывания для этой схемы

ТМ2 посл  = t1 (N-1)

Многоразрядный сумматор по модулю 2 пирамидального типа строится в соответствии с логическим выражением (1.12).

М2 (Х) = ( ( Х1 Å Х2 ) Å ( Х3 Å Х4 ) ) Å ( ( Х5 Å Х6 ) Å … (1.12)

 

Время срабатывания для пирамидального сумматора M2:

TM2пир = t1 × lg2N

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

Контроль сдвига

Операция сдвига проверяется также с помощью схем контроля по четности. Для этой цели на выходе регистра сдвига РГА[0:n] устанавливается триггер со счетным входом, который представляет собой сумматор по М 2 накапливающего типа. Триггер контроля перебросится столько раз, сколько единиц будет в коде. На прямом выходе триггера будет значение, соответствующее М2 (РГА[0:n]).

     1.11.3.  Контроль сложения на основе остатков по М 2 

  Рассмотрим математическую постановку задачи. Ищем

S = A + B.

     Представим слагаемые и сумму в векторной записи как последовательность двоичных коэффициентов:

S = { Sn , Sn-1, … S1 , S0 }

A = { an , an-1, … a1 , a0 }

B = { bn , bn-1, … b1 , b0 }

C = { cn , cn-1, … c1 , c0 } – перенос

Si = ai Å bi Å ci

S1 = a1 Å b1 Å c1

………….

Sk = ak Å bk Å ck

Sn Å Sn-1 Å … S1 Å S0 = (an Å an-1 Å … a1 Å a0) Å (bn Å bn-1 Å … b1 Å b0) Å (cn Å cn-1 Å … c1 Å c0)

Приведем это соотношение к более компактной записи

M2 (S) = M2 (A) Å M2 (B) Å M2 (C)                           (1.13)

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

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

1.11.4. Контроль сложения на основе остатков по мод 3

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

S = A+B;        A + B = 3 ( a + b ) + R (A) + R (B)            (1.14)

  R(A) – остаток числа А по мод 3.

  R(A) – остаток числа В по мод 3.

A = a × 3 + R (A)

B = b × 3 + R (B) a,b - целые числа или 0

R ( A+B ) = R (A) + R (B) = g × 3 + R [ R (A) + R (B) ] , где

 R (A) и R(B) Î { 0,1,2 } , g Î { 0,1 }, R (A) + R (B) = [0..4] подставив в (9.6) получим A + B = 3 (a + b + g ) + R [ R)A) + R(B) ] и

 R ( A+B ) = R [ R)A) + R(B) ]                                    (1.15)

Соотношение  (1.15)  является математическим решением задачи контроля и на ее основе строится логическая схема контроля.

Из теории известно, что контроль по модулю 3 обнаруживает все одиночные и часть двойных ошибок.


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

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






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