Бикмухаметов_-_Учебное_пособие_по_МАиМУ
.pdf31
4 этап. Граф МП с УС и множеством X={x1, x2, …, xL}, где L – количество различных логических условий (ЛУ), проверяемых в содержательном графе МП.
Граф МП представлен на рис. 2.14. Здесь:
x1=α; |
x2=p2; |
x3=p3; x4= p1 p2 p4 . |
||||
|
|
|
|
|
|
|
|
|
|
|
Начало |
||
|
|
|
|
|
|
|
|
|
|
|
y1 , y2 , y5 |
||
|
|
|
|
|
|
|
|
|
|
|
MK(4), y3 |
||
|
|
|
|
|
|
|
0 |
x1 |
|
|
|
1 |
|
MK(0), y2 |
0 |
x2 |
|
|
|
|
|
1 |
|
|
MK(5), y3 |
|
|
MK(1), MK(2), y3 |
|
0 |
|
1 |
|
x3 |
|
y3 , y7 |
MK(1), MK(3), y3 , y7 |
|
1 |
x4 |
0 |
|
|
|
y4 |
0 |
x2 |
|
|
|
|
|
1 |
|
|
MK(5), y3 |
MK(1), MK(2), y3
y6
Конец
Рис.2.14.
32
Контрольные вопросы.
1.Что является признаком ПРС в способе 3в?
2.На какую величину изменится результат суммирования, если от-
бросить единицу переноса на выходе KSM в способе 3в?
3.Почему при коррекции результата инвертируется знак?
4.О чем говорит наличие переноса Пm при сложении чисел с раз-
ными знаками?
5.Какие МО выполняются в Тпп?
6.Почему необходимо запоминать значение Пm в Тпер?
7.Почему при инвертировании знакового разряда дополнительного кода инвертируются и остальные разряды кода?
8.Почему при обнаружении ПРС удобнее анализировать переносы,
а не знаки операндов и результата?
9.По какому модулю выполняется суммирование в способе 1б?
10.В каких случаях в двух знаковых разрядах результата формиру-
ется код 1 0?
11.Как перевести отрицательное число из дополнительного кода в прямой код?
12.В чем заключается модификация прямого кода числа?
33
Глава 3. МП и схемы умножения чисел с фиксированной запятой
(G= Е • F).
Алгоритмы и ОС умножения зависят от положения запятой в разрядной сетке. Поэтому рассмотрим отдельно умножение дробей и целых чисел.
§3.1. Умножение дробей в прямом коде.
Пусть m=0, т.е. используется сетка вида:
В этой сетке: Fпр= f0 , f –1 f –2 …..f –n = ±(f –12-1+ f –22-2+…+f –n2-n ); Eпр= e0 , e –1 e –2…e –n ; Gпр= g0 , g –1 g –2…g–n ,
где f0, e0, g0 - знаки
Правила.
1.g0 = e0f0
2.|G|= |E| • |F|= |E|•(f–12–1+f–22–2+…+f–n2–n)= |E|f–12–1+|E|f–22–2+…+|E|f–n2–n
Здесь реализуется алгоритм умножения столбиком, когда |G| формируется в
виде суммы частичных произведений |E| на отдельные разряды |F|. Возможны
2 варианта умножения столбиком: вариант 1, когда сумма частичных произ-
ведений (СЧП) формируется, начиная с младших разрядов |F|; вариант 2, ко-
гда СЧП формируется, начиная со старших разрядов |F|.
Рассмотрим оба варианта на примере умножения столбиком вручную.
Пусть m=0, n=4, |E| = 13⁄16 = 0,1101, |F| = 11⁄16 = 0,1011
Вариант 1 |
|
Вариант 2 |
|||||
0,1101 |
|
0,1101 |
|
|
|||
0,1011 |
|
0,1011 |
|
|
|||
|
|
|
|
|
|
|
|
1101 |
|
1101 |
|
|
|||
1101 |
|
0000 |
|
||||
0000 |
|
1101 |
|
||||
|
1101 |
|
1101 |
|
|||
0,10001111=|G| |
0,10001111= |G| |
В обоих вариантах частичные произведения суммируются с необходи-
мым сдвигом между собой. В зависимости от того, как реализуется этот
34
сдвиг в схеме, различают 4 способа умножения, в которых используются 3
регистра: RG1 для F, RG2 для СЧП, RG3 для Е, причем перед началом ум-
ножения RG2: = 0.
Способ 1. (умножение со сдвигом множителя и СЧП вправо)
При умножении n раз выполняется цикл:
1)Если p=1, то |E| прибавляется к RG2.
2)RG2 и RG1 сдвигаются вправо на 1 разряд.
В результате в RG2 формируются n старших разрядов |G|, а в RG1- n младших разрядов |G|.
Способ 2. (умножение со сдвигом множителя вправо, а множимого влево)
Здесь, в отличие от способа 1, в каждом
цикле вместо сдвига RG2 вправо cдвигается RG3
влево.
Способ 3. (умножение со сдвигом множителя и СЧП влево)
При умножении n раз выполняется цикл: 1) RG2 сдвигается влево на 1
разряд.
2)Если p=1, то |Е| прибавляется к RG3.
3)RG1 сдвигается влево на 1разряд
Способ 4. (умножение со сдвигом множителя влево, а множимого вправо)
Здесь, в отличие от способа 3, в каждом цикле вме-
сто сдвига RG2 влево сдвигается RG3 вправо.
Преимущественно используется способ 1 как наи-
более экономичный (в том смысле, что обеспечивает получение произведения удвоенной длины с помо-
35
щью регистров только одинарной длины). В этом способе формула для |G|
приводится к следующему виду:
|G|= ((…(0+ |E|f –n)2–1+|E|f –(n–1))2–1+…+|E|f –1)2–1, т.е., умножение сводится к n- кратному повторению цикла: СЧПj = (CЧПj–1+|E|f –(n–j+1))2–1, где
СЧПj – СЧП в j-м цикле умножения; j = 1÷ n; при j = 1 СЧПj–1 = СЧП0 = 0;
при j = n СЧПj = СЧПn =|G|.
Здесь к ранее сформированной СЧП прибавляется |E|, если соответствую-
щий разряд множителя равен 1; затем СЧП умножается на 2–1, что реали-
зуется путем сдвига вправо на 1 разряд.
В ОС (рис. 3.1) СТ означает счетчик циклов умножения, и в начале умно-
жения выполняются МО: RG1: = Fпр , RG2: = 0, RG3: = Eпр ,СТ: = n
Затем n раз выполняется цикл:
1)Если p4=1, то |E| прибавляется к RG2 (МО1).
2)RG2 и RG1 (1:n) сдвигаются вправо на 1 разряд (МО2).
3)Из содержимого СТ вычитается единица (МО3).
В результате в RG2(1:n) оказываются n старших разрядов |G|, а в RG1(1:n)
− n младших разрядов |G|. Далее |G| округляется до n разрядов после запя-
той путем прибавления к RG2 единицы младшего разряда (МО4), если p3=1. Окончательно результату присваивается отрицательный знак (МО5),
если знаки E и F разные, и Gпр выдается на выходную шину Z (МО6).
p1 |
|
p3 |
|
|
|
|
|
|
|
|
p |
4 |
|
|
|
|
|
|
|
|
|
Z(0:n) |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Зн |
|
|
|
|
RG1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
0 |
|
1 |
|
|
|
|
|
n |
n+1 |
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
p |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
Зн |
|
|
|
RG2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
( CT 0) |
||||||||
|
0 |
|
1 |
|
|
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CT |
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
П 0 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
|
KSM |
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
p 2 |
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Зн |
|
|
|
RG3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
0 |
|
1 |
|
|
|
n |
|
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
, |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 3.1.
36
Начало
0 |
p4 |
|
|
|
1 |
|
1 |
2,3
|
p5 |
0 |
|
|
||
|
|
|
|
|
||
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
0 |
|
|
|
|
|
|
p3 |
|
Округление |
|
G |
||
|
|
|||||
|
|
|
||||
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0 |
p1 |
p2 |
|
||
|
|
1 |
|
|
5 |
6
Конец
Формирование знака G
Выдача G пр на шину Z
Рис. 3.2
Список МО, использованных в графе МП на рис. 3.2:
RG2(1: n) : RG2(1: n) RG3(1: n); MO1 : RG2(0) : П ;
0
RG2 : 0.RG2(0: n -1);
MO2 : RG1(1: n) : RG2(n).RG1(1: n -1);
MO3 : CT : CT -1;
MO 4: RG2 : RG2 2-n ;
MO5 : RG2(0) : 1;
MO6 : Z : RG2.
Далее построим таблицу состояний регистров ОС умножения, считая,
что n=4, E=+13/16=+0,1101, F=-11/16=-0,1011.
|
|
|
|
|
|
|
|
|
|
37 |
|
|
|
Здесь Eпр=01101, Fпр=11011. |
|
|
|
|
|
||||||||
|
RG2 |
|
|
|
RG1 |
|
p4 |
RG3 |
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
MO |
зн |
, |
|
|
|
зн |
, |
|
|
|
зн, |
|
|
|
0 |
0 |
0 |
0 |
0 |
1 |
1 |
0 |
1 |
1 |
0 1 1 0 |
|
1 |
Исходное состояние |
+ |
1 |
1 |
0 |
1 |
|
|
|
|
|
1-й цикл. |
|
p4 |
1 |
0 |
1 |
1 |
0 |
1 |
|
|
|
|
|
Сложение |
|
RG2 E |
|
0 |
0 |
1 |
1 |
0 |
|
1 |
1 |
0 |
1 |
Сдвиг |
|
|
1 |
+ |
1 |
1 |
0 |
1 |
|
|
|
|
|
2-й цикл. |
p4 |
||
1 |
0 |
0 |
1 |
1 |
|
|
|
|
|
Сложение |
|
|
|
|
|
|
|
|
|
|
|
|
|||||
0 |
1 |
0 |
0 |
1 |
|
1 |
1 |
1 |
0 |
Сдвиг |
|
|
0 |
|
|
|
|
|
|
|
|
|
|
|
p4 |
||
0 |
0 |
1 |
0 |
0 |
|
1 |
1 |
1 |
1 |
3-й цикл. |
|
||
+ |
1 |
1 |
0 |
1 |
|
|
|
|
|
4-й цикл. |
p4 |
1 |
|
0 |
1 |
0 |
0 |
0 |
|
1 |
1 |
1 |
1 |
Сложение |
|
|
|
|
|
|
|
|
|
|
|
|
|
Сдвиг |
|
|
|
|
Ст.разряды |
|
Мл.разряды |
|
|
|
|||||||
0 |
1 |
0 |
0 |
1 |
|
|
|
|
|
Округление |
G |
||
1 |
1 |
0 |
0 |
1 |
G пр |
|
|
|
Формирование знака G |
§3.2. Умножение целых чисел в прямом коде
Пусть n=0, т.е. используется сетка вида |
Зн |
|
|
|
m |
m−1 |
0 |
||
|
||||
|
|
|
|
В этой сетке: Fпр= fmfm−1…f0 = ±(fm−12m−1 +fm−22m−2 +…+f020) ;
Eпр= emem−1…e0 ;Gпр= g2mg2m−1…g0 , где fm, em, gm – знаки, причем g2m= fmem .
Если используется способ 1, то формула для |G| приводится к виду:
|G|= |E|×|F|= |E|(fm−12m−1+…+ f020)=2m|E|(fm−12−1+…+f02−m) = =2m{(((…(0+ |E|f0)2−1+ |E|f1)2−1+…+ |E|fm−1)2−1} ;
mскобок
Вфигурных скобках получена формула, реализуемая предыдущей схемой
умножения дробей, следовательно, для умножения целых чисел можно ис-
пользовать предыдущую схему, но результат должен быть умножен на 2m,
т.е. запятая перенесена на m разрядов вправо. Результат оказывается при этом в (2m+1) разрядах. По правилам же машинных вычислений каждый следующий больший формат для представления чисел должен быть в 2 раза больше предыдущего, т.е. произведение должно быть сформировано в
((2m+2) разрядах в виде: |
Зн |
0 |
|G| |
|
|
|
|
(2m+2) разрядов (двойной формат)
38
По сравнению со схемой умножения дробей в ОС (рис.3.3) добавлены: связь из RG1 в RG2 и триггер знака Tзн , а в каждом цикле RG2, RG1 и Тзн одновременно сдвигаются вправо. По окончании m циклов код в RG2, RG1 и Тзн
дополнительно сдвигается вправо на 1 разряд. Благодаря этому произведение формируется в RG2 и RG1 в двойном формате, а в Тзн оказывается знак F.
Рис.3.3.
Работа ОС описывается содержательным графом МП на рис.3.4.
НАЧАЛО
0
р4
1
1
2, 3
0
р3
1
2
0
р1 р2
1
4
5
6
5
КОНЕЦ
39
RG2:=Fпр; RG2:=0; RG3:=Eпр; CT:=m
RG2(m−1:0):=RG2(m−1:0)+RG3(m−1:0); RG2(m):=Пm.
2:RG2:=0.RG2(m−1); RG1:=RG2(0).RG2(m−1); Tзн=RG1(0).
3:CT := CT−1
RG2(m):=1
Z:=RG2(Выдача(m+1) старших разрядов Gпр
RG2:=RG1
[Выдача (m+1) старших разрядов Gпр]
Рис. 3.4.
§3.3. Умножение целых чисел в дополнительном коде.
Исходные положения.
1.Согласно формальным правилам получения дополнительного кода
Fдоп = 0.|F|= F, если F > 0 |
(3.1) |
||
|
|
|
|
1.|F|+ 2−n = 2m +2m − 2−n −|F|+2−n = 2m+1+ F, если F<0 |
(3.2) |
40
2.Так как умножение сводится к ряду последовательных сложений, а сумма дополнительных кодов равна дополнительному коду алгебраической суммы, то можно показать, что Eдоп × F = Gдоп (3.3)
С учетом этих двух положений дополнительные коды E и F перемножаются как обычные (m+1)-разрядные целые числа без знака, т.е. знаки E и F участ-
вуют в операциях наравне с остальными разрядами. В результате, если F ≥ 0,
то Eдоп× Fдоп = [согл.(3.1)] = Eдоп× F = [согл.(3.3)] = Gдоп
Если же F<0, то Eдоп×Fдоп = [согл.(3.2)] = Eдоп(2m+1+ F) = Eдоп2m+1+ Eдоп F = =[ согл.(3.3)] = Eдоп2m+1+ Gдоп .
Таким образом, если F<0, то требуется коррекция результата, т.е. из полу-
ченного результата нужно вычесть Eдоп2m+1.
Для умножения в дополнительном коде предыдущая схема дополняется знаковым разрядом в KSM, триггером переноса Tпер и цепями инверсной подачи разрядов RG3 в KSM (рис.3).
Рис.3