Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
конспект1.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
7.51 Mб
Скачать
  1. Синхронный метод

Множитель находится в едином регистре В, управление осуществляется одним УА, умножение производится одновременно на разряды n и n/2 множителя. Такт суммирования пропускается, если только разряды множителя n и n/2 равны 0, иначе сложение выполняется хотя бы на одном сумматоре. В такте сдвига УА вырабатывает сигнал микрооперации сдвига в обоих сумматорах и регистре В (обе части регистра В сдвигаются одновременно).

tумн.ср=.n/2(3/4Тумн.сдв.)+Тсум.

n n/2

0 0 - такт сложения пропускается

0 1

1 0

1 1

  1. Асинхронный метод

Старшая и младшая часть множителя находится в двух разных регистрах В1 и В2: регистр В аппаратно разделен на две части, управление осуществляется двумя автономными УА. Первый УА управляет вычисление суммы частичных произведений при умножении на В1, второй УА – на В2. в одном и том же такте в каждом из сумматоров может хранится сумма 5 и 7 частичных произведений(3 и 6, и т.д.). Операции сдвига в В1С1 и В2С2 независимы и инициируются разными УА. По окончании процесса умножения выдается в каждом из сумматоров осведомительный сигнал.

tумн.ср=.n/2(0.5Тумн.сдв.)+Тсум.

Если сумматоров к, то tумн.ср=.n/к(0.5Тумн.сдв.)+Тсум.

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

Использование сумматора с запоминанием переноса.

tсум=ntкс+tпр.кода

Основная идея:

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

В цикле проверки Bn

1такт – y(+) (множитель+сумма част.произведений+перенос)

2Такт – y(-)(сдвиг)

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

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

Пример:

В 0 0111 0 0111 0 1011 0 1011 0 0101 0 0101 0 0010 0 0010 0 1001

СМ 00 0000 00 1111 00 0111 00 1000 00 0100 00 1100 00 0110 00 0001 00 0000

Р 0000 0000 0000 0111 0111 0111 0111 0110 0110

А 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111 0 1111

Сч 00 00 01 01 10 10 11 11 00

0 1001 7/16*15/16=105/256

00 0110 6/16+9/256=105/256

0110

0 1111

00

Дерево сумматора.

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

С123=S1s+S2p

C1+C2+…+Cn= 2/3n слагаемых

4/9n слагаемых и т.д.

Ускорение достигается за счет того, что при выработке каждой суммы в каждом из n-2 сумматоров нет задержки распространения переноса. Последние два слагаемых складываются на n-1 сумматоре, у которых цепи переноса замкнуты.

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

Дерево сумматора для умножения 12-разрядных чисел:

Сi(1:n)=A(1:n)*bi

tсум=17кс<=24tкс<=2ntкс

Все слагаемые подаются на сумматоры с необходимым сдвигом.

Пример:

0,1111*0,1111

дерево сумматора:

tсум=2tкс+5tкс=7tкс

1

1

1

1

1

C1 Sum8

1

1

1

1

1

1

C2

C2

1

1

1

1

C3

1

0

1

1

0

S1

0

1

1

1

1

S2

2

1

0

1

1

0

S1 Sum7

0

1

1

1

1

L1(S2)

1

1

1

1

1

1

1

C4

1

1

0

1

0

S3

0

1

1

1

1

S4

3

1

1

0

1

0

S3 Sum6

0

1

1

1

1

L1(S1)

1

1

1

0

0

Sum(1:5)

Умножение чисел представленных в дополнительных кодах.

С=А*В

  1. В>0

Алгоритм умножения применяется без изменения. К сумме частичных произведений в каждом такте прибавляется А, если цифра Bn =1. знаковые разряды С иа учавствуют в суммировании, у А знаковый разряд при суммировании удваивается.

С 11 0111

После сдвига 11 1011

С 10 1000

После сдвига 11 0100

  1. B<0

А*(-В)=А*(1-В)=А-АВ

1-АВ

А-АВ+(1-А)=1-АВ

Корректирующее слагаемое

После умножения в цикле на n цифр множителя к сумматору прибавляется корректирующее слагаемое(кс). Если B>0, то корректирующее слагаемое=0, иначе – 1-А .

А*В

5*6 кс=0

-5*6 кс=0

5*(-6) кс=1-5=11 1011

-5*(-6) кс=00 0101

микропрограмма:

Деление двоичных чисел с фиксированной точкой.

D=A/B,

|A| < 1, |B| < 1

1. |A| >=|B|, |D|>=1, Fпп:=0

2.B=0, Fпп:=1

Fпп – флаг переполнения.

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

Числа делятся по модулю, знак числа – сложение по модулю2.

|D|=|A|/|B|

Зн.D=Зн.АЗн.В

Две постановки задачи деления:

  1. деление с вычитанием остатка.

Результат деления D и R остаток от деления вычисляются с точностью до n знаков, где n – число информационных разрядов в делимом и делителе.

  1. деление с округлением.

Вычисляется только частное D (n-знаковое). Вычисляется n+1 цифра частного для округления, чтобы не накапливалась ошибка.

Di=0.d1d2…di, i-цифр

Найти I=1 цифру:

0D-Di2-I

D=0 110001

Di=01101

D-Di0.0000|12i+1

02iB(D-Di)B

0 2i(A-BDi)B

Ri

Ri – остаток от деления при вычислении i-той цифры частного.

Ri=2i(A-BDi)

0RiB

Пусть di+1=0, тогда Di=Di+1

Ri+1=2i+1(A-BDi+1)= 2i+1(A-BDi)=2*2i(A-BDi)=2Ri

0Ri+1B; 02RiB

Если 2Ri<B, то di+1=0

Пусть di+1=1

Di+1=Di+2-(i+1)

Ri+1=2i+1(A-BDi+1)= 2i+1(A-BDi-B*2-(i+1))=2*2i(A-BDi)-B=2Ri-B

02Ri-BB

Если 2RiB, то di+1=1

R0=A

Алгоритм деления с восстановлением остатка.

  1. Сч:=0, А0, В0.

  2. R:=A-B

  3. Если R0, то Fпп:=1, конец.

Иначе R:=R+B.

4 . R:=2R

5. R:=R-B

6. Если R0, то D:=L(D).1

Иначе D:=L(d).0: R:=R+B

7. Сч:=Сч+1

8. Если Сч<n+1, то перейти к п.4

9. Зн.D=Зн.АЗн.В

10. Конец.

Пример:

.1011/.1100

_ .1011

1100

_10100,0>0……….0.00001

1100

_1000.0>0………….0.0011

1100

_100.0>0…………..0.00111

1100

+отриц.число<0………0.01110

1100

_1000

1100

100>0……………..0.11101

Rt;

Rt+1=Rt+B;

Rt+2=2Rt+1=2Rt+2B;

Rt+3+Rt+2-B=2Rt+2B-B=2Rt+B.

Алгоритм деления без восстановления остатка.

  1. Восстановление отрицательного остатка

  2. Сдвиг или удвоение остатка

  3. Сдвиг и вычитание делителя эквивалентны удвоению отрицательного остатка и прибавлению делителя.

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

Микропрограмма:

Операции в АЛУ на двоичными числами с плавающей точкой.

Р – порядок

М – мантисса

А=М*2Р

Если Р определяет диапазон представления чисел в ЭВМ, то М – точность представления чисел в ЭВМ.

С:=АВ; {+,-,*,/}

Необходимое оборудование:

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

Операнды (ОП) поступают из памяти в ОА в нормализованном виде; знаковые разряды дублируются только на ОЭ. Результат операции тоже должен быть в нормализованном виде.

Нормализованное число: 1/2|М|1.

Нормализованное число – это число, у которого первая информационная цифра мантиссы равна 1 для положительных чисел и равна 0 – для отрицательных чисел, и знаковые разряды мантиссы при этом одинаковые.

00,11001 – нормализованное число

11,0011 – нормализованное число

Требования для нормализованных чисел:

Мс(0)Мс(2)=1

Мс(0)Мс(1)=0.

Виды нарушения нормализации:

  1. Нарушение нормализации влево(переполнение мантиссы).

01,110

01 – для положительных чисел

10 – для отрицательных чисел

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

  1. Нарушение нормализации вправо(знаковые разряды мантиссы равны, но не выполняется условие: Мс(0)Мс(2)=1).

00.00010

11.110

Восстановление нормализации возможно сдвигом мантиссы влево и уменьшением порядка на 1.

-1/210=11,1002 – нормализованное число, не выполняется условие Мс(0)Мс(2)=1;

+1/210=00,1002

Исключительные ситуации при нормализации и после выполнения операций с плавающей точкой.

  1. Аварийное завершение операции(прерывание).

Мантисса=0, а порядок любой. Ситуация такая называется потеря значимости.

Fпз:=1; Р:=0.

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

Fпп :=1.

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

Fип :=1.

Микропрограмма нормализации чисел:

Алгоритм сложения чисел с плавающей точкой.

Даны:

А=МА*2Ра

В=МВ*2Рв

Найти:

С=МС*2Рс

Операнды и результат должны быть в нормализованном виде.

  1. Проверка особых ситуаций:

Если МВ=0, то С:=А

Если МА=0, то С:=В

Переход к концу.

  1. Выравнивание порядков.

0,5*103+0,4*102=0,5*103+0,04*103=0,54*103.

    1. Вычисление разности порядков: РС:=РАВ.

    2. Если |РС|n+1, то сумма принимается равной числу с большим порядком:

Если РС=0, то С:=А;

Если РС=1, то С:=В.

Переход к концу.

    1. Если РС0, то производится уравнивание порядков слагаемых, путем приведения числа с меньшим порядком к числу с большим порядком. Уравнивание порядков выполняется арифметическим сдвигом мантиссы числа с меньшим порядком вправо на число разрядов равное |РС|.

Если ЗнРс=1, то преобразуется МА.

Если ЗнРс=0, то преобразуется МВ.

Сдвиг осуществляется следующим образом:

При каждом элементарном сдвиге на 1 разряд из РС вычитается 1, если сдвигается МВ, и прибавляется 1, если сдвигается МА.

Выход из цикла по РС=0.

Если МА и МВ представлены в прямом коде, то старшие освобождающиеся при сдвиге информационные разряды заполняются нулями; если в инверсном коде, то знаковыми разрядами.

  1. Мантиссы, полученные после уравнивания порядков, складываются как числа с фиксированной точкой.

МС:=МАВ.

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

РС:=max(РАРВ).

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

  1. Округление мантиссы результата осуществляется прибавлением 1 к n+2 разряду сумматора мантисс.

  2. Нормализация результата (см. алгоритм выше).

Исключительные ситуации при сложении:

  • Потеря значимости;

  • Переполнение порядка при нормализации со сдвигом вправо;

  • Исчезновение порядка при нормализации со сдвигом влево.

Умножение чисел с плавающей точкой.

С=А*В

Даны:

РА, МА, РВ, МВ.

Найти:

РС, МС.

  1. Порядки складываются по правилам сложения чисел с фиксированной точкой. Мантиссы перемножаются по правилам умножения чисел с фиксированной точкой.

  2. Младшие разряды произведения, выдвигаемые в такте сдвига из сумматора мантисс, не сохраняются, кроме n+2 разряда.

  3. Результат округляется добавлением 1 в n+2 разряд МС и нормализуется.

Исключительные ситуации:

  • Исчезновение порядка при нормализации со сдвигом влево;

  • Переполнение порядков, т.к. имеет место сложение порядков в алгоритме.

Деление чисел с плавающей точкой.

С=А/В.

РСАВ;

МСАВ.

Порядки вычитаются, а мантиссы делятся по соответствующим алгоритмам выполнения операций с фиксированной точкой.

Исключительные ситуации:

  • Деление на ноль;

  • Исчезновение порядка при нормализации со сдвигом влево;

  • Переполнение порядков, т.к. имеет место сложение порядков в алгоритме.

Особенности применяемого алгоритма деления с фиксированной точкой.

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

  • МА перед выполнением деления с фиксированной точкой сдвигается влево на один разряд, порядок увеличивается на 1.

  • Предусматривается нормализация со сдвигом влево.

Выполнение операций десятичной арифметики в АЛУ.

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

Десятичные числа представляются в АЛУ в двоично-десятичном коде.

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

PiCi=Ai+Bi+Pi+1 , где

Ai и Bi – четырехразрядные коды десятичных цифр слагаемых;

Pi+1 – десятичный перенос(перенос со сдвигом 10) из предыдущего младшего десятичного разряда суммы;

Pi – десятичный перенос в следующий старший разряд суммы;

Ci – 4-х разрядный двоичный код цифр суммы

Ai+Bi+Pi+1<=19;

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

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

Три случая возникающие при сложении десятичных чисел на двоичном сумматоре:

  1. 0Ci9 Ci

0010+0011=0101

Pi=0

  1. 10Ci15 Ci

1001+0011=1100

Pi=0

надо: Pi=1, Ci=0010

1100

+

0110

P -1.0010 - Ci

  1. 16Ci19 Ci 0001

1000+1001=0001 +

Pi=1 0110

0111

Если Ci10, то всегда нужна коррекция.

Алгоритм сложения десятичных чисел.

A>0; B>0; C=A+B.

  1. Вычисляется сумма С=а1а2..an+bb..b (рассматриваются только информационные разряды).

  2. С:=С+В

Если перенос старшей тетрады равен1, то фиксируется Fпп:=1.

Иначе переход к концу.

  1. Формируется корректирующее слагаемое.

Корректирующая цифра ki=0000, если Pi=1.

Ki=1010, если Pi=0.

  1. Вычисляется сумма: С:=С+Л(суммирование производится с разорванными цепями межтетрадных переносов).

Пример:

134+591=725

0001 0011 0100

+

0110 0110 0110 +6

0111 1001 1010

+

0101 1001 0001 +В

1101 10010 1011 (*)

-

1010 0000 1010 +К

0111 0010 0101

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

В этом случае во все тетрады будет идти перенос, но учитываться он не будет.

Пример:

(*) 1101 0010 1011

1001 1111 1001

1

0111 0010 0101

Вычитание десятичных чисел.

С=А-В (A>0, B>0)

B*=10n-B

0001 0000 0000 0000

b1 b2 b3

b1* b2* b3*

bi*=10-bi для i=n;

bi*=9-bi для i=1, .. , n-1;

_

Ci=Ai+6+bi*=Ai+6+9-bi=Ai+15-bi=Ai+bi

Алгоритм вычитания:

_ _ _

  1. С:=а1а2..а3+b1b2..bn+1

  2. K=K1…Kn

Ki=1111, если Pi=1

Ki=1001, если Pi=0.

  1. C:=C+K

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

Пример:

725-135=590 А>B

01111 0010 0101

+

1110 1100 1010

1

10101 1111 10000

1111 1001 1111

1

0101 1001 0000

Если А<B, то результат получится в дополнительном коде.

А>B С:=А-B

А<B C:=10n-|B-A|

Пример:

135-725

0001 0011 0101

+

1000 1101 1010

1

11010 10001 10000

1001 1111 1111

0100 0001 0000

410=1000-590

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

Обобщенный алгоритм:

С:=А+В

  1. Зн С:=Зн А

  2. Если Зн А=Зн В, то выполняется микропрограмма сложения.

Если перенос из старшего информационного разряда P1=1, то вводится Fпп:=1, иначе переход к концу.

  1. Если Зн АЗн В, то выполняется микропрограмма вычитания А-В.

Если перенос из старшего разряда Р1=0, то знак суммы меняется на противоположный и выполняется микропрограмма В-А.

Пример:

135-725=-590

Зн С:=Зн А

0001 0011 0101

1000 1101 1010

1

11010 10001 10000

С:=В-А

0111 0010 0101

1110 1100 1010

1

и т.д.

Реализация микропрограммы в АЛУ.

Некоторые участки кода используются в различных ветвях алгоритма, существует алгоритм оптимизации ГСА.