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

МИНИСТЕРСТВО ОБРАЗОВАНИЯ

РОССИЙСКОЙ ФЕДЕРАЦИИ

ВОСТОЧНО-СИБИРСКИЙ ГОСУДАРСТВЕННЫЙ

ТЕХНОЛОГИЧЕСКИЙ УНИВЕРСИТЕТ

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

Практическое пособие

Составители: Базарова С. Б-М.,

Чемерисюк А. С.,

Тулохонов Э. А.,

Гомбоев Е. Ш.

г. Улан-Удэ

2002 г.

ББК 32.97

УДК 796. 32 (075.5)

Б 173

            Печатается по решению ИПЦ ВСГТУ

            Рецензенты:

            к.т.н., доц. Белоплотов А. Е.,

            к.т.н., доц. Осипов И. С.

Базарова С. Б-М., Чемерисюк А. С.,

Тулохонов Э. А., Гомбоев Е. Ш.

Рассмотрены основные алгоритмы выполнения арифметических операций для чисел с фиксированной и плавающей запятой. Приведены примеры выполнения операций в многофункциональном АЛУ. Показаны алгоритмы функционирования АЛУ для чисел с плавающей запятой. Практическое пособие предназначено для применения в учебном процессе при изучении курсов «Теория проектирования ЭВМ» и «Организация ЭВМ».

ISBN 5-85213-067-2

ã          Базарова С. Б-М., Чемерисюк А. С., Тулохонов Э. А.,

        Гомбоев Е. Ш.

Глава 1. Форма представления чисел в ЭВМ

1.1. Представление числа в форме

с фиксированной запятой

В ЭВМ применяют две формы представления чисел: с фиксированной запятой (точкой) и с плавающей запятой (точкой). Эти формы называют также соответственно естественной и полулогарифмической. В ЭВМ используются двоичная, восьмеричная  и шестнадцатеричная системы счисления.

При представлении чисел с фиксированной запятой положение запятой фиксируется в определенном месте относительно разрядов числа. Обычно подразумевается, что запятая находится или перед старшим разрядом, или после младшего. В первом случае могут быть представлены только числа, которые по модулю меньше 1, во втором – только целые числа. Используют два варианта представления целых чисел: со знаком и без знака. В последнем случае все разряды разрядной сетки служат для представления модуля числа. При представлении числа со знаком для кода знака выделяется «знаковый» разряд (обычно крайний слева). В этом разряде 0 соответствует положительному числу, а 1 – отрицательному числу.

По сложившейся в вычислительной технике традиции нумерация разрядов (бит) в разрядной сетке микропроцессоров персональных компьютеров (ПК) и микро-ЭВМ ведется справа налево, а в машинах общего назначения (ЕС ЭВМ) – слева направо.

На рис. 1.1,а,в  показаны примеры форматов данных для представления двоичных чисел со знаком и без знака с фиксированной точкой для 32-разрядных микропроцессоров (МП) семейства x86, а на рис. 1.1,б,г  - представление чисел в машинах общего назначения. На разрядной сетке вверху указаны веса разрядов, а внизу – нумерация разрядов.

30 229        . . .            21    20                              Знак 230 229            . . .            21    20

   31 30 29          . . .        1   0                         0   1   2           . . .       30 31

                       а)                                                                       б)

   231 230 229             . . .           21    20                                    231 230 229             . . .           21    20

   31 30 29          . . .        1   0                         0   1   2           . . .       30 31

                            в)                                                                          г)

Рис. 1.1. Форматы данных для представления целых двоичных чисел в процессорах:

а)  –  формат 32-разрядного знакового слова МП семейства х86;               б)  –  формат 32-разрядного знакового слова процессора ЕС ЭВМ;            в)  –  формат 32-разрядного беззнакового слова МП семейства х86;            г)  –  формат 32-разрядного беззнакового слова процессора ЕС ЭВМ.

Если запятая фиксирована справа от младшего разряда, то в n-разрядной сетке знаковых целых чисел можно представлять положительные и отрицательные целые двоичные числа, модуль которых

1≤ ∣ X∣ ≤  2 n-1 – 1,

что при n=32 соответствует диапазону абсолютных десятичных чисел от  1 до 2,1´109.

Числа (правильные дроби могут быть с точностью до   2 -(n-1)    представлены в диапазоне:

2 -(n-1)   ≤ ∣X∣ ≤  1 – 2 -(n-1).

Формат дробных чисел представлен на рис. 1.2.

Первые ЭВМ были машинами с фиксированной запятой, причем запятая фиксировалась перед старшим разрядом числа.

В настоящее время в ПК, как правило, форму с фиксированной запятой применяют для представления целых чисел (запятая фиксирована после младшего разряда).

 Существуют следующие форматы представления чисел с фиксированной запятой: байт со знаком (8 бит), байт баз знака (8 бит), слово со знаком (16 бит), слово без знака (16 бит), двойное слово со знаком (32 бита), двойное слово без знака (32 бита), учетверенное слово со знаком (64 бита), учетверенное слово без знака (64 бита).

Рис. 1.2. Формат данных для дробных знаковых чисел

Знак 2-1  2-2  2-3         . . .            2-(n-2) 2-(n-1)

     0   1  2   3         . . .       n-2  n-1

1.2. Представление числа в форме

с плавающей запятой

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

Представление числа с плавающей запятой в общем случае имеет вид:

;    êmXú < 1,

     где   mX  – мантисса числа X;

 pX – порядок;

S – основание характеристики (обычно целая степень числа 2).

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

Мантисса (правильная дробь со знаком) и порядок (целое число со знаком) представляются в системе счисления с основанием, равным  S  (в соответствующей двоично-кодированной системе). Знак числа совпадает со знаком мантиссы.

Порядок  p, который может быть положительным или отрицательным целым числом, определяет положение запятой в числе  X.

Арифметические действия над числами с плавающей запятой требуют выполнения, помимо операций над мантиссами, определенных операций над порядками (сравнение, вычитание и др.). Для упрощения операций над порядками их сводят к действиям над целыми положительными числами (целыми числами без знаков), применяя представление чисел с плавающей запятой со «смещенным порядком».

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

Для удобства выполнения операций над порядками они обычно кодируются следующим образом. Если для размещения кодов порядков в разрядной сетке отводится q+1  разряд, то отрицательные и положительные порядки представляются увеличенными на  2 q, т .е.  pсм = p + 2 q.

В результате порядки в диапазоне:

-2 q £ p £ 2 q –1

преобразуются в  pсм, диапазон которых:

0 £ pсм £ 2 q+1 –1

(происходит увеличение порядка на   2 q).

Диапазон представимых в машине чисел с плавающей запятой зависит от основания системы счисления и числа разрядов, выделенных для изображения порядка. В двоичной системе счисления для 32-разрядных чисел для кодировки порядка используется семь битов: шесть битов – на значение порядка, один бит – на знак порядка. Коды отрицательных порядков будут иметь бит  0  в старшем разряде 7-разрядного двоичного кода, положительных – бит  1; нулевому порядку будет соответствовать код  1000000 b. Во избежание путаницы смещенный порядок называют характеристикой числа.

  Знак     Смещеннный                            Модуль мантиссы

  числа        порядок                     

pсм

m

     0   1                      7   8                                                                    31

Рис. 1.3. Пример машинного кода числа в форме

с плавающей запятой со смещенным порядком

Значения модулей порядков для 32-разрядных чисел лежат в диапазоне  –64 (1000000 b) ¸ +63 (0111111 b). Тогда в смещенном виде (порядок увеличивается на 64 разряда) порядки будут кодироваться положительными числами, причем значению порядка  –64  будет соответствовать код 0000000 b, а  значению  +63  – код  1111111 b. Таким образом, при кодировании положительных порядков и нуля в старшем разряде порядка всегда будет присутствовать 1.

Например: порядку  +2  будет соответствовать код  1000010 b. 

Точность вычислений чисел с плавающей запятой определяется числом разрядов мантиссы. С увеличением числа разрядов мантиссы увеличивается точность вычислений, но увеличивается и время выполнения арифметических операций.

Любое число в формате с плавающей запятой должно быть представлено в ЭВМ в нормализованном виде для повышения точности отображения числа. Число    называется нормализованным, если мантисса mХ удовлетворяет условию:

 ≤  êmXú < 1,

т.е. в двоичной системе счисления старший разряд мантиссы отличен от нуля. В процессе вычислений может получиться ненормализованное число. В этом случае ЭВМ, если это предписано командой, автоматически нормализует его («нормализация результата» операции).

Пусть мантисса S-ричного числа содержит в  r  старших разрядах нули. Тогда нормализация заключается в сдвиге мантиссы на  r  разрядов влево и уменьшении порядка на   r  единиц, при этом в младшие  r  разрядов мантиссы записывается  0. При нулевой мантиссе нормализация невозможна.

Задачи, решаемые на ЭВМ, предъявляют различные требования к точности вычислений. Поэтому во многих машинах используется несколько форматов с плавающей запятой с различным числом разрядов мантиссы.

Существуют следующие форматы представления чисел с плавающей запятой: число с плавающей запятой одинарной точности (32 бита; порядок – 8 бит, мантисса – 23 бита), число с плавающей запятой двойной точности (64 бита; порядок – 11 бит, мантисса – 52 бита), число с плавающей точкой повышенной точности (80 бит; порядок – 15 бит, мантисса – 64 бита).

Пример. Пусть X = 24,5.  Перевести число X в формат числа с плавающей запятой, .

Для модуля порядка выделим 7 разрядов (разряды [1¸7]), а для мантиссы выделим 10 разрядов (разряды [8¸17]). Нулевой разряд является знаковым для числа, а первый разряд является знаковым для порядка. Так как нулевой и первый разряды определяют соответственно знак мантиссы и знак порядка, то разряды [2¸7] будут определять модуль порядка, а разряды [8¸17]  - модуль мантиссы. Формат данного числа изображен на рис. 1.4.

разряды

[0]

[1]

[2¸7]

[8¸17]

биты

x

x

x x x x x x

x x x x x x x x x x

зн. мант.

зн. пор.

модуль порядка

модуль мантиссы

Рис. 1.4. Формат представления числа с плавающей

запятой с несмещённым порядком

Определим мантиссу числа  mX . Для этого представим в двоичном виде целую и дробную части числа. Алгоритм перевода целого десятичного числа в двоичный вид широко описан в технической литературе и в данном пособии не приводится.  Целая часть (24)   в десятичном  виде соответствует двоичному числу 11000 b. Для отображения целой части  X  необходимо 5 битов. Результат целой части числа занесём в соответствующие разряды мантиссы mX.  Определим двоичный вид дробной части числа  X  с помощью ниже приведенного алгоритма.

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

1.              Вычесть из исходного числа его целую часть. Результат занести в число R.

2.              Умножить число R  на  2.

3.              Если R ³ 1, то:

а) очередная цифра дробной части в двоичном виде равна 1;

б)  из числа R  вычесть  1.

  Если же R < 1, то очередная цифра дробной части в  двоичном виде равна  0.

4.              Пункты 2 и 3 повторяются до получения необходимого                    числа разрядов.

Итак, представим двоичный вид дробной части         числа  X  согласно вышеприведенному алгоритму, описанному выше:

1.         R  = 24,5 – 24 =  0,5.

2.         R  = R ´ 2 = 0,5 ´ 2 = 1.

3.         Так как  R ³ 1,  то:

a)          очередная цифра дробной части в двоичном виде равна  1;

б)  R = R – 1 = 1 – 1 = 0.

2.         R ´ 2 = 0 ´ 2 = 0.

3.         Так как  R < 1,  то очередная цифра дробной части в двоичном виде равна 0.

2.         R ´ 2 = 0 ´ 2 = 0.

3.         Так как  R < 1,  то очередная цифра дробной части в двоичном виде равна  0.

2.         R ´ 2 = 0 ´ 2 = 0.

3.         Так как  R < 1, то очередная цифра дробной части в двоичном виде равна  0.

2.          R ´ 2 = 0 ´ 2 = 0.

3.         Так как  R < 1, то очередная цифра дробной части в двоичном виде равна  0.

 Согласно алгоритму преобразования, дробная часть числа  X в двоичном виде представляется как  0,10000 b. Количество итераций алгоритма (количество полученных цифр дробной части) зависит от разрядности мантиссы. Для данного примера разрядность мантиссы равна 10. Для целой части числа X необходимо 5 битов, на дробную часть числа  X  также выделяется 5 разрядов. Дробная часть числа в двоичном виде дописывается в мантиссу mX после разрядов целой части числа.  Таким образом, мантисса числа X имеет вид  mX = 1100010000 b.

Определим порядок числа  pX. В общем случае порядок pX равен числу разрядов, использовавшихся для представления целой части числа. То есть  pX = 5, или в двоичном виде в данной разрядной сетке  pX = 0000101 b.

Возвращаясь к полулогарифмической форме представления числа с плавающей запятой, запишем:

X = mX ´ ´ 25,

где         mX – нормализованная мантисса числа, представленная  как число с запятой перед старшим разрядом, mX = 1100010000;

pX   = 5 – порядок  числа.

            Число X с фиксацией запятой после целой части будет иметь следующий двоичный вид: 11000,10000.

            Чтобы убедиться в правильности представления числа в формате с плавающей запятой, произведём обратное преобразование с учетом весов разрядов целой и дробной части числа:

11000,10000 = 1 ´ 24 + 1 ´ 23 + 0 ´ 22 + 0 ´ 21 + + 0 ´ 20 + 1 ´ 2-1 + 0 ´ 2-2 + 0 ´ 2-3 + 0 ´ 2-4 + 0 ´ 2-5 = 24,5.

Представим порядок  pX  как смещённый порядок. Для этого к порядку  pX прибавим целое число – смещение         N = 2q, где q – число двоичных разрядов, используемых для модуля порядка (см. рис. 1.4). В данной разрядной сетке q = 6, Следовательно, N =26 = 64 (N = 1000000 b). Таким образом, смещённый порядок числа  X  равен:  pXсм = 1000101 b.

Так как число X положительное, то его знаковый разряд равен 0. Число  X  в формате с плавающей запятой со смещенным порядком приведено на рис. 1.5.

Веса разрядов

26

25

24

23

22

21

20

24

23

22

21

20

2-1

2-2

2-3

2-4

2-5

0

1

0

0

0

1

0

1

1

1

0

0

0

1

0

0

0

0

знак

смещённый порядок

мантисса

Рис. 1.5. Формат представления числа  X = 24,5 в формате с плавающей запятой со смещённым порядком

Глава 2. Арифметико-логические  устройства

2.1. Классификация АЛУ

Арифметико-логическое  устройство    (АЛУ)    служит    для выполнения арифметических и логических преобразований над словами, называемыми в этом случае операндами. Выполняемые в АЛУ операции можно разделить на следующие группы:

-          операции двоичной арифметики для чисел с фиксированной запятой;

-          операции двоичной арифметики для чисел с плавающей запятой;

-          операции десятичной арифметики;

-          операции индексной арифметики (при модификации адресов команд);

-          операции специальной арифметики;

-          операции над логическими кодами (логические операции);

-                    операции над алфавитно-цифровыми полями.

К арифметическим операциям относятся сложение, вычитание, вычитание модулей («короткие операции») и умножение и деление («длинные операции»). Группу логических операций составляют операции дизъюнкции (логическое ИЛИ) и конъюнкции (логическое И) над многоразрядными двоичными словами, сравнение кодов на равенство.

Специальные арифметические операции включают в себя нормализацию, арифметический сдвиг (сдвигаются только цифровые разряды, знаковый разряд остается на месте), логический сдвиг (знаковый разряд сдвигается вместе с цифровыми разрядами).

Можно привести следующую классификацию АЛУ.

По способу действия над операндами АЛУ делятся следующие группы:

-          последовательные;

-          параллельные.

В последовательных АЛУ операнды представляются в последовательном коде, а операции производятся последовательно во времени над их отдельными разрядами. В параллельных АЛУ операнды представляются параллельным кодом, и операции совершаются параллельно во времени над всеми разрядами операндов.

По способу представления чисел различают АЛУ:

-          для чисел с фиксированной запятой;

-          для чисел с плавающей запятой;

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

По характеру использования элементов и узлов АЛУ делятся на:

-                    блочные;

-                    многофункциональные.

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

Глава 3. АЛУ для чисел с фиксированной запятой

На АЛУ, изображенном на рис. 3.1, выполняются операции сложения, вычитания, умножения и деления чисел в формате с фиксированной запятой.

В состав АЛУ входят:

1.      входной регистр Рг1 для приема операнда;

2.      входной регистр Рг3 для приема операнда;

3.      регистр Рг2 для приема, хранения и сдвига второго операнда;

4.      регистр Рг2’ для сдвига операнда, находящегося в регистре Рг2;

5.      входные регистры сумматора РгА и РгВ;

6.      сумматор СМ для суммирования поступающих на его входы данных и выработки определенных признаков;

7.      выходной регистр сумматора РгСМ для фиксации результата суммирования;

8.      счетчик циклов СчЦ.

Рис. 3.1. Структурная схема АЛУ

СчЦ

–1

ШИВх

 ШИВых

Рг2

0                  n-1

Рг2’

 0                  n-1

Рг1

0                  n-1

РгВ

 0                  n-1

РгСм

 0                  n-1

Рг3

0                  n-1

Рг1

0                  n-1

   0               n-1        0               n-1

СМ

0                            n-1

+1 См

Признаки

В управляющий блок УБ

ПрШИВых

 ШИВых

РгСм

 0                     n-1

ПрРгВ

ПрРг1

ШИВх

     ПрРгСм

ПР1

ПР0

ПрУБ

ПР

РгА

0                     n-1

РгВ

 0                     n-1

ПрРгАИ

ПрРгАП

Рг1

0                     n-1

+1 См

   0                 n-1         0                  n-1

СМ

           0                                 n-1

См[0]

ПнСм[0]

ПнСм[1]

См[1¸31]

Рис. 3.2. Структурная схема АЛУ для операций                   сложения и вычитания

3.1. АЛУ для сложения и вычитания

чисел с фиксированной запятой

Для операций сложения и вычитания n-разрядных (нуле­вой разряд знаковый) двоичных чисел с фиксированной запя­той в состав АЛУ должны входить n-разрядный параллель­ный комбинационный сумматор См, регистр сумматора РгСм, вход­ные регистры сумматора РгВ и РгА, входной ре­гистр АЛУ Рг1. На АЛУ поступают операнды X и Y, а результат содержится в операнде Z.

В АЛУ про­изводится сложение двоичных кодов, включая разряды знаков. Если при этом возникает перенос из знакового разряда суммы при отсутствии переноса в этот разряд или перенос в знаковый разряд при отсутствии переноса из разряда знака, то имеется переполнение разрядной сетки, соответственно при отрицатель­ной и положительной суммах. Если нет переноса из знакового разряда и нет переноса в знаковый разряд суммы или есть оба эти переноса, то переполнения нет. Если в знаковом разряде содержится 0, то сумма поло­жительна и представлена в прямом коде, а если в знаковом разряде содержится 1, то сумма отрицательна и представлена в дополнительном коде.

На рис. 3.2 представлена упрощенная структурная схема АЛУ.

Из оперативной памя­ти по входной информа­ционной шине ШИВх в АЛУ поступают операн­ды: положительные числа в прямом коде, а отрица­тельные в дополнитель­ном. Операнды размеща­ются в РгВ (первое сла­гаемое или уменьшаемое) и Рг1 (второе слагаемое или вычитаемое); Рг1 свя­зан с РгА цепями прямой и инверсной передачи кода. Прямая передача исполь­зуется при операции алгебраического сложения, а инверсная – при операции вычитания. Результат операции выдается из АЛУ по выходной информационной шине ШИВых.

При выполнении операции в АЛУ помимо результата опе­рации формируется 2-разрядный код признака результата ПР, который принимает следующие значения:

Результат

операции

Признак

 результата

0

00

<0

01

>0

10

переполнение

11

Примем, что код признака результата формируется комби­национной схемой ПР, на входы которой поступают сигналы, соответствующие значениям всех разрядов сумматора, а также сигналы переносов из знакового разряда           ПнСм [0] и в зна­ковый из старшего цифрового разряда ПнСм [1]. Признак переполнения   (ПР = 11)   формируется,   если   булева   функция:

Условия выработки  признаков  положительного  и  отрица­тельного результатов имеют соответственно вид:

;.

При выполнении алгебраического сложения поступившие в АЛУ коды операндов находятся на входных регистрах  РгВ  и  РгА  сумматора. Код суммы формируется на выходах схемы См и фиксируется в регистре РгСм.

Операция алгебраического вычитания   

Z = X – Y = X + (-Y)

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

Передача информации в регистрах АЛУ производится от­дельными микрооперациями, инициируемыми управляющими сигналами. Слово из Рг1 в РгА может быть передано в прямом (управляющий сигнал  ПрРгАП) или в инверсном (управляющий сигнал  ПрРгАИ) кодах. Алгоритм сложения и вычитания чисел с фиксированной точкой приведен на рис. 3.3. Микрооперации в блоках, выполняемые в разных тактах, разделяются горизонтальной чертой.

Микрооперация  ПрУБ  состоит в выдаче в управляющий блок кода признака и в формировании запроса прерывания при переполнении разрядной сетки.

РгСм:=0

Прерывание из-за

переполнения

9

нет

да

   ПР=11

7

РгСм:=РгА+РгВ

5

20

РгСм:=РгА+РгВ+1

6

20

РгА:=Рг1

4

20

РгВ:=ШИВх

Рг1:=ШИВх

1

да

нет

Начало

РгА:=Рг1

3

20

 сложение

2

ШИВых:=РгСм

8

20

Конец

Рис. 3.3. Алгоритм сложения и вычитания чисел                                          с фиксированной запятой

3.2. АЛУ для умножения чисел

с фиксированной запятой

В ЭВМ операция умножения чисел с фиксированной запятой с помощью соответствующих алгоритмов сводится к операциям сложения и сдвига.

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

Для выполнения умножения структура АЛУ должна содержать регистры множимого, множителя и схемы формирования частичных произведений - так называемый сумматор частичных произведений, в котором путем соответствующей организации передач производится последовательное суммирование частичных произведений.

Количество циклов операции умножения зависит от количества цифровых разрядов множителя. Так при умножении n-разрядных чисел без знака в формате с фиксированной запятой потребуется n циклов, а при умножении n-разрядных чисел со знаком в формате с фиксированной запятой – n-1 цикл.

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

В зависимости от способа формирования суммы частичных произведений различают четыре метода выполнения умножения рис. 3.4 (нумерация метода на рисунке совпадает с обозначением метода в тексте):

а) умножение, начиная с младших разрядов множителя, со сдвигом суммы частичных произведений вправо и при неподвижном множимом;

б) умножение, начиная с младших разрядов множителя, при сдвиге множимого влево и неподвижной сумме частичных произведений;

в) умножение, начиная со старших разрядов множителя, при сдвиге суммы частичных произведений влево и неподвижном множимом;

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

Множимое перед началом выполнения умножения

 

Регистр

множителя

Сумматор частичных

произведений  

→  0/1

←  Регистр множимого

Регистр

множителя

Сумматор

частичных

произведений  

→  0/1

→ 

Регистр

множимого

                                                    

                     а)                                                 б)            

Множимое перед началом выполнения умножения

 Регистр множимого  →

 

Регистр

множителя

Сумматор частичных

произведений  

0/1

 

Регистр

множителя

Сумматор частичных

произведений  

0/1

Регистр

множимого

                     

                            

                     в)                                                 г)            

                   Рис. 3.4. Методы выполнения умножения

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

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

Пусть X – множимое и Y – множитель, n-разрядные числа со знаком в формате с плавающей запятой. Числа X и Y имеют (n-1) цифровых разрядов с весами, изменяющимися от 20 для (n-1) разряда до 2n-2 для первого разряда. Произведение чисел Z = X×Y можно представить в виде скобочной записи, наглядно отображающей алгоритм умножения:

где yi = (0,1) – значение i-го разряда множителя Y, X×yi – частичная сумма для i-го разряда, 2-1 – сдвиг вправо суммы частичных произведений.

Для получения результата Z производятся вычисления по приведенной формуле. При этом: 

X×yi

а умножение на 2-1 осуществляется путем сдвига числа на один разряд вправо.

Особенностью умножения двух n-разрядных чисел со знаком в формате с фиксированной запятой является необходимость представления результата умножения Z        разрядностью 2×n, где один знаковый разряд и 2×n-1        цифровых разрядов. При умножении n-разрядных чисел,   где n-1 разрядов - цифровых, в произведении Z’ содержится 2×(n-1)=2×n-2 цифровых разрядов. Так как число цифровых разрядов результата   умножения Z разрядностью 2×n-1  на  единицу больше числа 2×n-2 цифровых разрядов произведения двух чисел Z’, то после получения числа Z’ в формате двойной длины, необходимо дополнительно сдвинуть его цифровые разряды на один разряд вправо, чтобы правильно расположить произведение в разрядной сетке.

Регистр множителя и сумматор частичных произведений в АЛУ для умножении чисел представленных в прямом коде, начиная с младших разрядов, со сдвигом суммы частичных произведений вправо должны иметь цепи сдвига вправо. Регистр множимого может не иметь цепей сдвига.

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

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

После выполнения умножения старшие разряды произведения находятся в регистре сумматора, младшие – в регистре множителя.

На рис. 3.5 представлена структурная схема АЛУ для умножения n-разрядных целых двоичных чисел. В состав АЛУ входят: входной регистр множимого Рг1; регистры множителя Рг2 и Рг2’, на которых с помощью косой передачи вправо выполняется сдвиг множителя вправо; сумматор См для образования суммы частичных произведений; регистры сумматора: входные регистры РгА и РгВ, выходной регистр РгСм, на которых соответственно хранится текущее значение и образуется новое значение суммы; счетчик циклов СчЦ.

Да

Нет

Нет

1

Рг1:=ШиВх; РгВ:=0; СчЦ:=n-1

Рг2:=ШиВх

Начало

2

 Рг2[n-1]=1

3

РгА:=0

4

РгА:= Рг1

5

РгСм[0]:=0; РгСм:=П(1)См;

Рг2’[0]:=См[n-1]; Рг2’:=П(1)Рг2

СчЦ:=СчЦ-1; РгВ:=РгСм; Рг2:=Рг2’

6

  СчЦ=0

7

РгА:=0; РгСм[0]:=0

РгСм:=П(1)См; Рг2’[0]:=См[n-1]; Рг2’:=П(1)Рг2

ШиВых:=РгСм; Рг2:=Рг2’

РгВ:=Рг2

РгСм:=См

ШиВых:=РгСм

Конец

Начальная установка

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

Коррекция результата в формате двойной длины

РгСм

0                  n-1

Рг2

0                  n-1

Рг2’

0                n-1

РгA

0                   n-1

РгB

0                 n-1

   0               n-1         0               n-1

СМ

 0                           n-1

СчЦ

–1

ШИВх

 ШИВых

Рг1

 0                   n-1

Рис. 3.5.  Структурная схема АЛУ для умножения

чисел в формате с фиксированной запятой

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

Алгоритм умножения чисел с фиксированной запятой можно разделить на следующие этапы:

- начальная установка;

- вычисление сумм частичных произведений;

- коррекция результата в формате двойной длины.

На рис. 3.6. этапы выполнения операции умножения разделены пунктирной линией.

Рис. 3.6. Алгоритм умножения чисел

с фиксированной запятой

Начальная установка выполняется в блоке 1. На этом этапе происходит прием операндов с шины входа: в первом такте на Рг1 поступает множимое, одновременно с приемом множимого обнуляется РгB, хранящий сумму частичных произведений, а в счетчик циклов заносится число обрабатываемых цифровых разрядов множителя; во втором такте на Рг2 поступает множитель. 

Вычисление сумм частичных произведений вы-полняется в блоках 2-6. Этот этап выполняется циклически до тех пор, пока счетчик циклов не станет равен нулю. В зависимости от значения младшего разряда множителя Рг2[n-1] к частичному произведению прибавляется либо 0, либо множимое, для чего соответствующее значение присваивается РгА; полученная сумма передается в РгСм со сдвигом вправо на один разряд и записывается в РгB. Множитель, хранящийся в Рг2, с помощью Рг2’ сдвигается вправо на один разряд, при этом старший разряд Рг2 остается свободным, и в него заносится младший разряд суммы, выходящий при сдвиге за пределы РгСм. Счетчик циклов уменьшается на единицу и проверяется на равенство нулю.

Коррекция результата в формате двойного слова. Выполняется в блоке 7. Когда счетчик циклов установится в 0, в РгСм и Рг2 будут храниться соответственно старшие и младшие разряды произведения, требующие сдвига на один разряд вправо для правильного расположения в формате двойного слова. После выполнения этого сдвига результат операции из РгСм и РгВ последовательно поступает на шину выхода.

Пример. Пусть X=+26, Y=+5. Вычислить Z=X×Y=26×5.

X, Y, Z - числа с фиксированной запятой.  При

 умножении использовать алгоритм умножения       

целых положительных  чисел  c  фиксированной

запятой начиная  с  младших  разрядов,  со 

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

В данном примере для представления чисел с фиксированной запятой выделим 6 разрядов, причём старший разряд – знаковый.   Множимое   X   и  множитель  У  показаны на рис. 3.7.

Веса

разрядов

24

23

22

21

20

 0

1

1

0

1

0

знак

модуль множимого

Веса

разрядов

24

23

22

21

20

0

0

0

1

0

1

знак

модуль множителя

                                а)                                                               б)

Рис. 3.7. Числа в формате с фиксированной запятой:

а)  множитель  Х = 26,  б)  множимое Y = 5

Умножение чисел с фиксированной запятой представим в виде таблицы (табл. 3.1) с указанием номеров блоков, состояния счётчика СчЦ, состояния сумматора, состояний регистров РгСм, РгB, Рг2, Рг2’, РгA, Рг1.

Табл. 3.1. Пример умножения чисел

с фиксированной запятой

№ бл.

СчЦ

См

РгСм

РгB

Рг2

Рг2’

РгA

Рг1

1

2

3

4

5

6

7

8

9

1

101

000000

000101

011010

2

000101

4

011010

000000

011010

5

001101

000010

100

001101

000010

2

000010

3

001101

001101

000000

5

000110

100001

011

000110

100001

2

100001

4

100000

000110

011010

5

010000

010000

010

010000

010000

2

010000

3

010000

010000

000000

1

2

3

4

5

6

7

8

9

5

001000

001000

001

001000

001000

2

001000

3

001000

001000

000000

5

000100

000100

000

000100

000100

7

000100

000100

000000

000010

000010

000010

000010

000010

000000

000010

В блоке 7 (см. табл. 3.1), на выходную шину ШиВых вначале выдается старшая часть результата умножения, а затем – младшая часть.

старшая часть

младшая часть

 

Веса

разрядов

210

29

28

27

26

25

24

23

22

21

20

 

0

0

0

0

1

0

0

0

0

0

1

0

 

Рис. 3.9. Структура АЛУ для деления чисел с

фиксированной запятой с неподвижным делителем

+1См

Рг1

0              n-1

Рг3

0              n-1

Рг2

0              n-1

РгСм

0              n-1

Рг2’

0              n-1

См

0              n-1

0              n-1

0                              n-1

Y

Xст

Xмл

ШИВх

ШИВых

знак

Модуль произведения

Рис. 3.8. Число Z=X×Y=+130 с фиксированной

запятой в формате двойной длины

Результат умножения чисел в формате двойной длины представлен на рис. 3.8.

3.3. АЛУ для деления чисел

с фиксированной запятой

В ЭВМ операция деления чисел с фиксированной запятой с помощью соответствующих алгоритмов сводится к операциям вычитания (иногда также сложения) и сдвига.

Реализовать деление можно двумя основными способами:

-                   деление с неподвижным делимым и сдвигаемым вправо     делителем. Этот способ деления основан на прямом копировании действий при ручном делении. Недостатком такого способа является двойная длина сумматора и его регистров в АЛУ. Данный способ не нашёл широкого распространения и поэтому рассматриваться не будет;

-                   деление с неподвижным делителем и сдвигаемым влево    делимым. Этот способ позволяет строить АЛУ с сумматором одинарной длины (см. рис. 3.9). Здесь неподвижный делитель (Y) хранится в Рг1, а делимое (X), сдвигаемое влево относительно делителя, находится в двух регистрах: старшие разряды делимого – в Рг3, а младшие – в Рг2. Арифметико-логические устройства рассмотренного типа широко используются для деления.

Данный способ имеет две разновидности:

-                алгоритм деления с неподвижным делителем с восстановлением остатка;

-                алгоритм деления с неподвижным делителем без восстановления остатка.

Алгоритм деления с неподвижным делителем с восстановлением остатка  можно разделить на следующие этапы:

1.   

2.          делимого содержится в разных регистрах (см. рис. 3.9). Чтобы делимое, как и делитель, имело одинарную длину, в данном случае можно условно принять, что делимое имеет двойную длину с нулями в разрядах старшей половины делимого. Для этого все разряды Рг3 обнуляются, в разряды Рг2 заносятся разряды делимого. Поэтому исходное значение частичного остатка равно нулю;

3.   

4.   

5.   

Рис.     Микропрограмма деления целых чисел

с фиксированной запятой с восстановлением остатка

Рг2’[n-1]:=0

8

СчЦ=0

10

нет

да

См[0]=0

15

Рг2’[n-1]:=1

16

Рг2’[n-1]:=0

17

РгСм:=См

ШИВых:=РгСм

18

Конец

A

да

нет

РгA:=0

РгСм:=Л(1)См; РгСм[n-1]:=Рг2[0]

9

РгСм:=См

ШИВых:=РгСм

12

РгА:=0; Рг2:=Рг2’

РгB:=Рг2

14

РгB:=РгСм; Рг2:=Рг2’

11

РгA:=

См[n-1]:= +1Cм

РгСм:=Л(1)См; РгСм[n-1]:=Рг2[0]

Рг2’:=Л(1)Рг2; СчЦ:=СчЦ-1

13

B

n-1]:=1). Если же результат вычитания отрицателен (См[0] = 1), то очередная цифра модуля частного равна 0 (Рг2’[n-1]:=0).

B

B);

6.   

7.   

Микропрограмма деления чисел с восстановлением остатка для случая положительных чисел приведена на  рис 3.10.

Начало

нет

да

Рг1=0

2

Прерывание по делению на 0

Рг2=0

4

нет

да

РгA:=0; РгB:=0

3   

A

Рг1:=ШИВх

Рг2:=ШИВх; СчЦ:=n

1

РгСм:=См; Рг2’:=Л(1)Рг2

5

РгB:=РгСм; Рг2:=Рг2'

6

РгA:=

См[n-1]:= +1См

РгСм:=Л(1)См; РгСм[n-1]:=Рг2[0]

Рг2’:=Л(1)Рг2; СчЦ:=СчЦ-1

7

B

B

B

Рис. 3.10. Микропрограмма деления целых чисел

с фиксированной запятой с восстановлением остатка

Рг2’[n-1]:=0

8

СчЦ=0

10

нет

да

См[0]=0

15

Рг2’[n-1]:=1

16

Рг2’[n-1]:=0

17

РгСм:=См

ШИВых:=РгСм

18

Конец

A

да

нет

РгA:=0

РгСм:=Л(1)См; РгСм[n-1]:=Рг2[0]

9

РгСм:=См

ШИВых:=РгСм

12

РгА:=0; Рг2:=Рг2’

РгB:=Рг2

14

РгB:=РгСм; Рг2:=Рг2’

11

РгA:=

См[n-1]:= +1Cм

РгСм:=Л(1)См; РгСм[n-1]:=Рг2[0]

Рг2’:=Л(1)Рг2; СчЦ:=СчЦ-1

13

B

Поясним процесс восстановления остатка. Если вычитание даёт отрицательный результат (См[0] = 1), то предыдущий частичный остаток, хранящийся в РгB, передаётся в РгСм, для чего предварительно обнуляется РгA. В РгСм приём осуществляется со сдвигом влево на 1 разряд. Это обеспечивает восстановление прежнего остатка и смещение его относительно делителя перед очередным вычитанием.

Рассмотренный метод носит название деление с восстановлением остатка. Недостатком этого метода является необходимость дополнительного времени на восстановление остатка.

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

Обычно в ЭВМ для деления используется другой метод – деление без восстановления остатка.

Алгоритм деления с неподвижным делителем без восстановления остатка  можно разделить на следующие этапы:

1. – 3. Этапы 1, 2 и 3 совпадают с соответствующими этапами предыдущего алгоритма;

  1. Если остаток положителен (См[0] = 0), то из сдвинутого частичного остатка вычитается делитель;

Если же остаток отрицателен (См[0] = 1), то к сдвинутому частичному остатку прибавляется делитель;

  1. Если результат вычитания положителен (См[0] = 0), то очередная цифра модуля частного равна 1 (Рг2’[n-1]:=1). Если же результат вычитания отрицателен (См[0] = 1), то очередная цифра модуля частного равна 0 (Рг2’[n-1]:=0);
  2. Этапы 3, 4 и 5 последовательно выполняются для получения всех цифр модуля частного;
  3. Знак частного положителен, если знаки делимого и делителя одинаковы, в противном случае – отрицательный.

Микропрограмма деления чисел без восстановления остатка для случая положительных чисел приведена на    рис. 3.11.

Начало

нет

да

Рг1=0

2

Прерывание по делению на 0

Рг2=0

4

См[0]=0

8

нет

Сч.Ц=0

6

да

нет

да

РгB:=РгСм

Рг2:=Рг2’

9

См[0]=0

7

да

нет

A

нет

да

D

РгA:=0; РгB:=0

3

РгA:=Рг1

12

Рг1:=ШИВх

Рг2:=ШИВх; СчЦ:=n

1

РгА:=

См[n-1]:=+1См

13

РгСм:=См

РгB:=РгСм

РгА:=Рг1

11

РгB:=РгСм

Рг2:=Рг2’

10

РгСм:=См; Рг2’:=Л(1)Рг2

5

B

C

РгСм:=Л(1)См; РгСм[n-1]:=Рг2[0]

Рг2’:=Л(1)Рг2; Сч.Ц:=Сч.Ц-1

15

РгСм:=См

ШИВых:=РгСм

14

B

C

Рг2:=Рг2’

РгB:=Рг2

РгА:=0

17

См[0]=0

16

да

нет

D

Конец

A

Рг2’[n-1]:=0

18

Рг2’[n-1]:=1

19

РгСм:=См

ШИВых:=РгСм

20

Рис. 3.11. Микропрограмма деления целых чисел с

фиксированной запятой без восстановления остатка

Из микропрограммы видно, что, пока не определены все цифры частного (СчЦ ¹ 0), в зависимости от знака частичного остатка либо подсуммируется делитель (при См[0] = 1), либо вычитается  делитель (при См[0] = 0). У полученного нового частичного остатка анализируется знак и по нему определяется цифра частного. По завершении всех циклов деления (СчЦ = 0) выдаётся результат. При этом, если остаток отрицателен (См[0] = 1), то он восстанавливается путём подсуммирования делителя (см блок 13 на рис. 3.11).

Частичные остатки после выполнения сложения при делении без восстановления остатка получаются такими же, как и после сдвига восстановленного остатка при делении с восстановлением остатка.

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

Пример1:  Пусть  X = +23,  Y = +5.  Вычислить Z = X / Y, где X,  Y  и  Z – числа с фиксированной запятой. При делении использовать алгоритм деления чисел с фиксированной запятой с восстановлением остатка.

В данном примере для представления чисел с фиксированной запятой выделим 6 разрядов, причём старший разряд – знаковый. Делимое X показано на рис. 3.12.а, делитель Y показан на           рис. 3.12.б.

веса

разрядов

24

23

22

21

20

0

0

0

1

0

1

знак

модуль делителя

веса

разрядов

24

23

22

21

20

0

1

0

1

1

1

знак

модуль делимого

а)

б)

Рис. 3.12. Числа в формате с фиксированной запятой:

а) делимое X = 23;   б) делитель Y = 5

Оформим алгоритм деления чисел с фиксированной запятой с восстановлением остатка, в соответствии с микропрограммой, представленной на рис. 3.10, в виде таблицы (см. табл. 3.2) с указанием номеров блоков, состояния счётчика СчЦ, состояния разрядов сумматора, состояний разрядов регистров РгСм, РгB, Рг2, Рг2’, РгA, Рг1. В СчЦ устанавливается значение, равное разрядности регистров. То есть СчЦ:=6 (или 110 в двоичном виде).

В результате деления в блоке 12 на выходной шине ШИВых образуется остаток от деления равный десятичной 3 (000011 в двоичном виде), а в блоке 18, на выходной шине ШИВых, образуется целая часть частного равная десятичному числу 4 (000100 в двоичном виде). Так как знаки делимого и делителя одинаковы, то частное  положительное.

То есть частное можно записать в  виде:

Таблица 3.2. Пример алгоритма деления чисел                                      с фиксированной запятой с восстановлением остатка

№ бл.

СчЦ

См

РгСм

РгB

Рг2

Рг2’

РгA

Рг1

1

110

010111

000101

3

000000

000000

000000

5

000000

101110

6

000000

101110

7

101

111011

110111

011100

111010

8

011100

9

000000

000001

000000

11

000001

011100

13

100

111100

111000

111000

111010

17

111000

9

000001

000010

000000

11

000010

111000

13

011

111101

111011

110000

111010

17

110000

9

000010

000101

000000

11

000101

110000

13

010

000000

000001

100000

111010

16

100001

11

000001

100001

13

001

111100

111001

000010

111010

17

000010

9

000001

000011

000000

11

000011

000010

13

000

111110

111100

000100

111010

17

000100

9

000011

000110

000000

12

000011

000011

000000

14

000100

000100

000100

000000

18

000100

Целая часть частного Z показана на рис. 3.13.а, а остаток от деления показан на рис. 3.13.б.

веса

разрядов

24

23

22

21

20

0

0

0

0

1

1

знак

модуль остатка

веса

разрядов

24

23

22

21

20

0

0

0

1

0

0

знак

модуль частного

Рис. 3.13. Числа в формате с фиксированной запятой:

а) частное Z = 4;  б) остаток от деления (3)

а)

б)

Пример2: Пусть  X = 19,  Y = 7. Вычислить Z = X / Y, где X,  Y  и  Z – числа с фиксированной запятой. При делении использовать алгоритм деления чисел с фиксированной  запятой без восстановления остатка.

Так же, как и в предыдущем примере, для представления чисел с фиксированной запятой выделим 6 разрядов (старший разряд – знаковый). Делимое X показано на рис. 3.14.а, делитель Y показан на рис. 3.14.б.

веса

разрядов

24

23

22

21

20

0

0

0

1

1

1

знак

модуль делителя

веса

разрядов

24

23

22

21

20

0

1

0

0

1

1

знак

модуль делимого

а)

б)

Рис. 3.14. Числа в формате с фиксированной запятой:

а) делимое X = 19;  б) делитель Y = 7

Оформим алгоритм операции деления чисел с фиксированной запятой без восстановления остатка, в соответствии с микропрограммой, представленной на рис. 3.11, в виде таблицы        (см. табл. 3.3) с указанием номеров блоков, состояния счётчика циклов СчЦ, состояния разрядов сумматора См, состояний разрядов регистров РгСм, РгB, Рг2, Рг2’, РгA, Рг1. Также, как и в предыдущем примере, в СчЦ устанавливается значение, равное разрядности регистров. То есть СчЦ:=6 (или 110 в двоичном виде).

В результате деления в блоке 14 на выходной шине ШИВых образуется остаток от деления равный десятичному числу 5 (000101 в двоичном виде), а в блоке 20, на выходной шине         ШИВых, образуется целая часть частного равная десятичному числу 2 (000010 в двоичном виде). Так как знаки делимого и делителя одинаковы, то частное – число положительное.

То есть частное можно записать в  виде:

веса

разрядов

24

23

22

21

20

0

0

0

1

0

1

знак

модуль остатка

веса

разрядов

24

23

22

21

20

0

0

0

0

1

0

знак

модуль частного

Рис. 3.15. Числа в формате с фиксированной запятой:

а) частное Z = 2;  б) остаток от деления (5)

а)

б)

Целая часть частного Z показана на рис. 3.15.а. Остаток от деления показан на рис.3.15.б.

Таблица 3.3. Пример алгоритма деления чисел                                    с фиксированной запятой без восстановления остатка

№ бл.

СчЦ

См

РгСм

РгB

Рг2

Рг2’

РгA

Рг1

1

110

010011

000111

3

000000

000000

000000

5

000000

100110

10

000000

100110

13

111001

111000

15

101

110011

001100

18

001100

9

110011

001100

12

111010

000111

15

100

110100

011000

18

011000

9

110100

011000

12

111011

000111

15

011

110110

110000

18

110000

9

110110

110000

12

111101

000111

15

010

111011

100000

18

100000

9

111011

100000

12

000010

000111

15

001

000101

000000

19

000001

10

000101

000001

13

111110

111000

15

000

111100

000010

18

000010

11

000101

111110

111110

000111

14

000101

17,20

000010

000010

000010

000010

000000

3.4. Алгоритм ускоренного умножения чисел                            с фиксированной запятой

Операция умножения относится к длинным операциям. Для уменьшения времени ее выполнения существуют методы ускорения умножения. Они делятся на аппаратурные и логические. Как те, так и другие требуют дополнительных затрат оборудования. При использовании аппаратурных методов дополнительные затраты оборудования прямо пропорциональны числу разрядов в операндах. Эти методы вызывают усложнение схемы АЛУ.

Дополнительные затраты оборудования при реализации логических методов ускорения не зависят от разрядности операндов. Усложняется в основном схема управления АЛУ. В ЭВМ для ускорения умножения часто используются комбинации этих методов.

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

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

Рассмотрим метод ускоренного умножения n-разрядных целых чисел без знака (при четном n) по формуле:

где – значения i-го и i+1-го разрядов множителя Y,  - частичная сумма для i-го и i+1-го разрядов множителя, а  умножение на 2-2 осуществляется путем сдвига числа на два разряда вправо. В зависимости от данной пары разрядов к сумме частичных произведений прибавляются значения, указанные в табл. 3.4.

В многофункциональное АЛУ на рис. 4.1 для выполнения ускоренного умножения необходимо добавить триггер Т (признак коррекции), предназначение которого будет описано ниже.  

Табл. 3.4. Изменение суммы частичных произведений

Значение, которое

необходимо прибавить к сумме частичных

произведений

00

0

01

X

10

2×X

11

3×X

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

Последовательность выполнения операции ускоренного умножения на функциональных узлах АЛУ можно обобщить и выделить следующие этапы:

-        начальная установка;

-                вычисление сумм частичных произведений.

На рис. 3.16 этапы выполнения операции умножения разделены пунктирной линией.

A

10

    Т=0

Нет

Да

Нет

Да

12

Рг2[n-2]=0

     and

Рг2[n-1]=1

Нет

Да

13

Т:=0

РгА:=Рг1

14

Вычисление

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

1

Рг1:=ШиВх; РгВ:=0; СчЦ:=n¸2

Рг2:=ШиВх; Т:=0

Начало

Начальная установка

11

Рг2[n-2]=0

     and

Рг2[n-1]=0

Нет

Нет

15

Рг2[n-2]=1

     and

Рг2[n-1]=1

Нет

Да

Да

РгА:=0 

17

Нет

16

Рг2[n-2]=0

     and

Рг2[n-1]=0

Нет

B

Нет

18

Рг2[n-2]=1

     and

Рг2[n-1]=0

Нет

Да

Да

Нет

19

Рг2[n-2]=1

     and

Рг2[n-1]=1

Нет

20

Т:=1

21

РгА:=Рг1

См:=См+1

C

D

22

Т:=0

I

29

РгВ:=РгСм;

РгА:=Рг1

РгСм:=П(1)См;

Рг2’[0]:=См[n-1]

 

Да

30

 См[0]=0

Нет

РгСм[0]:=1

32

31

РгСм[0]:=0

J

РгА:=0

РгСм:=П(1)См;

Рг2’[0]:=См[n-1]

21

Да

23

 См[0]=0

Нет

24

РгСм[0]:=0

РгСм[0]:=1

D

29

Да

25

 См[0]=0

Нет

РгСм[0÷1]:=1

28

27

РгСм[0÷1]:=0

РгСм:=П(2)См;

Рг2’[1]:=См[n-1]

Рг2’[0]:=См[n-2]

21

Да

34

  СчЦ=0

Нет

Рг2’:=П(2)Рг2;

РгВ:=РгСм

Рг2:=Рг2’;

CчЦ:=CчЦ-1

36

I

Да

35

    T=0

Нет

37

РгА:=Рг1

РгСм:=См

A

B

C

7

ШиВых:=РгСм; Рг2:=Рг2’

РгВ:=Рг2

РгСм:=См

ШиВых:=РгСм

Конец

Рис. 3.16. Микропрограмма ускоренного

умножения целых чисел

Рассмотрим особенности этапа вычисления сумм частичных произведений. На данном этапе за один цикл умножения анализируется сразу два разряда множителя (). В зависимости от данной пары разрядов к сумме частичных произведений прибавляются значения указанные в табл. 3.4.

Рассмотрим  случаи,  указанные в табл. 3.4, подробнее:

-      при  = 00 к сумме частичных произведений прибавляется 0 и производится ее сдвиг на два разряда вправо;

-            при = 01 к сумме частичных произведений прибавляется одинарная мантисса множимого и сумма частичных произведений сдвигается на два разряда вправо;

-      при = 10 прибавляется удвоенная мантисса множимого и сумма частичных произведений сдвигается на два разряда вправо;

-      при = 11 вместо прибавления к сумме частичных произведений утроенной мантиссы множимого из суммы частичных произведений вычитается одинарная мантисса множимого и сумма частичных произведений сдвигается на два разряда вправо. Справедливость данной замены следует из равенства: 3×X = -X + 4×X, где 4×X должно быть прибавлено к сумме частичных произведений в следующем цикле. Так как после сдвига на два разряда вправо сумма частичных произведений уменьшится в 4 раза, то в следующем цикле необходимо прибавить не 4×X, а значение в четыре раза меньше, т.е. X.

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

Т

Рассмотрим     пример   ускоренного    умножения   6-разрядных чисел.

Пример. Пусть X = 011101b – множимое,

Y = 011101b –  множитель.

Вычислить Z – произведение.

Оформим вычисление в виде табл.3.5. Правила обработки пар разрядов множителя с учетом триггера коррекции приведены в табл. 3.6.

Табл. 3.5. Пример вычисления произведения

X

(множимое)

Сумма

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

Y

(множитель)

Триггер коррекции          Т

К сумме частичных произведе-ний прибавлено

011101

000000

011101

0

000000

011101

011101

000111

011101

0

X

000111

011101

101010

111010

011101

1

-X

111010

111010

110100

001101

011101

0

2×X

Необходимо  отметить,  что  в  начале   этапа  умножения n-разрядных чисел в СчЦ  заносится число n/2.

Табл. 3.6. Правила обработки пар разрядов множителя

Значение триггера коррекции Т

Модифициро-ванное

значение Т

Значение,

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

00

0

0

0

01

0

0

X

10

0

0

2×X

11

0

1

-X

00

1

0

X

01

1

0

2×X

10

1

1

-X

11

1

1

0

   0                   31         0                   31

СМ

           0                              31

ТгЗн1

Рг2

0                       31

Рг2’

0                       31

ТгЗн2

РгА

0                       31

РгВ

0                       31

РгC

0                  7

РгD

0                  7

СчЦ

–1

РгСм

0                       31

Сч1

0                  7

+1

–1

Тг

Тг1

   0           7        0           7

СОЛО

        0                      7

У

п

р.

ШИВх

 ШИВых

Рг1

0                       31

Признаки

+1 См

Рис. 4.1. Структурная схема многофункционального АЛУ

Глава 4. АЛУ для чисел с плавающей запятой

Структурная схема многофункционального АЛУ

В многофункциональном АЛУ (рис. 4.1) реализуются операции сложения, вычитания, умножения и деления чисел с плавающей и фиксированной запятой. Арифметические операции с плавающей запятой требуют выполнения операций, как над мантиссами, так и над порядками. Поэтому в ЭВМ используются отдельные узлы для обработки мантиссы и порядков или производится их последовательная обработка. Выбор способа обработки связан с требованиями к производительности ЭВМ.

Часть многофункционального АЛУ, предназначенная для проведения действий над мантиссами чисел, используется АЛУ с фиксированной запятой, и применяются те же алгоритмы выполнения арифметических операций. Для обеспечения действия над порядками в состав АЛУ универсального типа дополнительно включают сумматор порядков (СОЛО), два регистра порядков и коммутирующие элементы.

При рассмотрении структур АЛУ для операций с плавающей запятой примем, что числа с плавающей запятой имеют формат слова, изображенного на рис. 1.3. На данном АЛУ можно осуществлять операции и с числами с фиксированной запятой, но формат операнда при этом должен совпадать с форматом, изображенным на рис. 1.1.б.

В состав АЛУ входят:

1.      регистр Рг1 для приема и хранения первого операнда;

2.      регистр Рг2 для приема, хранения и сдвига второго операнда;

3.      регистр Рг2’ для сдвига операнда, находящегося в регистре Рг2;

4.      входные регистры сумматора РгА и РгВ;

5.      сумматор СМ для суммирования поступающих на его входы данных и выработки определенных признаков;

6.      выходной регистр сумматора РгСМ для фиксации результата суммирования;

7.              регистры РгС и РгD для хранения порядков операндов;

8.      схема СОЛО для выполнения логических операций (Ú, Ù) и операций сравнения (>, <, =) над однобайтовыми словами;

9.      регистр счетчика РгСч1 для хранения порядка операнда и выполнения арифметических операций над ним;

10.  триггеры знаков ТгЗн1 и ТгЗн2, хранящие знаки операндов;

11.  счетчик циклов СчЦ, хранящий оставшееся количество предельных сдвигов, который декрементируется при выполнении сдвигов мантиссы.

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

Сложение и вычитание чисел с плавающей запятой производится по формуле:

Z =

      где pX, pY и pZ  – порядки чисел X, Y и Z соответственно;

mX, mY  и  mZ – мантиссы чисел X, Y и Z.

При выполнении операций сложения / вычитания необходимы следующие действия:

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

2.      Произвести сложение (вычитание) мантисс, в результате чего получается мантисса суммы (разности).

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

4.      Полученная сумма (разность) нормализуется.

Алгоритм операции сложения / вычитания в многофункциональном АЛУ (рис. 4.2) подразделяется на следующие         этапы:

-  прием операндов   X   и   Y;

-  выравнивание порядков операндов   pX   и   pY;

-  сложение мантисс   mX    и   mY;

-  нормализация результата   Z.

Преобразование информации в функциональных узлах АЛУ производится отдельными микрооперациями, инициируемыми управляющими сигналами. Этапы выполнения на блок-схеме разделены пунктирной линией. Микрооперации в блоках, выполняемые в разных тактах, разделяются горизонтальной чертой.

Прием  операндов

Данная процедура выполняется в блоках 1 – 5. Первое слагаемое (уменьшаемое) X в первом такте поступает на входной регистр Рг1, второе слагаемое (вычитаемое) Y во втором такте поступает на регистр Рг2. Знак первого слагаемого фиксируется в триггере знака ТгЗн1, а знак второго слагаемого в случае суммирования заносится без изменений в триггер знака ТгЗн2, а в случае вычитания триггеру ТгЗн2 присваивается инверсное значение знака второго слагаемого. В счетчике циклов СчЦ фиксируется предельное число сдвигов, равное количеству разрядов мантиссы (m = 24). Смещенные порядки слагаемых, каждый из которых занимает семь битов, передаются из Рг1 и Рг2 в регистры РгС и РгD для последующего сравнения и выравнивания порядков, а нулевые разряды регистров РгС и РгD не используются и обнуляются.

Выравнивание порядков (блоки 6 – 18) выполняется в случае, если порядки операндов не равны, и начинается со сравнения порядков для поиска большего из них. За порядок результата при выполнении суммирования принимается больший из порядков операндов.

При сравнении порядков возможны пять случаев:

1.              рX – рY > т (m - число разрядов мантиссы). Из условия видно, что значение первого слагаемого значительно превышает значение второго слагаемого. В качестве результата принимается первое слагаемое, так как при выравнивании порядков все разряды мантиссы второго слагаемого принимают нулевое значение.

2.      рY - рX > т. Второе слагаемого значительно больше первого. В качестве результата суммирования принимается второе слагаемое.

3.      рX – рY = 0.  Порядки чисел равны. Можно приступить к суммированию мантисс.

4.       рX – рY = k1 ( k1 < т ). Порядок слагаемого X больше порядка слагаемого Y, но их разница не превышает количество разрядов мантиссы числа. Мантисса слагаемого Y сдвигается на k1 разрядов вправо, затем производится суммирование мантисс.

5.      pY – рX = k2 ( k2 < т ). Порядок слагаемого Y больше порядка слагаемого X. Перед выполнением суммирования мантисс производится сдвиг на k2 разрядов вправо мантиссы слагаемого X.

Схема СОЛО производит суммирование содержимого регистров РгС и РгD или вырабатывает признаки (РгС > РгD, РгС < РгD, РгС = РгD).Значение меньшего порядка из соответствующего регистра передается в счетчик Сч1, где в дальнейшем данное значение будет увеличиваться на единицу при каждом сдвиге мантиссы числа вправо. Затем в предварительно обнуленный регистр (РгС или РгD) заносится значение большего порядка. Таким образом, в счетчике Сч1 находится значение меньшего порядка, которое после каждого сдвига мантиссы проверяется на равенство со значением большего порядка.

Если РгС > РгD, то схема СОЛО вырабатывает соответствующий признак и производятся следующие действия: осуществляется сдвиг мантиссы операнда, находящегося в регистре Рг2, на 1 разряд вправо, а значение счетчика Сч1 увеличивается на 1.

Для сдвига мантиссы второго операнда необходимо содержимое регистра Рг2 присвоить регистру РгВ, а регистр другого операнда (РгА) в данном случае остается обнуленным. После этого осуществляется суммирование содержимого входных регистров сумматора и передача результата в регистр сумматора РгСм со сдвигом вправо. Таким образом, произошел сдвиг мантиссы числа вправо.

нет

да

нет

да

РгD:=0

РгСОЛО:=РгСÅРгD

Сч1:=РгСОЛО

РгD[0]:=0

РгD[1¸7]:= Рг2[1¸7]

8

   РгС>РгD

6

РгС[0]:=0; РгD[0]:=0

РгС[1¸7]:= Рг1[1¸7]

РгD[1¸7]:= Рг2[1¸7]

5

   РгС=РгD

7

РгC:=0

РгСОЛО:=РгСÅРгD

Сч1:=РгСОЛО

РгC[0]:=0

РгC[1¸7]:= Рг1[1¸7]

9

A

Прием операндов

1

Рг1:=ШИВх

Рг2:=ШИВх

ТгЗн1:=Рг1[0]

РгА:=0; РгВ:=0

СчЦ:=24

Начало

нет

да

 сложение

2

ТгЗн2:=Рг2[0]

3

20

ТгЗн2:=Рг2[0]

4

20

Выравнивание

порядков

да

нет

Рг1[0¸7]:=0

Рг2[0¸7]:=0

18

да

нет

да

нет

нет

да

да

нет

СчЦ¹0

14

   РгС=РгD

11

   РгС>РгD

10

РгB[8¸31]:= Рг2[8¸31]

РгСм:=П(1)См

Сч1:=Сч1+1

Рг2[8¸31]:= РгСм[8¸31]

РгСм[1¸7]:= Сч1[1¸7]

Рг2[1¸7]:= РгСм[1¸7]

РгD[1¸7]:= Рг2[1¸7]

СчЦ:=СчЦ-1

12

A

РгA[8¸31]:= Рг1[8¸31]

РгСм:=П(1)См

Сч1:=Сч1+1

Рг1[8¸31]:= РгСм[8¸31]

РгСм[1¸7]:= Сч1[1¸7]

Рг1[1¸7]:= РгСм[1¸7]

РгC[1¸7]:= Рг1[1¸7]

СчЦ:=СчЦ-1

13

 СчЦ¹0

15

РгA:=0

РгB:=Рг2

РгСм:=См

ШИВых:=РгСм

17

РгB:=0

РгA:=Рг1

РгСм:=См

ШИВых:=РгСм

16

B

  ТгЗн1¹ТгЗн2

19

C
D

Сложение

мантисс

C

РгСм:=РгА+РгВ+1

29

да

нет

   ТгЗн1=0

26

РгА:=Рг1; РгВ:=Рг2

27

РгА:=Рг1; РгВ:=Рг2

28

да

нет

 РгСм[7]=1

30

нет

да

E

 РгСм[8]¹0

33

ТгЗн1:=0; Рг2:=РгСм

РгА:=0; РгВ:=Рг2

31

ТгЗн1:=1; Рг2:=РгСм

РгА:=0

РгВ:=Рг2

РгСм:=РгА+РгВ+1

32

38

нет

да

 Сч1=0

35

нет

да

 РгСм[8¸31]¹0

34

РгСм:=0

Прерывание из-за

потери значимости

37

36

Сч1:=Сч1-1; РгСм:=Л(1)См

РгСм[31]:=0

Рг2:=РгСм

РгВ:=Рг2; РгА:=0

РгСм:=См

Нормализация

результата

РгСм:=0

Прерывание из-за

исчезновения порядка

D

Сложение

мантисс

ШИВых:=РгСм

39

Cч1:=Сч1+1

РгСм:=П(1)См

22

нет

да

 РгСм[7]=1

21

да

нет

 Сч1[0]=0

23

E

РгCм[1¸7]:= РгСч1[1¸7]

РгCм[0]:= ТгЗн1

25

Конец
B

РгA:=Рг1; РгВ:=Рг2

РгСм:=См

20

РгCм:=0

Прерывание из-за

переполнения порядка

24

Рис. 4.2. Алгоритм сложения и вычитания

чисел с плавающей запятой

Далее значение счетчика Сч1 увеличивается на 1 и передается регистру РгD. Это делается для того, чтобы при сравнении значений входных регистров СОЛО, содержащих порядки операндов, выяснить, приняли ли данные порядки одинаковые значения или требуются дальнейшие сдвиги мантиссы. После этого происходит уменьшение предельного числа сдвигов на 1 путем вычитания из счетчика циклов СчЦ единицы.

Пусть схема СОЛО выработала признак РгС < РгD, тогда наименьший порядок в начале выравнивания порядков имел первый операнд, т. е. значение регистра РгС было меньше значения регистра РгD, то выполняются аналогичные операции, описанные выше; но при этом сдвигаемый порядок операнда будет находиться не в регистре Рг2, а в регистре Рг1, а сдвинутый порядок через регистр Рг1 будет передаваться в регистр РгC. В остальном операции выравнивания порядков идентичны.

После каждого выполнения сдвига в обоих случаях необходима проверка счетчика циклов СчЦ. Если число, содержащееся в счетчике, больше нуля, то можно производить следующий сдвиг. Однако, если значение счетчика СчЦ равно нулю, то в качестве результата сложения или вычитания принимается операнд, содержащий больший порядок, т. е. в данном случае значение одного слагаемого значительно превышает значение другого слагаемого.

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

После выравнивания порядков модули мантисс хранятся в Рг1 и Рг2 в разрядах с 8-го по 31-й, их знаки – в ТгЗн1 и ТгЗн2, а порядок результата содержится в счетчике Сч1.

Сложение мантисс

Данная процедура выполняется в блоках 19 – 32. Сначала анализируются знаки мантисс, и при равенстве знаков модули мантисс складываются.

Если при сложении мантисс возникло переполнение, т. е. в седьмом разряде сумматора вместо 0 формируется значение 1, то мантисса суммы сдвигается на один разряд вправо, а порядок увеличивается на 1 (Сч1: = Сч1+1). Если после этого значение нулевого разряда счетчика Сч1 не равно 0 (возникло переполнение порядка), то регистр сумматора обнуляется и вызывается прерывание из-за переполнения порядка.

При суммировании мантисс с различными знаками сначала определяется операнд, содержащий отрицательную мантиссу. Затем  мантисса данного операнда складывается с положительной мантиссой второго операнда в дополнительном коде, для чего она передается на входной регистр сумматора в обратном коде и производится  ее суммирование с прямым кодом положительной мантиссы второго операнда. Затем происходит подсуммирование единицы для преобразования обратного кода мантиссы в дополнительный код. Если в результате операции сложения седьмой разряд регистра сумматора (РгСм[7]) равен 1, то результат положителен, и в триггер знака ТгЗн1 заносится 0, а единица в РгСм[7] не учитывается; в противном случае результат отрицателен, и в триггер знака ТгЗн1 заносится 1, а результат переводится из дополнительного кода  в прямой.

Если результат нормализованный (См[8]¹0), то производится переход на блок 25, где в регистр сумматора РгСм, содержащий модуль мантиссы, заносится знак результата (по значению триггера знака ТгЗн1) и порядок – значение Сч1. В результате данной операции в регистре сумматора находится результат (операнд Z), который затем передается на ШИВых.

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

Нормализация результата производится в блоках     33 – 38. Для этого мантисса результата сдвигается на один разряд влево, а значение Сч1 уменьшается на 1.

Если после этого результат оказывается ненормализованным, то вышеописанные шаги повторяются.

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

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

Умножение чисел с плавающей запятой выполняется в соответствии с формулой:

Z=  

где       S - основание системы счисления;

pX - порядок множимого;

pY - порядок множителя;

pZ - порядок произведения;

- мантисса множимого;

- мантисса множителя;

 - мантисса произведения.

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

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

Умножение мантисс выполняется аналогично умножению двоичных чисел с фиксированной запятой.

Произведению присваивается знак плюс, если сомножители имеют одинаковые знаки, и знак минус, если знаки разные.

В многофункциональном АЛУ (рис. 4.1) для умножения чисел с плавающей запятой используется: сумматор См; регистры Рг1 и Рг2 для приёма соответственно множимого и множителя; регистры РгА и РгВ для передачи на сумматор смещенных порядков множимого и множителя при получении суммы порядков и для передачи на сумматор мантиссы множимого и суммы частичных произведений при получении мантиссы произведения; счетчик Сч1 для хранения смещенного порядка произведения; регистр Рг2’ для организации сдвигов множителя; триггеры знаков множимого и множителя ТгЗн1 и ТгЗн2.

Алгоритм операции умножения чисел с плавающей запятой, с n-разрядной мантиссой в многофункциональном АЛУ приведён на рис. 4.3. В блоках микрооперации, выполняемые в разных тактах, разделяются горизонтальной чертой. 

Последовательность выполнения операции умножения на функциональных узлах АЛУ можно обобщить и выделить следующие этапы:

- прием   операндов X и Y;

- проверка мантисс сомножителей на равенство нулю;

- вычисление смещённого порядка произведения;

- умножение мантисс;

- формирование окончательного результата.

На рис. 4.3 этапы выполнения операции умножения разделены пунктирной линией.

Да

Нет

1

Рг1:=ШиВх;

Рг2:=ШиВх;

ТгЗн1:=Рг1[0]; ТгЗн2:=Рг2[0]

Начало

2

 Рг1[8]=0

or

Рг2[8]=0

Прием операндов X и Y

Проверка мантисс сомножителей на равенство нулю

B

A

РгA:=0; РгA[1¸7]:=Рг1[1¸7];

РгB:=0; РгB[1¸7]:=Рг2[1¸7]

РгСм:=См

Да

3

4

  См[0]=0

Нет

Да

5

  См[1]=0

Нет

Да

6

  См[1]=0

Нет

8

Тг1:=0

7

Тг1:=1

Сч1[0]:=0; Сч1[1]:=См[1];

Сч1[2¸7]:=См[2¸7]

9

Вычисление смещенного

порядка произведения

B

A

Да

Сч1:=Сч1-1; РгА:=0; РгВ:=РгСм

РгСм:=Л(1)См; РгСм[31]:=0

C

Да

11

  Рг2[31]=0

Нет

13

12

РгА:=0

РгА:=Рг1

14

РгСм[0]:=0; РгСм:=П(1)См; Рг2’:=П(1)Рг2

СчЦ:=СчЦ-1; РгВ:=РгСм; Рг2:=Рг2’

15

 СчЦ≠0

Нет

Да

16

 РгСм[8]≠0

Нет

17

Умножение

мантисс

РгСм:=0

РгВ:=РгСм; СчЦ:=n;

Рг1[0¸7]:=РгСм[0¸7]

10

Да

18

 Тг1=0 &

Сч1[0÷1]=11

Нет

19

 Тг1=1 &

Сч1[0÷1]=00

21

РгСм[1÷7]:=Сч1[1÷7]

B

20

Да

22

  ТгЗн1=ТгЗн2

Нет

23

РгСм[0]:=1

24

РгСм[0]:=0

РгСм:=0

Прерывание по переполнению

25

ШиВых:=РгСм

Конец

Формирование окончательного результата

C

Рис. 4.3. Микропрограмма умножения чисел                                            с плавающей запятой

Приём операндов X и Y  выполняется в блоке 1. В первом такте производится приём первого операнда (множимого) в Рг1. Во втором такте производится фиксация знака принятого операнда  в триггере знака ТгЗн1. В этом же такте можно принять второй операнд (множитель) в Рг2. В третьем такте производится фиксация знака второго операнда  в триггере знака ТгЗн2.

Проверка мантисс сомножителей на равенство нулю осуществляется в блоке 2. Так как для числа с плавающей запятой (рис. 1.3), отличного от нуля, старший разряд нормализованной мантиссы равен 1, то, таким образом, если этот разряд равен 0, то произведению присваивается 0 и операция умножения не производится.

Вычисление смещённого порядка произведения произво- дится в блоках с 3 по 9. Перед вычислением смещенного порядка входные регистры сумматора РгА и РгВ обнуляются. В РгА заносится смещённый порядок множимого, а в РгВ заносится смещённый порядок множителя. Затем на сумматоре производится их суммирование.

В результате в левом байте сумматора См[0¸7] образуется сумма порядков множимого и множителя. Первоначально анализируются значения разрядов См[0] и См[1]:

-          если См[0¸1] = 00, то получено отрицательное переполнение порядка. При этом сразу фиксируется нулевой результат умножения;

-     если См[0¸1] = 01, то имеет место отрицательный  порядок. Отсутствие переполнения фиксируется триггером Тг1 (Тг1: = 0);

-          если См[0¸1] = 10, то получен положительный порядок. Отсутствие переполнения порядка фиксируется установкой Тг1: = 0; 

-          если См[0¸1] = 11, то получено положительное переполнение порядка, но исчезновение порядка не фиксируется, так как переполнение может исчезнуть при нормализации результата. Факт переполнения фиксируется установкой Тг1: = 1.

Для получения смещенного порядка суммы в Сч1 [0¸7] нулевой разряд Сч1[0] обнуляется, в первый разряд Сч1[1] заносится инвертированное значение первого разряда сумматора См[1], а в разряды Сч1[2¸7] заносятся соответствующие разряды сумматора См[2¸7].

Умножение мантисс производится в блоках с 10    по 15 и осуществляется по следующему алгоритму:

1.      Исходному значению суммы частичных произведений присваивается 0.

2.      В Рг1, содержащем множимое, разряды с нулевого по седьмой (знаковый разряд и смещенный порядок) обнуляются, так как знак был скопирован в триггер знаков на этапе приема операндов, а действия над смещенным порядком выполнены на этапе вычисления смещенного порядка произведения.

3.      В счетчик циклов СчЦ заносится число разрядов мантиссы.

4.      В зависимости от значения младшего разряда мантиссы множителя Рг2[31] к сумме частичных произведений прибавляется либо 0, либо мантисса множимого, для чего соответствующее значение присваивается в РгА.

5.      Полученная сумма передается в РгСм со сдвигом вправо на один разряд и записывается в РгВ.

6.      Мантисса множимого, хранящаяся в Рг2, с помощью Рг2’ сдвигается вправо на один разряд. 

7.      СчЦ уменьшается на единицу.

8.              Пункты 4,5,6,7 повторяются до тех пор, пока СчЦ не станет равен нулю.

Формирование окончательного результата производится в блоках с 16 по 25. Результат, полученный на этапе умножения мантисс, в случае необходимости нормализуют. Для этого проверяется старший разряд мантиссы произведения. Если он равен нулю, то происходит сдвиг мантиссы на один разряд влево и уменьшение порядка произведения на единицу. Это происходит до тех пор, пока старший разряд мантиссы произведения не станет равен единице.

Для получения окончательного порядка произведения анализируются значения триггера переполнения Тг1 и Сч1[0¸1]. Если Тг1=0 и разряды Сч1[0¸1]=11, то это означает отрицательное переполнение. При этом фиксируется нулевой результат умножения. Если же триггер переполнения Тг1=1 и разряды Сч1[0¸1]=00, то произошло положительное переполнение и генерируется прерывание по переполнению. Если переполнения нет, то в РгСм[8÷31] находится нормализованная мантисса произведения. Если значения в триггерах знаков множимого и множителя равны, то знак произведения – положительный, иначе знак произведения – отрицательный. Знак произведения фиксируется в нулевом разряде РгСм: 

РгСм[0]:= 

Смещённый порядок из Сч1[1¸7] заносится в соответствующие разряды РгСм[1¸7].

На этом операция умножения заканчивается. Результат умножения  находится в РгСм.

Пример.  Пусть X=+2,5, Y=+6,25.

Вычислить Z=X×Y=2,5 × 6,25. X, Y, Z - числа с

плавающей запятой.

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

Представим множимое (рис. 4.4) и множитель (рис. 4.15) в формате с плавающей запятой, где для мантиссы выделено 10 разрядов, а для порядка - 7 разрядов. Множимое в формате числа с плавающей запятой показано на рис. 4.4.

Веса разрядов

26

25

24

23

22

21

20

21

20

2-1

2-2

2-3

2-4

2-5

2-6

2-7

2-8

0

1

0

0

0

0

1

0

1

0

1

0

0

0

0

0

0

0

знак

смещённый порядок

мантисса

Рис. 4.4. Множимое Х = 2,5 в формате с плавающей запятой

Сделаем проверку множимого (т.е. произведём обратное преобразование). Необходимо напомнить, что если старший разряд смещённого порядка равен 1, то порядок числа положительный, иначе – отрицательный. Для преобразования смещённого порядка в несмещённый необходимо из смещённого порядка вычесть двоичное число 1000000b (или 26). Если  из  смещённого порядка  делимого pxсм =1000010b вычесть 1000000b, то несмещённый порядок делимого px будет равен 0000010b, или десятичному числу 2. Таким образом:

X = mx ´ ´ 22 = 10,10000000 = = 1 ´ 21  + 0 ´ 20 + 1 ´ 2-1 + 0 ´ 2-2 + 0 ´ 2-3 + 0 ´ 2-4 + 0 ´ 2-5 +0 ´ 2-6 + 0 ´ 2-7 + 0 ´ 2-8 = 2,5,

где          mx – нормализованная мантисса множимого;

                px = 2 – порядок множимого (несмещенный) в десятичном

                       виде.

Веса разрядов

26

25

24

23

22

21

20

22

21

20

2-1

2-2

2-3

2-4

2-5

2-6

2-7

0

1

0

0

0

0

1

1

1

1

0

0

1

0

0

0

0

0

Знак

смещённый порядок

мантисса

Рис. 4.5. Множитель Y =  6,25 в формате с плавающей запятой

Аналогично сделаем проверку делителя:

Y = my ´ ´ 23 = 110,0100000 = = 1 ´ 22 + 1 ´ 21 + 0 ´ 20 + 0 ´ 2-1 + 1 ´ 2-2 + 0 ´ 2-3 + 0 ´ 2-4 + 0 ´ 2-5 + 0 ´ 2-6 + 0 ´ 2-7 = 6,25,

где          my – нормализованная мантисса множителя;

                py   =  3 – порядок множителя (несмещенный) в десятичном

                       виде.

Рассмотрим выполнение примера поэтапно.      

Прием  операндов Х и Y. Множимое заносится в Рг1. В ТгЗн1 запоминается знак множимого. В Рг2 заносится множитель. Знак множителя запоминается в ТгЗн2.

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

                Вычисление смещённого порядка произведения. Необхо- димо сложить на сумматоре  смещённый порядок множимого (РгА) и смещённый порядок множителя (РгВ). Необходимо учесть, что для сложения порядков используется дополнительно нулевой разряд.

                В результате сложения на выходе сумматора См[0¸7] сформировалась сумма порядков сомножителей (рис. 4.6).

Разряды

[0]

[1¸7]

[8¸17]

Комментарий

РгА

0

1000010

0000000000

В РгА[1¸7] смещённый порядок множимого px.см

РгВ

0

1000011

0000000000

В РгВ[1¸7] смещённый порядок множителя py.см

См.

1

0000101

0000000000

В См[1¸7] сумма смещенных порядков px.см + py.см

Сч1

0

1000101

В Сч1[1¸7] смещённый порядок произведения pz.см

Рис. 4.6. Суммирование смещенных порядков

Анализируем значения двух старших разрядов См. Так как См[0¸1]=10, то получен положительный, не переполненный порядок (это фиксируется в Тг1). В смещенный он преобразуется инверсией первого разряда См[1]. Итак, pz.см = =1000101 b. Результат заносим в разряды Сч1[1¸7], а в нулевой разряд Сч1[0]:=0.

Умножение мантисс. Оформим умножение мантисс в виде таблицы (табл. 4.1) с указанием номеров блоков, использующихся в алгоритме и двоичных кодов сомножителей:

Множимое     Рг1 = 0 1000010 1010000000 (см. рис. 4.4)

 Рг1 = 0 0000000 1010000000– после обнуления           

 разрядов знака и порядка.

Множитель    Рг2 = 0 1000011 1100100000 (см. рис. 4.5).

Табл. 4.1. Пример умножения мантисс

Номер блока

СчЦ

РгА[8¸17]

РгВ (сумма частичных произведений)

Рг2[8¸17]

(мантисса множителя)

1

2

3

4

5

9

10

0 0000000 0000000000

1100100000

10,

11,

13

9

0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

1100100000

0110010000

10,

11,

13

8

+

0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0110010000

0011001000

10,

11,

13

7

+

0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0011001000

0001100100

10,

11,

13

6

+

0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0 0000000 0000000000

0001100100

0000110010

10,

11,

13

5

+

0000000000

0 0000000 0000000000

0 0000000 1010000000

0 0000000 1010000000

0 0000000 0101000000

0000110010

0000011001

10,

12,

13

4

+

1010000000

0 0000000 0101000000

0 0000000 0000000000

0 0000000 0101000000

0 0000000 0010100000

0000011001

0000001100

10,

11,

13

3

+

0000000000

0 0000000 0010100000

0 0000000 0000000000

0 0000000 0010100000

0 0000000 0001010000

0000001100

0000000110

10,

11,

13

2

+

0000000000

0 0000000 0010100000

0 0000000 0000000000

0 0000000 0010100000

0 0000000 0001010000

0000000110

0000000011

1

2

3

4

5

10,

12,

13

1

+

1010000000

0 0000000 0001010000

0 0000000 1010000000

0 0000000 1011010000

0 0000000 0101101000

0000000011

0000000001

10,

12,

13

0

+

1010000000

0 0000000 0101101000

0 0000000 1010000000

0 0000000 1111101000

0 0000000 0111110100

0000000001

0000000000

После этапа умножения мантисс в РгВ[8÷17] (см табл. 4.1) находится мантисса произведения mZ.

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

В результате нормализации мантисса произведения сдвинулась влево на один разряд и порядок произведения уменьшился на единицу (см. табл. 4.2).   

Табл. 4 .2. Результат нормализации мантиссы произведения

До нормализации

После нормализации

Сч1[0¸7]

(порядок произведения)

РгСм[8¸17]

(мантисса произведения)

Сч1[0¸7]

(порядок произведения)

РгСм[8¸17]

(мантисса произведения)

01000101

0111110100

01000100

1111101000

Значения Тг1=0 и Сч1[0¸1]=01 показывают, что отрицательного и положительного переполнения не произошло.

В РгСм формируется окончательный результат операции умножения. Так как ТгЗн1=ТгЗн2, то РгСм[0]:=0. Смещённый порядок Сч1[1¸7] заносится в соответствующие разряды РгСм[1¸7].

Двоичное произведение Z представлено на рис. 4.7:

Веса разрядов

26

25

24

23

22

21

20

23

22

21

20

2-1

2-2

2-3

2-4

2-5

2-6

0

1

0

0

0

1

0

0

1

1

1

1

1

0

1

0

0

0

знак

смещённый порядок

мантисса

Рис. 4.7. Двоичный результат операции умножения Z=X×Y=15,625

Преобразуем двоичное произведение Z к десятичному             виду:

Z =1 ´ 23 + 1 ´ 22 + 1 ´ 21 + 1 ´ 20 + 1 ´ 2-1 + 0 ´ 2-2 + 1 ´ 2-3 + 0 ´

´2-4 + 0 ´ 2-5 + 0 ´ 2-6 = 15,625

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

Деление чисел с плавающей запятой выполняется в соответствии с формулой:

Z=,

где       S - основание системы счисления;

pX - порядок делимого;

pY - порядок делителя;

pZ - порядок частного;

- мантисса делимого;

- мантисса делителя;

 - мантисса частного.

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

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

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

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

Частному присваивается знак плюс, если делимое и делитель имеют одинаковые знаки, и знак минус, если знаки разные.

Многофункциональное АЛУ для деления чисел с плавающей запятой (см. рис. 4.1) использует: сумматор См; регистры Рг1 и Рг2 для приёма соответственно делителя и делимого; регистры РгА и РгВ для передачи на сумматор смещенных порядков делителя и делимого при получении разности порядков и для передачи на сумматор мантиссы делителя и частичного остатка при получении мантиссы частного; счетчик Сч1 для хранения смещенного порядка частного; регистры Рг2 и Рг2’ для хранения цифровых разрядов мантиссы частного; триггеры знаков делимого и делителя ТгЗн2 и ТгЗн1.

Последовательность выполнения операции деления на функциональных узлах многофункционального АЛУ можно обобщить и выделить следующие этапы:

- прием   операндов X и Y;

- проверка мантиссы делителя на равенство нулю;

- проверка мантиссы делимого на равенство нулю;

- вычисление смещённого порядка частного;

- проверка мантиссы делимого и делителя;

- деление мантисс;

- формирование окончательного результата.

Алгоритм операции деления в многофункциональном АЛУ приведён на рис. 4.8.  Этапы выполнения разделены пунктирной линией. В блоках микрооперации, выполняемые в разных тактах, разделяются горизонтальной чертой.

Приём операндов X и Y  выполняется в блоке 1. В первом такте производится приём первого операнда (делителя) в Рг1. Во втором такте производится фиксация знака принятого операнда  в триггере знака ТгЗн1. В этом же такте можно принять второй операнд (делимое) в Рг2. В третьем такте производится фиксация знака второго операнда  в триггере знака ТгЗн2.

Мантиссы операндов X и Y нормализованы.

Сч1[1]:=;Сч1[2¸7]:=См[2¸7]

9

B

да

нет

да

нет

да

нет

См[0]=0

16

См[0]=0

20

Рг2’[31]:=1

22

Рг2’[31]:=0

21

СчЦ = 0

14

C

РгA:=Рг1

17

РгА:=

См[31]:=+1См

18

РгСм:=Л(1)См; РгСм[31]:=0 Рг2’:=Л(1)Рг2; СчЦ:=СчЦ-1

19

РгА:=0; РгВ[0¸7]:=0; РгВ[8¸31]:=Рг2[8¸31]; РгСм:=Л(1)См; СчЦ:=24

13

да

нет

См[0]=0

11

Проверка

мантисс

делимого

и делителя

Деление

мантисс

РгB:=РгСм; Рг2:=Рг2’

15

РгВ:=Рг2; РгА:=0

РгСм:=П(1)См; Сч1:=Сч1+1

Рг2:=РгСм

12

да

нет

См[0¸1]=10

6

   Тг1:=1; Сч1[0]:=См[0]

     Тг1:=0; Сч1[0]:=0

8

Прерывание по переполнению порядка

да

нет

Начало

Прерывание по делению на 0

нет

да

Рг1[8]=0

2

да

Рг2[8]=0

3

См[0¸1]=01

5

A

нет

РгА[0]:=0; РгА[1¸7]:=

РгА[8¸31]:=0; РгВ[0]:=0;

РгВ[1¸7]:=Рг2[1¸7]; РгВ[8¸31]:=0

См[7]:=+1            

РгСм:=См

4

Приём операндов

Проверка мантиссы

делителя на равенство 0

Проверка мантиссы делимого на равенство 0

   

Вычисление

смещённого

порядка

частного

B

Рг1:=ШИВх

ТгЗн1:=Рг1[0]; Рг2:=ШИВх

ТгЗн2:=Рг2[0]

1

Конец

Прерывание по переполнению

нет

да

нет

да

Тг1=1 и Сч1[0¸1]=01

23

   ТрЗн1=ТрЗн2

28

РгСм[1¸7]:=Сч1[1¸7]; РгСм[8¸31]:=См[8¸31]

27

РгСм[0]:=0

30

РгСм[0]:=1

29

ШИВых:=РгСм

31

да

                        нет

Тг1=0 и Сч1[0¸1]=10

24

Рг2:=Рг2’

РгA:=0; РгB:=Рг2

25

Формирование окончательного результата

РгСм:=0

26

C

А

Рис. 4.8. Микропрограмма деления чисел с плавающей
запятой без восстановления остатка
Проверка мантиссы делителя на равенство нулю осуществляется в блоке 2. Так как для числа с плавающей запятой 0 разряд используется для представления знака числа, разряды с 1 по 7 используются для представления смещённого порядка (характеристики) числа, то 8 разряд будет соответствовать старшему разряду мантиссы. Так как у числа, отличного от нуля, старший разряд нормализованной мантиссы равен 1, то, таким образом, если этот разряд в мантиссе делителя равен 0, то вырабатывается прерывание по делению на ноль.
Проверка мантиссы делимого на равенство нулю осуществляется в блоке 3 и заключается в проверке старшего разряда нормализованной мантиссы делимого на равенство нулю. Если это так, то в частное записывается 0 без выполнения деления.

Вычисление смещённого порядка частного производится в блоках с 4 по 9. Необходимо отметить, что знаковые разряды (старшие разряды) делимого и делителя, находящихся в регистрах Рг2 и Рг1 на этом этапе обнуляются, так как они уже были скопированы в триггеры знаков на этапе приёма операндов. Это необходимо для использования этих разрядов при вычислении смещённого порядка частного, а также при вычислении разности мантисс. В обоих случаях разряды используются для анализа знака результата.

Для вычисления смещённого порядка частного во входной регистр сумматора РгА заносится смещённый порядок делителя в дополнительном коде, а во входной регистр сумматора РгВ заносится смещённый порядок делимого в прямом коде. Затем на сумматоре производится суммирование РгА и РгВ.

В результате в левом байте сумматора См[0¸7] образуется разность порядков делимого и делителя. Первоначально анализируются значения разрядов См[0] и См[1]:

-     если См[0¸1] = 00, то получен положительный не переполненный порядок. Отсутствие переполнения фиксируется триггером Тг1 (Тг1: = 0);

-     если См[0¸1] = 01, то имеет место положительное переполнение порядка. В этом случае вырабатывается сигнал прерывания по переполнению порядка и деления не происходит;

-          если См[0¸1] = 11, то получен отрицательный порядок. Отсутствие переполнения порядка фиксируется установкой Тг1: = 0;

Во всех трёх случаях для получения смещённого порядка в Сч1[0¸7] нулевой разряд Сч1[0] обнуляется, в первый разряд Сч1[1] заносится инвертированное значение первого разряда сумматора См[1], а в разряды Сч1[2¸7] заносятся соответствующие разряды с выхода сумматора См[2¸7].

-          если же См[0¸1] = 10, то получено отрицательное переполнение порядка, но исчезновение порядка не фиксируется, так как переполнение может исчезнуть при денормализации. Факт переполнения фиксируется установкой Тг1: = 1. Для получения смещённого порядка в Сч1[0¸7] в нулевой разряд Сч1[0] заносится значение нулевого разряда сумматора См[0], в первый разряд Сч1[1] заносится инвертированное значение первого разряда сумматора См[1], а в разряды Сч1[2¸7] заносятся соответствующие разряды с выхода сумматора См[2¸7].

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

Деление мантисс производится в блоках с 13 по 22. Как было сказано выше, деление мантисс обычно выполняется методом без восстановления остатка с неподвижным делителем аналогично делению целых чисел с фиксированной запятой с неподвижным делителем. Отличие заключается в том, что условно принимаются равными нулю разряды младшей половины делимого, а не старшей половины, как было в алгоритмах деления чисел с фиксированной запятой. В алгоритме деления мантисс разряды старшей половины делимого содержат разряды мантиссы делимого.

Деление мантисс можно разделить на следующие этапы:

1.      Исходное значение частичного остатка полагается равным старшим разрядам делимого;

2.      Частичный остаток удваивается путём сдвига на 1 разряд влево, при этом в освободившийся разряд заносится очередная цифра делимого из разрядов младшей половины делимого. Так как для данного алгоритма деления мантисс было условно принято, что разряды младшей половины делимого равны 0, то при сдвигах частичного остатка влево в освободившиеся разряды всегда заносятся нули;

3.      Если частичный остаток положительный (См[0]=0), то делитель вычитается из частичного остатка. Если же частичный остаток отрицательный (См[0]=1), то делитель суммируется с частичным остатком;

4.      Если полученный частичный остаток положительный (См[0]=0), то очередной цифре мантиссы частного присваивается значение 1 (Рг2’[31]:=1), иначе 0 (Рг2’[31]:=0);

5.      Пункты 2,3 и 4 повторяются до получения всех цифр модуля частного.

Мантисса частного, полученная с помощью данного алгоритма, будет гарантированно нормализованной, так как мантисса делителя может быть больше мантиссы делимого не более чем в 2 раза (это следует из того, что мантиссы делимого и делителя изначально нормализованы). Отсюда следует, что мантисса частного будет больше или равна 0,5 (старший разряд мантиссы равен 1), но меньше 1.

Формирование окончательного результата производится в блоках с 23 по 31. Для получения окончательного порядка результата анализируются значения триггера переполнения Тг1 и Сч1[0¸1]. Если Тг1=1 и разряды Сч1[0¸1]=01, то это означает, что результат деления можно принять равным нулю, так как произошло отрицательное переполнение порядка. Если триггер переполнения Тг1=0 и разряды Сч1[0¸1]=10, то происходит прерывание по положительному переполнению. Если же переполнения порядка нет, то в РгСм формируется окончательный результат операции деления. Если значения в триггерах знаков делимого и делителя не равны между собой, то знак частного – отрицательный, иначе знак частного – положительный, т.е. если ТгЗн1 ¹ ТгЗн2, то РгСм[0]:=1, иначе РгСм[0]:=0. Смещённый порядок, находящийся в Сч1[1¸7], заносятся в соответствующие разряды РгСм[1¸7], а мантисса частного, находящаяся в См[8¸31], заносятся в соответствующие разряды РгСм[8¸31].

Пример:  Пусть X = 24,5 Y = 11,2. Вычислить  Z = X / Y, где X,  Y  и  Z – числа с плавающей запятой. При делении использовать алгоритм деления чисел с плавающей запятой без восстановления остатка.

Рассмотрим  выполнение примера поэтапно.

Приём операндов X и Y. На данном этапе происходит приём операндов в формате чисел с плавающей запятой. Делимое X заносится в Рг2, делитель Y в Рг1. Их знаки фиксируются соответственно в ТгЗн2 и ТгЗн1. Делимое X = 24,5 в формате числа с плавающей запятой, показано на  рис. 4.9.

Веса разрядов

26

25

24

23

22

21

20

24

23

22

21

20

2-1

2-2

2-3

2-4

2-5

0

1

0

0

0

1

0

1

1

1

0

0

0

1

0

0

0

0

знак

смещенный порядок

мантисса

Рис. 4.9. Делимое X = 24,5 в формате числа с плавающей запятой

Сделаем проверку представления делимого (то есть произведём обратное преобразование). Необходимо напомнить, что если знаковый разряд смещённого порядка равен 1 (см. рис. 4.9), то порядок числа (несмещенный) положительный, иначе – отрицательный. Для преобразования смещённого порядка в несмещённый необходимо из смещённого порядка вычесть двоичное число 1000000 (или 26). В данном случае если из смещённого порядка делимого                    pxсм = 1000101b вычесть 1000000b, то несмещённый порядок делимого px будет равен 0000101b, или десятичному числу 5. Делимое в полулогарифмической форме делимое можно записать как:

X = mx ´ ´ 25 = 11000,10000 = 1 ´ 24 + 1´ ´ 23 + 0 ´ 22 + 0 ´ 21 + 0 ´ 20 + 1 ´ 2-1 + 0 ´ 2-2 + 0 ´ 2-3 + 0 ´ ´ 2-4 + 0 ´ 2-5 = 24,5,

где       mx – нормализованная мантисса делимого;

px =  5 – порядок делимого (несмещённый) в десятичном виде;

S = 2 – основание характеристики для двоичной системы счисления.

Делитель Y = 11,2 в формате числа с плавающей запятой показан на рис. 4.10.

Веса разрядов

26

25

24

23

22

21

20

23

22

21

20

2-1

2-2

2-3

2-4

2-5

2-6

0

1

0

0

0

1

0

0

1

0

1

1

0

0

1

1

0

0

знак

смещенный порядок

мантисса

Рис. 4.10. Делитель Y = 11,2  в формате числа с плавающей запятой

Аналогично сделаем проверку представления делителя:

Y = mY ´ ´ 24 = 1011,001100 = 1 ´ 23  + + 0 ´ 22 + 1 ´ 21 + 1 ´ 20 + 0 ´ 2-1 + 0 ´ 2-2 + 1 ´ 2-3 + 1 ´ 2-4 + 0 ´ 2-5 + + 0 ´ 2-6 » 11,2,

где   mY – нормализованная мантисса делителя;

         pY =  4 – порядок делителя  (несмещённый) в           десятичном виде.

Проверка мантиссы делителя на равенство нулю. Так как старший разряд мантиссы делителя равен единице, то это значит, что делитель не равен нулю.

Проверка мантиссы делимого на равенство нулю. Аналогично проверяем делимое. Так как старший разряд мантиссы делимого равен единице, то это значит, что делимое не равно нулю.

Вычисление смещённого порядка частного. Для вычисления смещённого порядка частного необходимо сложить на сумматоре  смещённый порядок делителя в дополнительном коде (РгА) и смещённый порядок делимого в прямом коде (РгВ). Необходимо учесть, что для сложения порядков используется дополнительно 0 разряд (см. рис. 4.11).

разряды

[0]

[1¸7]

[8¸17]

комментарий

РгА

1

0111100

0000000000

В РгА[1¸7] смещённый порядок делителя в дополнительном коде

РгВ

0

1000101

0000000000

В РгВ[1¸7] смещённый порядок делимого в прямом коде

См.

0

0000001

0000000000

В См[1¸7] порядок частного pz

Рис. 4.11. Вычисление порядка частного

В результате сложения на выходе сумматора См[1¸7] сформирован порядок частного. Проведём анализ значения двух старших разрядов полученного порядка с выход сумматора См[0¸1]. Так как они равны нулю, то получен положительный, не переполненный порядок. Отсутствие переполнения фиксируется триггером Тг1 (Тг1: = 0). В смещенный он преобразуется инверсией первого разряда сумматора См[1]. Итак, смещённый порядок частного в двоичном виде pz.см = 1000001. Результат из См[1¸7] заносится в разряды Сч1[1¸7], а нулевой разряд Сч1[0] обнуляется.

Проверка мантисс делимого и делителя. Необходимо определить разность мантиссы делителя и мантиссы делимого. Для этого просуммируем мантиссу делимого в прямом коде (РгB) с мантиссой делителя в дополнительном коде (РгA). После сложения РгA и РгB на выходе сумматора См[8¸17] формируется разность мантисс делимого и делителя            (см. рис. 4.12).

разряды

[0]

[1¸7]

[8¸17]

комментарий

РгB

0

0000000

1100010000

В РгB[8¸17] мантисса делимого в прямом коде

РгA

1

1111111

0100110100

В РгA[8¸17] мантисса делителя в дополнительном  коде

См.

0

0000000

0001000100

В См[8¸17] разность мантисс

mx  - my

Рис. 4.12. Вычисление разности мантисс делимого и делителя

Так как полученная разность положительна (нулевой разряд сумматора См равен 0), то это значит, что мантисса делимого больше мантиссы делителя. Следовательно, необходимо денормализовать делимое на 1 разряд вправо, то есть сдвинуть мантиссу делимого на 1 разряд вправо. При этом необходимо увеличить на 1 смещённый порядок частного, находящийся в Сч1 (Сч1:=Сч1+1, т.е. смещённый порядок частного в двоичном виде pz.см = 1000010).

Деление мантисс. Деление мантисс оформим в виде таблицы с указанием номеров блоков, использующихся в алгоритме (см. табл. 4.3).

Так как в данном алгоритме деления мантисс мантисса частного mz получается меньше 1, то её можно записать в виде числа с запятой перед старшим разрядом. То есть mz = 0,1000110000b. Смещённый порядок частного, находящийся в разрядах Сч1[1¸7], в двоичном виде pz.см = 1000010 (несмещённый порядок частного в десятичном виде pz = 2).

В полулогарифмической форме можно записать:

Z = ´ 22 = 10,00110000b,

где S = 2 – основание характеристики для двоичной системы счисления.

Формирование окончательного результата. Проведём анализ триггера переполнения Тг1. Так как Тг1=0, то переполнения порядков нет. Далее анализируем значения триггеров знака ТгЗн1 и ТгЗн2. Так как делимое и делитель имеют одинаковые знаки (оба триггера установлены в 0), то частное число положительное (знаковый разряд частного равен 0). Таким образом, частное выглядит так, как показано на рис. 4.13.

Веса разрядов

26

25

24

23

22

21

20

21

20

2-1

2-2

2-3

2-4

2-5

2-6

2-7

2-8

0

1

0

0

0

0

1

0

1

0

0

0

1

1

0

0

0

0

знак

смещенный порядок

мантисса

Рис. 4.13. Частное Z = 2,1875 в формате числа с плавающей запятой

Учитывая веса разрядов мантиссы, преобразуем частное в двоичном виде к десятичному виду:

Z = 1 ´ 21 + 0 ´ 20 + 0 ´ 2-1 + 0 ´ 2-2 + 1 ´ 2-3 + 1 ´ 2-4 + 0 ´ 2-5 + + 0 ´ 2-6 + 0 ´ 2-7 + 0 ´ 2-8 = 2,1875.

      Таблица 4.3. Деление мантисс делимого и делителя

Блок

Частное

Частичный остаток

1

2

3

  зн.  порядок        мантисса

13

 0 0000000 0110001000

19

+

 0 0000000 1100010000

 1 1111111 0100110100

18

22

1

 0 0000000 0001000100

19

+

 0 0000000 0010001000

 1 1111111 0100110100

18

21

10

 1 1111111 0110111100

19

+

 1 1111110 1101111000

 0 0000000 1011001100

17

21

100

 1 1111111 1001000100

19

+

 1 1111111 0010001000

 0 0000000 1011001100

17

21

1000

 1 1111111 1101010100

19

+

+

+

+

+

 1 1111111 1010101000

 0 0000000 1011001100

17

22

10001

 0 0000000 0101110100

19

 0 0000000 1011101000

 1 1111111 0100110100

18

22

100011

 0 0000000 0000011100

19

 0 0000000 0000111000

 1 1111111 0100110100

18

21

1000110

 1 1111111 0101101100

19

 1 1111110 1011011000

 0 0000000 1011001100

17

21

10001100

 1 1111111 0110100100

19

 1 1111110 1101001000

 0 0000000 1011001100

17

21

100011000

 1 1111111 1000010100

19

 1 1111111 0000101000

 0 0000000 1011001100

17

21

1000110000

 1 1111111 1011110100

Примечание:

Делимое  X = 24,5              Рг2 =  0 0000000 0110001000 – в прямом коде

Делитель Y = 11,2              РгА = 0 0000000 1011001100 – в прямом коде

 РгА = 1 1111111 0100110100 – в дополнит. коде

После этапа приёма операндов в Рг2 будет находиться делимое, а в РгА - делитель, считываемый из Рг1 либо в прямом коде (для сложения делителя с частичным остатком), либо в дополнительном коде (для вычитания делителя из частичного остатка).

Список литературы

1.      Дроздов Е. А. и др. Многопрограммные цифровые вычислительные машины. Под ред. проф. А. П. Пятибратова. М., Воениздат, 1974.

2.      Жирков В. Ф., Хартов В. Я. Исследование функциональных узлов ЭВМ. М.: МВТУ. – 1985.

3.      Каган Б. М. Электронные вычислительные машины и системы: Учеб. Пособие для вузов. – М.: Энергия, 1979. – 528 с., ил.

4.      Каган Б. М. Электронные вычислительные машины и системы: Учеб.    Пособие для вузов. – М.: Энергоатомиздат, 1985. – 552 с., ил.

5.      Майоров С. А., Новиков Г. И.  Структура электронных вычислительных машин. – 2-е изд., перераб. и доп. – Л.: Машиностроение. Ленингр. отд-ние, 1979. – 384 с., ил.

6.      Угрюмов Е. П.  Проектирование элементов и узлов ЭВМ: Учебное пособие для спец. ЭВМ вузов. М.: Высшая школа. – 1986.

Содержание

Глава 1.   Форма представления чисел в ЭВМ…………………….3

   1.1. Представление числа в форме

                          с фиксированной запятой………………………….3

               1.2. Представление числа в форме

                          с плавающей запятой……………………………….6

Глава 2.   Арифметико-логические  устройства………………….13

                  2.1. Классификация АЛУ………………………………13

Глава 3.   АЛУ для чисел с фиксированной запятой……………..15

                  3.1. АЛУ для сложения и вычитания

                      чисел с фиксированной запятой……….……...17

               3.2. АЛУ для умножения чисел

                      с фиксированной запятой……………………...21

   3.3. АЛУ для деления чисел

                      с фиксированной запятой……………………...30

               3.4. Алгоритм ускоренного умножения

                      чисел с фиксированной запятой……………...42

Глава 4.   АЛУ для чисел с плавающей запятой ……………49

               Структурная схема

               многофункционального АЛУ …………………….49

               4.1. Алгоритм сложения и вычитания

                      чисел с плавающей запятой…………………..52

               4.2. Алгоритм умножения чисел

                      с плавающей запятой………………………….62

    4.3. Алгоритм деления чисел

                       с плавающей запятой………………………....74

                Список литературы………………………………..88

Практическое пособие

Базарова С. Б-М.,

Чемерисюк А. С.,

Тулохонов Э. А.,

Гомбоев Е. Ш.

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

Редактор Белоплотов А. Е.