Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Бикмухаметов_-_Учебное_пособие_по_МАиМУ

.pdf
Скачиваний:
81
Добавлен:
22.03.2016
Размер:
2.68 Mб
Скачать

51

Контрольные вопросы.

1.Почему в начале умножения RG2 сбрасывается в 0?

2.Как изменяется результат умножения, если в способах 2 и 4 не сбрасы-

вать RG2 в начале умножения?

3.Почему нельзя совмещать в одном такте МО сложения и сдвига в спо-

собах 1 и 3?

4.Зачем сдвигается RG1 в способах 2, 3 и 4?

5.Почему при округлении в способе 1 единица прибавляется к n-му, а не

к(n+1)-му разряду после запятой?

6.Почему при суммировании перенос П0 запоминается в RG2(0)?

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

8.Каким образом используется связь из RG1 в RG2?

9.C какой целью в схему вводится дополнительный триггер знака Тзн?

10.Почему триггера переноса Тпер нет в схеме умножения в прямом коде?

11.Когда перенос Пm требуется запоминать в RG2(m)?

12.Когда требуется использовать цепи инверсной подачи разрядов RG3 в

KSM?

52

Глава 4. МП и схемы деления чисел с фиксированной запятой

( G ⁄ E = F с остатком B).

§4.1. Деление дробей в прямом коде.

В разрядной сетке для дробей:

Gпр= g0 ,g−1g−2…g−n; Епр= е0 ,e−1e−2…e−n; Fпр= f0 ,f−1f−2…f−n, где g0,e0,f0-знаки.

Правила.

1)Остаток B по окончании деления не сохраняется и не выдается на вы-

ходную шину Z.

2)f0 = g0e0

3)При делении ПРС не будет, если |G| ⁄ |E| < 1 или |G|−|E| < 0

4)Деление сводится к циклическому вычитанию делителя из удвоенных частичных остатков (ЧОС) требуемое количество раз.

Вкаждом цикле деления определяется одна цифра частного. Например, разделим вручную |G|=11⁄16= 0,1011 на |Е|=7⁄8= 0,111, считая, что n = 4.

Здесь в каждом цикле ЧОС удваивается, т.е. справа приписывается 0 (в

1-м цикле удваивается делимое). Если полученное число ≥|E|, то в частном ставится1, и из полученного числа вычитается |E|, иначе в частном ставится

0. В частном формируются (n + 1) разрядов, т.е. на 1 разряд больше для ок-

ругления |F|. К этому разряду прибавляется 1, затем этот разряд отбрасывает-

ся.

Как видно, в каждом цикле деления вручную, во-первых, ЧОС удваива-

ется; во-вторых, полученное число сравнивается с |E|. При машинном деле-

нии первая операция реализуется путем сдвига влево, вторая – путем вычи-

тания и анализа знака разности.

Обозначим через Gi - ЧОС в i-ом цикле деления (i= 1÷n+1).

53

Перед началом деления выполняется проверка на ПРС:|G|−|E|= G0; если G0≥0,

то деление не выполняется; если G0<0, то делить можно. Тогда:

1)восстанавливается делимое: G0+|E|= |G|;

2)удваивается делимое: 2(G0+|E|);

3)формируется ЧОС G1= 2(G0+|E|) −|E| .

По знаку G1 определяется 1-я цифра |F|: f−i= зн.G1 .

В остальных циклах выполняются аналогичные действия, т.е.:

Gi = 2Gi−1− |E|, если Gi−1 ≥ 0 .

Если же Gi−1 < 0, то:

1)восстанавливается предыдущий остаток: Gi−1+ |E|;

2)удваивается предыдущий остаток: 2(Gi−1+ |E|);

3)формируется ЧОС : Gi = 2(Gi−1+ |E|) − |E| .

По знаку Gi определяется очередная цифра |F|: f−I = зн.Gi .

Деление дробей в прямом коде без восстановления остатка.

В алгоритме деления с восстановлением остатка ЧОС Gi = 2Gi−1 − |E|, если Gi−1 ≥ 0 ;

2(Gi−1+ |E|) − |E|, если Gi−1< 0 ;

Цифра частного f−I = зн.Gi

Недостаток алгоритма в том, что в цикле деления выполняется либо 1, либо 2

МО суммирования. Можно ускорить деление, если использовать алгоритм деления без восстановления остатка, который получается, если во 2-й строке предыдущего алгоритма раскрыть скобки

Gi = 2Gi−1− |E|, если Gi−1 ≥ 0 ;

2(Gi−1+ |E|) − |E|= 2Gi−1+ 2|E|− |E|=2Gi−1+|E|, если Gi−1< 0

Цифра частного f−i = зн.Gi

Здесь, если Gi−1< 0, то можно, не восстанавливая предыдущий остаток, удво-

ить текущий остаток и прибавить к нему |E| . Данный алгоритм реализуется ОС на рис.4.1.

54

Рис. 4.1.

55

Рис. 4.2

В графе МП на рис.4.2. в каждом из (n+1) циклов деления RG1(1:n+1) сдви-

гается влево с вводом в младший разряд очередной цифры частного f−I = зн.Gi = RG2(1)

Построим далее таблицу состояний регистров ОС деления, считая, что n =4, G = +1116 , E = − 78 .

Здесь Gпр = 01011, Епр = 11110 , Fпр = fo , f−1f−2f−3f−4f−5

56

§4.2. Деление целых чисел в прямом коде.

В разрядной сетке для целых чисел:

Епр= emem−1…e0 ; Fпр= fmfm−1…f0 ; Gпр= g2m+1g2m…g0 ; Bпр= bmbm−1…b0 ,

где fm = em g2m+1 ; bm = g2m+1 .

57

Z(m:0)

 

 

 

 

 

 

 

 

 

Зн

 

 

 

 

 

 

 

m

RG1

 

 

 

Тпп

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Зн

Зн

RG2

 

CT

m+1

m

 

 

0

 

 

 

 

 

 

 

 

 

ЗнG

 

m

KSM

 

Тзн

 

 

0

 

 

 

 

 

 

 

 

+│E│

−│E│

 

 

 

Зн

 

 

m

 

RG3

 

0

 

 

Рис. 4.3

ОС на рис.4.3. характеризуется тремя отличиями от схемы деления дробей.

1)Делимое представляется в двойном формате и вводится в 2 регистра:

(m+1) старших разрядов Gпр в RG2(m:0), (m+1) младших разрядов в

RG1. Соответственно изменены цепи сдвига в RG1 и RG2.

Вкаждом цикле деления оба регистра одновременно сдвигаются влево с вводом 0 в RG1(0). Как и ранее, в RG1(0) формируется очередная

цифра частного, но не в процессе сдвига, а после сдвига. Этот разряд

устанавливается, если текущий ЧОС Gi ≥ 0, иначе в этом разряде со-

храняется 0.

2)Остаток B выдается на выходную шину Z. При этом ему присваивается знак G, т.е. машинное деление выполняется с недостатком.

3)Проверка на ПРС выполняется в 2 этапа.

1-й этап. Епр и Fпр меняются в диапазоне от –(2m−1) до +(2m−1) . Следователь-

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

|E|max×|F|max= (2m −1)(2m −1) = 22m − 2(m+1)+1,

которая меньше числа 22m . Последнее означает, что 2-й разряд слева в Gпр ,

представленном в двойном формате, должен быть равен 0, что и проверяется на 1-м этапе.

58

2-й этап. В процессе деления ПРС не будет, если |G| ⁄ |E| < 2m или

|G| − |E|2m= G0< 0. Для получения G0 делимое сдвигается влево на 1 разряд, и

из RG2(m:0) вычитается |E| . Так как делитель оказывается при этом сдвину-

тым относительно делимого на m разрядов влево, в RG2(m:0) и RG1(m:1)

формируется разность |G|−|E|2m= G0 . Если G0≥ 0, то Тпп устанавливается , и

деление не выполняется. Если G0< 0, то делить можно. Тогда в RG1(0) фор-

мируется знак F, т.е. этот разряд устанавливается, если знаки G и E разные.

Далее m раз выполняется цикл деления. В каждом i-ом цикле (i=1÷m), во-

первых, Gi−1 в RG2 сдвигается влево. Во-вторых, формируется текущий ЧОС

Gi . Для этого либо из RG2(m:0) вычитается |E|, если Gi−1≥ 0, [т.е., RG2(m+1)

= 0], либо к RG2(m:0) прибавляется |E|, если Gi−1 < 0, [т.е., RG2(m+1)=1] . В-

третьих, формируется цифра частного fm−i= зн.Gi [RG1(0):=1, если Gi≥0].

Построим таблицу состояний регистров ОС деления, считая, что m=3, G = −16, E = +6. Здесь Gпр=10010000, Eпр= 0110, Fпр=f3f2f1f0= 1010 и Впр=1100 .

На 1-м этапе проверки на ПРС убеждаемся в том, что 2-й разряд слева в Gпр

равен 0.

59

Если частное четное, то остаток в последнем цикле Gm=G3=(|B|−|E|)доп<0,

т.е. требуется коррекция остатка. Для этого, если Gm<0, к нему прибавля-

ется |E| . Если частное нечетное, то Gm= |B|, что и требуется.

§4.3. Деление целых чисел в дополнительном коде

Пусть Fдоп= φm φm−1… φ0

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

В i-ом цикле деления ( i = 1÷ m+1)

Gi−1− Eдоп 2m+1−i, если знаки Gi−1 и Е одинаковые,

Gi =

Gi−1+ Eдоп 2m+1−i, если знаки Gi−1 и Е разные.

1, если знаки Gi и Е одинаковые

Цифра частного φm+1−i =

0, если знаки Gi и Е разные.

Особенности.

1.В первом цикле формируется знак частного φm+1−i = φm , а Gi−1=G0=Gдоп. 2.Частное формируется в прямом коде, если знаки G и E одинаковые, и в обратном коде, если разные. А так как при F<0 Fдоп=Fобр+1, то, следовательно, при разных знаках G и E требуется коррекция частного (+1). Однако тот факт, что 0 в дополнительном коде всегда формируется со знаком «плюс»,

усложняет правила коррекции, а именно, приводит к тому, что при G<0,E>0

и B=0 результат оказывается увеличенным на 1, а при G<0, E<0 и B=0 –

уменьшенным на 1. В результате частное увеличивается на 1, если: а)

G>0,E<0; б)G<0, E>0 и B≠0; в) G<0,E<0 и В=0.

3.Проверка на ПРС выполняется в 2 этапа.

1-й этап. Едоп и Fдоп меняются в диапазоне от (−2m) до +(2m−1). Следовательно, Gmax(без учѐта остатка) = (−2m) · (−2m) = 22m=010…0 (двойной формат) . Во всех остальных допустимых случаях |G| < (2m)(2m−1)=22m −2m < 22m, что означает совпадение двух старших разрядов Gдоп . Таким образом, только в одном допустимом случае, когда Е = F =−2m, два старших разряда Gдоп не

60

совпадают, в остальных допустимых случаях совпадают, что учитывается на

1-м этапе.

 

2-й этап. В процессе деления ПРС не будет, если:

 

при одинаковых знаках G и E |G| ⁄ |E|< 2m, или |G| − |E|2m < 0

(4.1),

или |Е|2m − |G| > 0

(4.2);

при разных знаках G и E |G| ⁄ |E|< (2m+1), или |G| − |E|2m < |E|

(4.3),

или |E|2m − |G| >−|E|

(4.4).

Проверка по условиям (4.1÷4.4) совмещается с 1-м циклом деления.

ОС на рис. 4.4 характеризуется следующими отличиями от схемы деления в прямом коде:

1.В KSM подаются все разряды RG3, включая знак, т.е. сложение и вычита-

ние выполняются по способу 1а.

2.Введен флажковый триггер Тф , который определяет первый цикл деления,

т.е. Тф=1 только в 1-м цикле. Также после окончания циклов деления Тф: = 1,

если В = 0.

Рис. 4.4

В МП на рис. 4.5. предполагается, что : RG3:=Eдоп; RG2(m:0):=(m+1) старших разрядов Gдоп ; RG1:=(m+1) младших разрядов Gдоп ; Tпп:=0 ;

Tф: =1; Тзн:=знG; 1-й этап проверки на ПРС выполнен.

В графе МП проставлены номера следующих МО:

МО1: RG2 :=RG2(m:0).RG1(m); RG1:=RG1(m−1:0).0 (сдвиг влево Gi−1);