
- •Машины общего назначения (пк и др.).
- •Специализированные эвм.
- •Проблемно-ориентированные машины.
- •Арифметико-логическое устройство эвм как операционное устройство.
- •2. Умножение , начиная с младших разрядов множителя со сдвигом множимого.
- •Умножение, начиная со старших разрядов множителя со сдвигом множимого.
- •Синхронный метод
- •Асинхронный метод
- •2Такт – y(-)(сдвиг)
Синхронный метод
Множитель находится в едином регистре В, управление осуществляется одним УА, умножение производится одновременно на разряды n и n/2 множителя. Такт суммирования пропускается, если только разряды множителя n и n/2 равны 0, иначе сложение выполняется хотя бы на одном сумматоре. В такте сдвига УА вырабатывает сигнал микрооперации сдвига в обоих сумматорах и регистре В (обе части регистра В сдвигаются одновременно).
tумн.ср=.n/2(3/4Тумн.+Тсдв.)+Тсум.
n n/2
0 0 - такт сложения пропускается
0 1
1 0
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 такт.
С1+С2+С3=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) |
Умножение чисел представленных в дополнительных кодах.
С=А*В
В>0
Алгоритм умножения применяется без изменения. К сумме частичных произведений в каждом такте прибавляется А, если цифра Bn =1. знаковые разряды С иа учавствуют в суммировании, у А знаковый разряд при суммировании удваивается.
С 11 0111
После сдвига 11 1011
С 10 1000
После сдвига 11 0100
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=Зн.АЗн.В
Две постановки задачи деления:
деление с вычитанием остатка.
Результат деления D и R остаток от деления вычисляются с точностью до n знаков, где n – число информационных разрядов в делимом и делителе.
деление с округлением.
Вычисляется только частное D (n-знаковое). Вычисляется n+1 цифра частного для округления, чтобы не накапливалась ошибка.
Di=0.d1d2…di, i-цифр
Найти I=1 цифру:
0D-Di2-I
D=0 110001
Di=01101
D-Di0.0000|12i+1
02iB(D-Di)B
0 2i(A-BDi)B
Ri
Ri – остаток от деления при вычислении i-той цифры частного.
Ri=2i(A-BDi)
0RiB
Пусть di+1=0, тогда Di=Di+1
Ri+1=2i+1(A-BDi+1)= 2i+1(A-BDi)=2*2i(A-BDi)=2Ri
0Ri+1B; 02RiB
Если 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
02Ri-BB
Если 2RiB, то di+1=1
R0=A
Алгоритм деления с восстановлением остатка.
Сч:=0, А0, В0.
R:=A-B
Если R0, то Fпп:=1, конец.
Иначе R:=R+B.
4 . R:=2R
5. R:=R-B
6. Если R0, то 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,5).
Микропрограмма:
Операции в АЛУ на двоичными числами с плавающей точкой.
Р – порядок
М – мантисса
А=М*2Р
Если Р определяет диапазон представления чисел в ЭВМ, то М – точность представления чисел в ЭВМ.
С:=АВ; {+,-,*,/}
Необходимое оборудование:
N+2 разряд в мантиссах необходим для округления, т.к. выполнение операций с плавающей точкой связаны с потерей точности.
Операнды (ОП) поступают из памяти в ОА в нормализованном виде; знаковые разряды дублируются только на ОЭ. Результат операции тоже должен быть в нормализованном виде.
Нормализованное число: 1/2|М|1.
Нормализованное число – это число, у которого первая информационная цифра мантиссы равна 1 для положительных чисел и равна 0 – для отрицательных чисел, и знаковые разряды мантиссы при этом одинаковые.
00,11001 – нормализованное число
11,0011 – нормализованное число
Требования для нормализованных чисел:
Мс(0)Мс(2)=1
Мс(0)Мс(1)=0.
Виды нарушения нормализации:
Нарушение нормализации влево(переполнение мантиссы).
01,110
01 – для положительных чисел
10 – для отрицательных чисел
Восстановление нормализации в этом случае происходит сдвигом мантиссы на один разряд, при этом мантисса уменьшается в два раза, поэтому порядок нужно увеличивать на 1.
Нарушение нормализации вправо(знаковые разряды мантиссы равны, но не выполняется условие: Мс(0)Мс(2)=1).
00.00010
11.110
Восстановление нормализации возможно сдвигом мантиссы влево и уменьшением порядка на 1.
-1/210=11,1002 – нормализованное число, не выполняется условие Мс(0)Мс(2)=1;
+1/210=00,1002
Исключительные ситуации при нормализации и после выполнения операций с плавающей точкой.
Аварийное завершение операции(прерывание).
Мантисса=0, а порядок любой. Ситуация такая называется потеря значимости.
Fпз:=1; Р:=0.
При нарушении нормализации влево, после сдвига мантиссы вправо может возникнуть переполнение порядка. Такая ситуация называется переполнение порядка.
Fпп :=1.
При нарушении нормализации вправо, после сдвига мантиссы влево может возникнуть отрицательное переполнение порядка. Такая ситуация называется исчезновением порядка.
Fип :=1.
Микропрограмма нормализации чисел:
Алгоритм сложения чисел с плавающей точкой.
Даны:
А=МА*2Ра
В=МВ*2Рв
Найти:
С=МС*2Рс
Операнды и результат должны быть в нормализованном виде.
Проверка особых ситуаций:
Если МВ=0, то С:=А
Если МА=0, то С:=В
Переход к концу.
Выравнивание порядков.
0,5*103+0,4*102=0,5*103+0,04*103=0,54*103.
Вычисление разности порядков: РС:=РА-РВ.
Если |РС|n+1, то сумма принимается равной числу с большим порядком:
Если РС=0, то С:=А;
Если РС=1, то С:=В.
Переход к концу.
Если РС0, то производится уравнивание порядков слагаемых, путем приведения числа с меньшим порядком к числу с большим порядком. Уравнивание порядков выполняется арифметическим сдвигом мантиссы числа с меньшим порядком вправо на число разрядов равное |РС|.
Если ЗнРс=1, то преобразуется МА.
Если ЗнРс=0, то преобразуется МВ.
Сдвиг осуществляется следующим образом:
При каждом элементарном сдвиге на 1 разряд из РС вычитается 1, если сдвигается МВ, и прибавляется 1, если сдвигается МА.
Выход из цикла по РС=0.
Если МА и МВ представлены в прямом коде, то старшие освобождающиеся при сдвиге информационные разряды заполняются нулями; если в инверсном коде, то знаковыми разрядами.
Мантиссы, полученные после уравнивания порядков, складываются как числа с фиксированной точкой.
МС:=МА+МВ.
Порядок суммы принимается равным наибольшему из порядков слагаемого.
РС:=max(РАРВ).
Отличие от алгоритма сложения с фиксированной точкой – не вырабатывается сигнал переполнения, т.к. возможна нормализация со сдвигом вправо.
Округление мантиссы результата осуществляется прибавлением 1 к n+2 разряду сумматора мантисс.
Нормализация результата (см. алгоритм выше).
Исключительные ситуации при сложении:
Потеря значимости;
Переполнение порядка при нормализации со сдвигом вправо;
Исчезновение порядка при нормализации со сдвигом влево.
Умножение чисел с плавающей точкой.
С=А*В
Даны:
РА, МА, РВ, МВ.
Найти:
РС, МС.
Порядки складываются по правилам сложения чисел с фиксированной точкой. Мантиссы перемножаются по правилам умножения чисел с фиксированной точкой.
Младшие разряды произведения, выдвигаемые в такте сдвига из сумматора мантисс, не сохраняются, кроме n+2 разряда.
Результат округляется добавлением 1 в n+2 разряд МС и нормализуется.
Исключительные ситуации:
Исчезновение порядка при нормализации со сдвигом влево;
Переполнение порядков, т.к. имеет место сложение порядков в алгоритме.
Деление чисел с плавающей точкой.
С=А/В.
РС=РА-РВ;
МС=МА/МВ.
Порядки вычитаются, а мантиссы делятся по соответствующим алгоритмам выполнения операций с фиксированной точкой.
Исключительные ситуации:
Деление на ноль;
Исчезновение порядка при нормализации со сдвигом влево;
Переполнение порядков, т.к. имеет место сложение порядков в алгоритме.
Особенности применяемого алгоритма деления с фиксированной точкой.
В классический алгоритм деления вносятся незначительные изменения:
МА перед выполнением деления с фиксированной точкой сдвигается влево на один разряд, порядок увеличивается на 1.
Предусматривается нормализация со сдвигом влево.
Выполнение операций десятичной арифметики в АЛУ.
Не во всех системах команд есть такие операции. Наличие операций десятичной арифметики целесообразно для несложных расчетов коммерческого характера с простыми формулами, где нужны целочисленные вычисления и невыгодно переводить числа в двоичные представления и обратно, для того чтобы над ними выполнить 2-3 операции.
Десятичные числа представляются в АЛУ в двоично-десятичном коде.
Сложение двух десятичных чисел сводится к последовательной выработке сумм вида:
PiCi=Ai+Bi+Pi+1 , где
Ai и Bi – четырехразрядные коды десятичных цифр слагаемых;
Pi+1 – десятичный перенос(перенос со сдвигом 10) из предыдущего младшего десятичного разряда суммы;
Pi – десятичный перенос в следующий старший разряд суммы;
Ci – 4-х разрядный двоичный код цифр суммы
Ai+Bi+Pi+1<=19;
Построение такой схемы достаточно сложное и схема будет сложной, поэтому обычно для сложения десятичных чисел используется обычный двоичный сумматор, который настраивается на уровне микропрограммы применительно к специфике сложения десятичных чисел.
Вычисление десятичной суммы может быть параллельно-последовательным процессом, т.к. двоичный сумматор имеет ограниченную длину, а число десятичных цифр может варьироваться.
Три случая возникающие при сложении десятичных чисел на двоичном сумматоре:
0Ci9 Ci
0010+0011=0101
Pi=0
10Ci15 Ci
1001+0011=1100
Pi=0
надо: Pi=1, Ci=0010
1100
+
0110
P -1.0010 - Ci
16Ci19 Ci 0001
1000+1001=0001 +
Pi=1 0110
0111
Если Ci10, то всегда нужна коррекция.
Алгоритм сложения десятичных чисел.
A>0; B>0; C=A+B.
Вычисляется сумма С=а1а2..an+bb..b (рассматриваются только информационные разряды).
С:=С+В
Если перенос старшей тетрады равен1, то фиксируется Fпп:=1.
Иначе переход к концу.
Формируется корректирующее слагаемое.
Корректирующая цифра ki=0000, если Pi=1.
Ki=1010, если Pi=0.
Вычисляется сумма: С:=С+Л(суммирование производится с разорванными цепями межтетрадных переносов).
Пример:
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а2..а3+b1b2..bn+1
K=K1…Kn
Ki=1111, если Pi=1
Ki=1001, если Pi=0.
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
Для того, чтобы избежать дополнительного сложения используется обобщенный алгоритм, который позволяет получить результат в прямом коде:
Обобщенный алгоритм:
С:=А+В
Зн С:=Зн А
Если Зн А=Зн В, то выполняется микропрограмма сложения.
Если перенос из старшего информационного разряда P1=1, то вводится Fпп:=1, иначе переход к концу.
Если Зн АЗн В, то выполняется микропрограмма вычитания А-В.
Если перенос из старшего разряда Р1=0, то знак суммы меняется на противоположный и выполняется микропрограмма В-А.
Пример:
135-725=-590
Зн С:=Зн А
0001 0011 0101
1000 1101 1010
1
11010 10001 10000
С:=В-А
0111 0010 0101
1110 1100 1010
1
и т.д.
Реализация микропрограммы в АЛУ.
Некоторые участки кода используются в различных ветвях алгоритма, существует алгоритм оптимизации ГСА.