Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по теории автоматов (ТА).doc
Скачиваний:
207
Добавлен:
11.04.2014
Размер:
864.77 Кб
Скачать

Вопрос 4. Двоичное умножение

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

1. Умножение двоичных чисел – это циклическая операция (если используется косвенный алгоритм умножения). Количество шагов зависит от разрядности множителя. На каждом шаге выполняется сдвиг операндов и возможное сложение.

A – множимое

В – множитель

С – сумма частичных произведений

Р(С) – произведение

Данный алгоритм соответствует известному алгоритму «умножение в столбик»

A = 5

В = 6

А2 = 0101 В2 = 0110

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

1) умножение с младших разрядов со сдвигом вправо СЧП

2) умножение со старших разрядов со сдвигом влево СЧП

3) умножение с младших разрядов со сдвигом влево СЧП

4) умножение со старших разрядов со сдвигом вправо СЧП

Каждый из вариантов соответствует определённому варианту раскрытия скобок в произведении

- 1-ая схема умножения

Вопрос 5. Умножение в инверсных кодах

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

  1. все операции сложения и сдвига выполняются по правила соответствующего инверсного кода

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

Сдвиг вправо происходит с размножением знака.

Сдвиг влево в ОК происходит циклически.

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

Коррекция в дополнительном коде: P=P’-A

Коррекция в ОК: P=P’-A+A*2-n

Коррекций №1: С=А (перед циклом)

Коррекций №2: P=P’-A (после цикла)

Все операции с инверсным кодом лучше выполнять в модифицированном коде, т.е. с двумя знаковыми разрядами. 11. – «+», 00. – «-»

Пример: (-5)x(-6)

Апк=11.0101

Адк=11.1011

Впк=11.0110

Вдк=11.1010

дк=00.1011

Регистр С

Регистр В

В(0)

Комментарий

00.0000

11101

0

CNT=4, CNT0

B(0)=0 => C-> и B->

00.0000

+

11.1011

01110

1

CNT=3, CNT0

B(0)=1 => C=C+A

11.1011

01110

1

C-> и B->

11.1101

10111

0

CNT=2, CNT0

B(0)=0 => C-> и B->

11.1110

+

11.1011

11011

1

CNT=1, CNT0

B(0)=1 => C=C+A

11.1001

11011

1

C-> и B->

11.1100

11101

1

CNT=0 – конец

В(0)=1 => B<0 => коррекция C:=C+[-A]

P=00.00011110

Вопрос 6. Деление

Деление двоичных чисел – циклическая операция, но в отличие от умножения, деление может выполняться бесконечно. На практике деление останавливается при определении требуемого разряда частного (n+1 разряда частного, затем округляется).

В цикле деления выполняется сдвиг текущего остатка влево и вычитание делителя.

Выделяют два основных алгаритма деления:

а) с восстановлением остатка.

б) без восстановления остатка.

С восстановлением остатка:

1) выполняется пробное вычитание делимого из делителя

Делимое – А, делитель – В, R – остаток, Ri – текущий остаток, Ri+1 – следующий остаток, С – частное.

Если R>0, то деление останавливается (рассматривается деление правильных дробей).

Если R<0, то выполняется восстановление (R+B)

2) удвоение остатка

3) вычитание делителя из остатка

Если Ri+1>0, то очередная цифра частного равна 1, иначе – равна 0. в последнем случае выполняется восстановление остатка.

4) действия 2) и 3) выполняются n раз и результат округляется до n разрядов

При восстановлении остатка, очередной остаток вычисляется так:

Ri+1=2(Ri+B) - B=2Ri+B

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