Вы находитесь на странице: 1из 166

Арифметические основы ЭВМ

2015 год

() Арифметические основы ЭВМ 2015 год 1 / 148


1 Содержание
2 Системы счисления
3 Представление числовой информации в ЭВМ.
Двоичные числа в форме с фиксированной запятой
4 Алгоритм алгебраического сложения/вычитания в прямом коде
5 Алгоритм алгебраического сложения/вычитания в обратном коде
6 Алгоритм алгебраического сложения/вычитания в дополнительном
коде
7 Арифметико-логические устройства как композиция автоматов
Операционный автомат АЛУ-1
Операционнй автомат АЛУ-R
8 Умножение
9 Деление
10 Арифметические операции в формате с плавающей запятой
Сложение в формате с плавающей запятой
11 Арифметические операции над десятичными числами
12 Машинная арифметика в остаточных классах
Доказательства
Примеры
() Арифметические основы ЭВМ 2015 год 2 / 148
Темы для самостоятельного изучения
(воспоминание о школе)

1. Системы счисления (непозиционные и позиционные).


2. Перевод чисел из одной позиционной системы в другую
(в том числе – дробных и смешанных).
3. Перевод между системами с основаниями 2k .

() Арифметические основы ЭВМ 2015 год 3 / 148


Системы счисления

Система счисления – это правило записи чисел


с помощью заданного набора специальных знаков
– цифр.

Представление целого числа в позиционной системе счисления с


основанием p:
n−1
X
Ap = an−1 · p n−1 + an−2 · p n−2 + . . . + a1 · p 1 + a0 · p 0 = aj · p j
j=0

Из коэффициентов aj при степенях основания строится сокращенная


запись числа:
Ap = (an−1 an−2 . . . a1 a0 ).

() Арифметические основы ЭВМ 2015 год 4 / 148


Позиционная системы счисления

Представление смешанного числа в позиционной системе счисления


с основанием p:

Ap = an−1 · p n−1 + an−2 · p n−2 + . . . + a1 · p 1 + a0 · p 0 +


n−1
X
+a−1 · p −1 + a−2 · p −2 + . . . + a−m · p −m = aj · p j
j=−m

() Арифметические основы ЭВМ 2015 год 5 / 148


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

В этом случае число A представляется n + 1-разрядным двоичным


вектором a0 a1 a2 . . . an , причем используется как беззнаковое
представление чисел («целое без знака»), так и представление чисел
со знаком. В последнем случае знак также кодируется двоичной
цифрой — обычно плюсу соответствует «0», а минусу — «1».
Под код знака отводится старший разряд a0 двоичного вектора,
называемый знаковым.
Запятая может быть фиксирована после любого разряда двоичного
числа, однако чаще всего используются два формата ФЗ: целые
числа, когда запятая фиксируется после младшего разряда an , а
диапазон представления лежит в пределах |A| 6 2n − 1 и дробные
числа — запятая фиксирована после a0 , а диапазон |A| 6 1 − 2−n .
Далее, если не сделано специальных оговорок, будем рассматривать
дробные двоичные числа со знаком, запятая в которых
фиксирована после знакового разряда: a0 , a1 a2 . . . an

() Арифметические основы ЭВМ 2015 год 6 / 148


Прямой код двоичного числа

Очевидно, если двоичное число A = 0, a1 a2 . . . an > 0, то оно будет


представлено как 0, a1 a2 . . . an , а если A = −0, a1 a2 . . . an < 0, то как
1, a1 a2 . . . an .
Приведенное кодирование дробных двоичных чисел со знаком принято
называть прямым кодом числа. Итак,

A, если A > 0;
[A]d = (1)
1 + |A|, если A < 0.

() Арифметические основы ЭВМ 2015 год 7 / 148


Алгоритм алгебраического сложения/вычитания в
прямом коде

Сформулируем правила выполнения операций сложения и вычитания


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

() Арифметические основы ЭВМ 2015 год 8 / 148


Алгебраическое сложение/вычитание в прямом коде

Введем обозначения:
A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
где
a0 , b0 — знаковые разряды слагаемых,
c0 — код знака результата,
ai , bi , ci i ∈ {0, 1, 2, . . . , n} — двоичные переменные.

() Арифметические основы ЭВМ 2015 год 9 / 148


ГСА алгебраического сложения/вычитания
в прямом коде

A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
a0 , b0 — знаковые разряды слагаемых

Переполнение возможно только при


a0 = b0 . В этом случае признаком пе-
реполнения может служить значение
c0 = 1

При вычитании чисел с разными зна-


ками c0 = 1 – признак вычитания из
большего модуля меньшего

() Арифметические основы ЭВМ 2015 год 10 / 148


ГСА алгебраического сложения/вычитания
в прямом коде

A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
a0 , b0 — знаковые разряды слагаемых

Переполнение возможно только при


a0 = b0 . В этом случае признаком пе-
реполнения может служить значение
c0 = 1

При вычитании чисел с разными зна-


ками c0 = 1 – признак вычитания из
большего модуля меньшего

() Арифметические основы ЭВМ 2015 год 10 / 148


ГСА алгебраического сложения/вычитания
в прямом коде

A = a0 , a1 a2 . . . an
B = b0 , b1 a2 . . . bn
C = A + B = c0 , c1 c2 . . . cn ,
a0 , b0 — знаковые разряды слагаемых

Переполнение возможно только при


a0 = b0 . В этом случае признаком пе-
реполнения может служить значение
c0 = 1

При вычитании чисел с разными зна-


ками c0 = 1 – признак вычитания из
большего модуля меньшего

() Арифметические основы ЭВМ 2015 год 10 / 148


Недостатки прямого кода

1) приходится не только складывать, но и вычитать двоичные коды;


2) код знака результата формируется искусственно, т. е. знаковые
разряды обрабатываются по правилам, отличным от правил
обработки разрядов числа.
Для устранения отмеченных недостатков в ЭВМ широко используются
специальные представления двоичных чисел – т. н. обратный и
дополнительный коды.

() Арифметические основы ЭВМ 2015 год 11 / 148


Обратный код

Представление обратного кода определяется следующим


соотношением:

A, если A > 0;
[A]i = (2)
2 + A − 2−n , если A 6 0.

Из (2) следует, что обратный код положительного числа равен самому


числу! Для получения обратного кода отрицательного числа
достаточно присвоить знаковому разряду значение «1» и
проинвертировать все остальные разряды числа:

[−0, a1 a2 . . . an ]i = 1, a1 a2 . . . an (3)

() Арифметические основы ЭВМ 2015 год 12 / 148


Обратный код

Действительно, из (2) следует, что при A = −0, a1 a2 . . . an обратный


код [A]i = 2 + A − 2−n . Откуда [A]i − A = 2 − 2−n

1, a1 a2 . . . an + 0, a1 a2 . . . an = 1, (a1 + a1 )(a2 + a2 ) . . . (an + an ) =

= 1, 11 . . . 1 = 2 − 2−n , учитывая, что (ai + ai ) = 1.

Для перехода из обратного кода в прямой осуществляется следующее


преобразование:
[1, a1 a2 . . . an ]i = 1, a1 a2 . . . an ,
т.е. [[A]i ]i = [A]d .

() Арифметические основы ЭВМ 2015 год 13 / 148


Алгебраическое сложение в обратном коде

Очевидно, что при отсутствии переполнения возможны четыре


случая сочетания знаков и модулей слагаемых:

Случай 1◦ A > 0, B > 0, A + B < 1.


Этот случай соответствует обычному сложению прямых кодов
чисел:
[A > 0]i + [B > 0]i = A + B.
Случай 2◦ A > 0, B < 0, A + B > 0.
[A > 0]i + [B < 0]i = A + 2 + B − 2−n . Назовем этот результат
предварительным. Истинное значение результата в
рассматриваемом случае (сумма положительна) будет A + B.
Следовательно, предварительный результат нуждается в
коррекции путем вычитания 2 и добавления 2−n .

() Арифметические основы ЭВМ 2015 год 14 / 148


Алгебраическое сложение в обратном коде

Случай 3◦ A > 0, B < 0, A + B < 0.


[A > 0]i + [B < 0]i = A + 2 + B − 2−n . Этот результат
соответствует правильному, поскольку рассматривается случай
отрицательной суммы.
Случай 4◦ A < 0, B < 0, |A + B| < 1.
[A < 0]i + [B < 0]i = 2 + A − 2−n + 2 + B − 2−n . Здесь
предварительный результат нуждается в коррекции путем
вычитания 2 и добавления 2−n , как и в случае 2, поскольку
истинное значение отрицательной суммы, представленной в
обратном коде — A + B + 2 − 2−n .

() Арифметические основы ЭВМ 2015 год 15 / 148


Коррекция в обратном коде

Заметим, что в случаях 2 и 4 требуется одинаковая коррекция:


−2 + 2−n , причем только в этих двух случаях возникает перенос из
знакового разряда. Действительно, в случае 4◦ оба знаковых разряда
равны 1, а в случае 2 знак результата — 0, что при разных знаках
слагаемых может получиться только при появлении переноса из
первого разряда в нулевой (знаковый), а, следовательно, обязательно
будет перенос и из знакового разряда. Вес знакового разряда
соответствует 20 , а вес переноса из него — 21 . Таким образом,
игнорируя перенос из знакового разряда, мы вычитаем из результата
2, что соответствует первому члену корректирующего выражения. Для
учета второго члена следует добавить 1 к младшему разряду суммы,
вес которого составляет 2−n .
В случаях 1 и 3 переноса из знакового разряда не возникает и
коррекция результата не требуется.

() Арифметические основы ЭВМ 2015 год 16 / 148


Коррекция в обратном коде

Таким образом, для выполнения алгебраического сложения двоичных


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

() Арифметические основы ЭВМ 2015 год 17 / 148


Пример сложения в обратном коде

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


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

A = +13; B = −3 A + B = +10
Очевидно, на самом деле формат дробного числа предполагает значения
13 3
и − , но знаменатель во всех примерах равен 16; ограничимся только
16 16
упоминанием числителей.

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]i = 1, 1100
1 x 0, 1001
1
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]i = 0, 1010

Приведенный пример соответствует рассмотренному выше случаю 2;


перенос, возникающий в знаковом разряде, циклически
передается в младший разряд предварительного результата
(добавляется).
() Арифметические основы ЭВМ 2015 год 18 / 148
Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]i = 1, 0010


B = +0, 0011 [B]d = 0, 0011 [B]i = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]i = 1, 0101

Коррекции не требуется

() Арифметические основы ЭВМ 2015 год 19 / 148


Сложить два числа в обратном коде (случай 4)

A = −5; B = −6 A + B = −11

A = −0, 0101 [A]d = 1, 0101 [A]i = 1, 1010


B = −0, 0110 [B]d = 1, 0110 [B]i = 1, 1001
1 x 1, 0011
1
C = −0, 1011 ⇐ [C ]d = 1, 1011 ⇐ [C ]i = 1, 0100

Циклическое добавление переноса

() Арифметические основы ЭВМ 2015 год 20 / 148


Сложить два числа в обратном коде (случай 4)

A = −5; B = −6 A + B = −11

A = −0, 0101 [A]d = 1, 0101 [A]i = 1, 1010


B = −0, 0110 [B]d = 1, 0110 [B]i = 1, 1001
1 x 1, 0011
1
C = −0, 1011 ⇐ [C ]d = 1, 1011 ⇐ [C ]i = 1, 0100

Циклическое добавление переноса

() Арифметические основы ЭВМ 2015 год 20 / 148


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

A = −5; B = +5 A + B = −0

A = −0, 0101 [A]d = 1, 0101 [A]i = 1, 1010


B = +0, 0101 [B]d = 0, 0101 [B]i = 0, 0101
C = −0, 0000 ⇐ [C ]d = 1, 0000 ⇐ [C ]i = 1, 1111

Таким образом, ноль в обратном коде бывает «положительный» и


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

() Арифметические основы ЭВМ 2015 год 21 / 148


Добавление отрицательного нуля

A = +3; B = −0 A + B = +3

A = +0, 0011 [A]d = 0, 0011 [A]i = 0, 0011


B = −0, 0000 [B]d = 1, 0000 [B]i = 1, 1111
1 x 0, 0010
1
C = +0, 0011 ⇐ [C ]d = 0, 0011 ⇐ [C ]i = 0, 0011

() Арифметические основы ЭВМ 2015 год 22 / 148


Проблема обнаружения переполнения

Теперь рассмотрим случаи, когда |A + B| > 1, что соответствует


переполнению разрядной сетки.
Очевидно, учитывая, что |A| < 1 и |B| < 1, переполнение возможно
только при сложении чисел с одинаковыми знаками. Рассмотрим
примеры.

A = +13; B = +5 A + B = +18 > 15

A = +0, 1101 [A]d = 0, 1101 [A]i = 0, 1101


B = +0, 0101 [B]d = 0, 0101 [B]i = 0, 0101
C = −0, 1101 ⇐ [C ]d = 1, 1101 ⇐ [C ]i = 1, 0010

() Арифметические основы ЭВМ 2015 год 23 / 148


Проблема обнаружения переполнения

A = −11; B = −8 A + B = −19 |A + B| > 15

A = −0, 1011 [A]d = 1, 1011 [A]i = 1, 0100


B = −0, 1000 [B]d = 1, 1000 [B]i = 1, 0111
1 x 0, 1011
1
C = +0, 1100 ⇐ [C ]d = 0, 1100 ⇐ [C ]i = 0, 1100

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


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

OV = a0 b 0 c0 ∨ a0 b0 c 0 (4)
() Арифметические основы ЭВМ 2015 год 24 / 148
Модуль суммы равен единице

A = +0, 0111 [A]d = 0, 0111 [A]i = 0, 0111


B = +0, 1001 [B]d = 0, 1001 [B]i = 0, 1001
C = −0, 1111 ⇐ [C ]d = 1, 1111 ⇐ [C ]i = 1, 0000

A = −0, 0111 [A]d = 1, 0111 [A]i = 1, 1000


B = −0, 1001 [B]d = 1, 1001 [B]i = 1, 0110
1 x 0, 1110
1
C = +0, 1111 ⇐ [C ]d = 0, 1111 ⇐ [C ]i = 0, 1111

Переполнение в соответствии с 4 обнаруживается и в этих случаях.

() Арифметические основы ЭВМ 2015 год 25 / 148


Выводы - достоинства обратного кода

Итак, использование обратного кода в операциях алгебраического


сложения/вычитания позволяет:
1) использовать только действие арифметического сложения
двоичных кодов;
2) получать истинное значение знака результата, выполняя над
знаковыми разрядами операндов те же действия, что и над
разрядами чисел;
3) обнаруживать переполнение разрядной сетки.
Еще одним достоинством применения обратного кода можно считать
простоту взаимного преобразования прямого и обратного кода.

() Арифметические основы ЭВМ 2015 год 26 / 148


Выводы - недостатки обратного кода

Однако, использование обратного кода имеет один существенный


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

() Арифметические основы ЭВМ 2015 год 27 / 148


Определение дополнительного кода

Связь между числом и его изображением в дополнительном коде


определяется соотношениями (5)

A, если A > 0;
[A]c = (5)
2 + A, если A < 0.

Таким образом, и дополнительный код положительного числа равен


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

() Арифметические основы ЭВМ 2015 год 28 / 148


Дополнительный код
Дополнительный код отрицательного числа образуется в соответствии
со следующим выражением:
[−0, a1 a2 . . . an ]c = 1, a1 a2 . . . an + 2−n = [−0, a1 a2 . . . an ]i + 2−n (6)
Действительно, из (5) следует, что для отрицательного числа
A = −0, a1 a2 . . . an дополнительный код [A]c = 2 + A, откуда
[A]c − A = 2 или [A]c + |A| = 2. Тогда

1, a1 a2 . . . an + 2−n + 0, a1 a2 . . . an =
= 1, (a1 + a1 )(a2 + a2 ) . . . (an + an + 2−n ) = 10, 00 . . . 0 = 2,
учитывая, что (ai + ai ) = 1.
Таким образом, для преобразования отрицательного двоичного числа
в дополнительный код следует преобразовать его сначала в обратный
код (установив знаковый разряд в «1» и проинвертировав все
остальные разряды числа) и добавить единицу к младшему разряду
обратного кода.
() Арифметические основы ЭВМ 2015 год 29 / 148
Преобразовать числа в дополнительный код

Число ПК ОК ДК

+0, 0111 ⇒ [A]d = 0, 0111 ⇒ [A]i = 0, 0111 ⇒ [A]c = 0, 0111

−0, 0111 ⇒ [A]d = 1, 0111 ⇒ [A]i = 1, 1000 ⇒ [A]c = 1, 1001

−0, 1000 ⇒ [A]d = 1, 1000 ⇒ [A]i = 1, 0111 ⇒ [A]c = 1, 1000

−0, 0101 ⇒ [A]d = 1, 0101 ⇒ [A]i = 1, 1010 ⇒ [A]c = 1, 1011

() Арифметические основы ЭВМ 2015 год 30 / 148


Другой способ перевода в дополнительный код

Другой способ преобразования отрицательного числа: оставить все


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

[1, 01101110000]d ⇒ [1, 10010001111]i ⇒ [1, 10010010000]c

() Арифметические основы ЭВМ 2015 год 31 / 148


Алгебраическое сложение в дополнительном коде

Рассмотрим те же четыре случая сочетания знаков и модулей


операндов, что и при рассмотрении сложения в обратном коде:
Случай 1◦ A > 0, B > 0, A + B < 1.
Этот случай соответствует обычному сложению прямых кодов
чисел:
[A > 0]c + [B > 0]c = A + B.
Случай 2◦ A > 0, B < 0, A + B > 0.
[A > 0]c + [B < 0]c = A + 2 + B. Истинное значение результата
в рассматриваемом случае (сумма положительна) будет A + B и
коррекция заключается в вычитании 2.

() Арифметические основы ЭВМ 2015 год 32 / 148


Алгебраическое сложение в дополнительном коде

Случай 3◦ A > 0, B < 0, A + B < 0.


[A > 0]c + [B < 0]c = A + 2 + B. Этот результат соответствует
правильному, поскольку рассматривается случай отрицательной
суммы.
Случай 4◦ A < 0, B < 0, |A + B| < 1.
[A < 0]c + [B < 0]c = 2 + A + 2 + B. Здесь предварительный
результат, как и в случае 2, нуждается в коррекции путем
вычитания 2, поскольку истинное значение отрицательной суммы,
представленной в дополнительном коде — A + B + 2.
Как и в обратном коде, коррекция требуется только в случаях 2 и 4 ,
причем в дополнительном коде коррекция заключается в
игнорировании переноса, возникающего из знакового разряда.

() Арифметические основы ЭВМ 2015 год 33 / 148


Сложение чисел в дополнительном коде (Случай 2)

A = +13; B = −3 A + B = +10

A = +0, 1101 [A]d = 0, 1101 [A]c = 0, 1101


B = −0, 0011 [B]d = 1, 0011 [B]c = 1, 1101
C = +0, 1010 ⇐ [C ]d = 0, 1010 ⇐ [C ]c =6 1 0, 1010

() Арифметические основы ЭВМ 2015 год 34 / 148


Сложение чисел в дополнительном коде (Случай 3)

A = −13; B = +3 A + B = −10

A = −0, 1101 [A]d = 1, 1101 [A]c = 1, 0011


B = +0, 0011 [B]d = 0, 0011 [B]c = 0, 0011
C = −0, 1010 ⇐ [C ]d = 1, 1010 ⇐ [C ]c = 1, 0110

() Арифметические основы ЭВМ 2015 год 35 / 148


Сложение чисел в дополнительном коде (Случай 4)

A = −5; B = −6 A + B = −11

A = −0, 0101 [A]d = 1, 0101 [A]c = 1, 1011


B = −0, 0110 [B]d = 1, 0110 [B]c = 1, 1010
C = −0, 1011 ⇐ [C ]d = 1, 1011 ⇐ [C ]c =6 1 1, 0101

() Арифметические основы ЭВМ 2015 год 36 / 148


Ноль в дополнительном коде

Сложить два числа в дополнительном коде


(одинаковые модули, но разные знаки)

A = −5; B = +5 A+B =0

A = −0, 0101 [A]d = 1, 0101 [A]c = 1, 1011


B = +0, 0101 [B]d = 0, 0101 [B]c = 0, 0101
C = +0, 0000 ⇐ [C ]d = 0, 0000 ⇐ [C ]c =6 1 0, 0000

Из примера видно, что «ноль» в дополнительном коде имеет


единственное «положительное» представление.

() Арифметические основы ЭВМ 2015 год 37 / 148


Как обнаруживается переполнение?

Рассмотрим случаи, когда |A + B| > 1, что соответствует


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

A = +13; B = +5 A + B = +18

A = +0, 1101 [A]d = 0, 1101 [A]c = 0, 1101


B = +0, 0101 [B]d = 0, 0101 [B]c = 0, 0101
C = −0, 1110 ⇐ [C ]d = 1, 1110 ⇐ [C ]c = 1, 0010

() Арифметические основы ЭВМ 2015 год 38 / 148


Как обнаруживается переполнение?

Случай отрицательных слагаемых

A = −11; B = −8 A + B = −19

A = −0, 1011 [A]d = 1, 1011 [A]c = 1, 0101


B = −0, 1000 [B]d = 1, 1000 [B]c = 1, 1000
C = +0, 1101 ⇐ [C ]d = 0, 1101 ⇐ [C ]c =6 1 0, 1101

Очевидно, для дополнительного кода, как и для обратного,


справедливо выражение (4).

() Арифметические основы ЭВМ 2015 год 39 / 148


Особый случай в дополнительном коде

Случай |A + B| = 1. Для положительных слагаемых пример 20 может


относится как к обратным, так и к дополнительным кодам, но
преобразование результата — дополнительного кода в прямой
приведет к другому значению.
Действительно,
[C ]c = 1, 0000 → [C ]i + 1 = 1, 1111 + 1 = 1, 0000 = −0000.
Для случая A < 0, B < 0, |A + B| = 1 имеем следующее

A = −11; B = −5 A + B = −16

A = −0, 1011 [A]d = 1, 1011 [A]c = 1, 0101


B = −0, 0101 [B]d = 1, 0101 [B]c = 1, 1011
C = −0, 0000 ⇐ [C ]d = 1, 0000 ⇐ [C ]c =6 1 1, 0000

Для этого случая переполнение по выражению (4) не обнаружено!


() Арифметические основы ЭВМ 2015 год 40 / 148
Особенности представления дополнительного кода в PC

В кодировке, принятой в ПК, этот случай и не рассматривается как


переполнение. Считается, что это код максимального по модулю
отрицательного числа. Рассмотрим пример для формата «байт со
знаком» в дополнительном коде
1.0000000
-128 1.1111111 0.0000001

-127 -1 0 +1 +127
1.0000001 0.0000000 0.1111111

n-разрядный двоичный вектор – всего 2n кодов (чётное количество)


Один код – под «0», остальные располагаются на числовой оси
несимметрично.
В обратном коде два кода для представления нуля.
В дополнительном коде отрицательных чисел на одно больше, чем
положительных.
() Арифметические основы ЭВМ 2015 год 41 / 148
Алгоритмы алгебраического сложения/вычитания в
обратном и дополнительном кодах

α соответствует выражению (4).


A0 , B 0 - модули слагаемых.
Слева - ГСА сложения/вычитания в обратном
коде для чисел, представленных в прямом коде.
Справа - ГСА сложения/вычитания в
дополнительном коде для чисел, представленных
в дополнительном коде.

() Арифметические основы ЭВМ 2015 год 42 / 148


Подведем итоги

Применение дополнительного кода, по сравнению с обратным, имеет


одно существенное преимущество — коррекция результата сводится
просто к отбрасыванию переноса из знакового разряда и не требует
дополнительных затрат времени.
К недостаткам применения дополнительного кода можно отнести
более сложную процедуру взаимного преобразования ПК⇔ДК,
требующую дополнительных затрат времени.
Для того, чтобы минимизировать влияние этого недостатка, данные в
памяти часто хранят в дополнительном коде. В этом случае
преобразования ПК⇔ДК выполняются относительно редко — только
при вводе и выводе.
Кроме того, (что очень важно!) в процессорах можно использовать
общую команду ADD для обработки как знаковых, так и беззнаковых
данных.

() Арифметические основы ЭВМ 2015 год 43 / 148


Операционное устройство
как композиция автоматов

ОА&УА

() Арифметические основы ЭВМ 2015 год 44 / 148


Операционные автоматы АЛУ-1 и АЛУ-R
После того, как мы рассмотрели процедуру синтеза операционного
автомата по заданному алгоритму, рассмотрим задачу реализации
заданного (разработанного) алгоритма на заданной структуре
операционного автомата АЛУ.
Задача связана с необходимостью «погрузить» разработанный
алгоритм в заданную структуру ОА с фиксированным набором
микроопераций и логических условий.
Здесь необходимо изучить существующую структуру ОА (элементы и
связи), списки микроопераций и логических условий и, если структура
допускает реализацию разработанного алгоритма, постараться
реализовать его в микропрограмме, близкой к оптимальной (что
удаётся не всегда).
Ниже будут рассмотрены два варианта структур ОА АЛУ с различной
организацией — АЛУ-1 и АЛУ-R и реализация на этих структурах двух
простых алгоритмов – арифметического (вычитание ПК-ОК-ОК-ПК) и
«логического» (вычисление расстояния Хэмминга между двоичными
векторами).
() Арифметические основы ЭВМ 2015 год 45 / 148
Операционный автомат АЛУ-1

АЛУ-1

() Арифметические основы ЭВМ 2015 год 46 / 148


Вариант ОА АЛУ с шинной организацией (АЛУ-1)

() Арифметические основы ЭВМ 2015 год 47 / 148


Элементы ОА АЛУ-1

• входные 8-разрядные регистры AX и BX , позволяющие загрузить


исходные операнды;
• 8-разрядные регистры операндов A и B;
• 8-разрядные регистры результатов C и D;
• 8-разрядную шину, роль источников на которую могут играть
регистры Ax , Bx , C , D, а приёмников — A и/или B.
• два 8-разрядных двухвходовых мультиплексора, выбирающих для
входов R и S АЛБ прямые или инверсные значения регистров A и
B соответственно;
• 8-разрядный арифметико-логический блок (АЛБ) с триггерами
входного p0 и выходного p8 переносов (заёмов);

() Арифметические основы ЭВМ 2015 год 48 / 148


Элементы ОА АЛУ-1 (окончание)

• блок сдвигателя, включающий 8-разрядный реверсивный


комбинационный сдвигатель и два триггера DL и DR,
формирующие/принимающие данные слева и справа;
• демультиплексор, передающий значение вектора F [7 : 0] с выхода
блока сдвигателя в один из регистров результата C или D;
• четырёхразрядный двоичный счётчик Cч;
• и некоторые другие элементы.
Для начала выполним арифметическую операцию на структуре ОА
АЛУ-1 «вручную», то есть сами будем формировать
последовательность микрокоманд (устанавливая соответствующие
флажки и нажимая кнопку Шаг ), при этом выбор очередной
микрокоманды должен основываться только на значениях тех
логических условий, которые формирует ОА (красные стрелки).

() Арифметические основы ЭВМ 2015 год 49 / 148


Реализация арифметического алгоритма на структуре
ОА АЛУ-1: вычитание ПК-ОК-ОК-ПК

Попробуем выполнить операцию алгебраического вычитания


C := A − B, причём уменьшаемое A представлено в Ax в прямом коде
(ПК), вычитаемое B в Bx – в обратном коде (ОК), выполнять
операцию следует в ОК, а результат представить в регистре C в ПК. В
триггере DL требуется установить значение признака переполнения
OV .

Очевидно, чтобы свести вычитание к сложению, следует изменить


знак числа B, но, поскольку B по условию уже представлено в ОК,
необходимо инвертировать и знак и модуль числа B. После перевода A
из ПК в ОК, можно выполнить сложение кодов, перевести результат
из ОК в ПК определить значение признака переполнения OV .

() Арифметические основы ЭВМ 2015 год 50 / 148


Алгоритм вычитания ПК-ОК-ОК-ПК

Начало
1
a7 b7
0 Проверка
a7 переполнения 0
Перевод 1 0
A D в AI 1 a7 c7
A := a7.A*
OV := 1 OV := 0
Инверсия
знака и кода B := B
0
c7
Сложение C := A + B Перевод
1
CI в CD
0 C := c7.C*
p8
Коррекция 1
C := C + 1 Конец

A*, C* – модули (разряды 6..0) соответствующих чисел


() Арифметические основы ЭВМ 2015 год 51 / 148
Переход от алгоритма к микропрограмме

Структура ОА АЛУ-1 накладывает определённые ограничения на


реализацию разработанного алгоритма. Так, микрооперации y 5 и y 7
позволяют получить инверсию содержимого регистров A и B
соответственно, при этом инверсия седьмого разряда определяется
предварительной настройкой (флажок в меню Настройки/Инверсия
старшего разряда).

В реализуемом алгоритме при переводах AD → AI и CI → CD


требуется инвертировать только модуль, а при смене знака B – всё
число. Разумеется, в процессе выполнения микропрограммы изменять
значение установленного флага Инверсия старшего разряда нельзя.
Поэтому выберем режим со снятым флагом (по умолчанию флаг
установлен!), а инверсию знака B проведём с помощью какого-нибудь
искусственного приёма. Например, можно сгенерировать в регистре A

код 1000 0000 и выполнить операции: C := A ⊕ b7 .B , B := C , что
будет соответствовать вершине алгоритма B := B.
() Арифметические основы ЭВМ 2015 год 52 / 148
Переход от алгоритма к микропрограмме (продолжение)

Получить в регистре A код 1000 0000 можно, установив триггер DL в


«1» и поместить сдвинутый вправо код 0000 0000 в регистр C , а
потом передать его в A. Чтобы гарантировать на выходе Q АЛБ
значение 0000 0000, можно установить для АЛБ операцию & (y 11), не
подавая на его входы R и S никаких операндов. Поскольку для
инверсии B := B потребуются оба регистра – A и B, следует сначала
загрузить из Bx и проинвертировать B, а затем загружать A из Ax .

В ГСА операции предусмотрено, что после сложения и коррекции


формируется признак переполнения OV , а затем осуществляется
преобразование результата в прямой код. Но в структуре ОА АЛУ-1
знак числа удобнее анализировать в триггере DL, и если там уже будет
установлено значение OV , то при переводе CI → CD оно будет
потеряно. Поэтому следует сначала осуществить перевод CI → CD , а
потом определять значение OV .

() Арифметические основы ЭВМ 2015 год 53 / 148


Переход от алгоритма к микропрограмме (окончание)

И последнее. После получения суммы в C , для её возможной


коррекции и перевода в ПК потребуется в качестве рабочего регистра
использовать один из регистров операндов A или B (лучше A). Но
тогда к моменту начала анализа переполнения один из операндов
будет утрачен, что не позволит проанализировать значение a7 ⊕ b7 .
Поэтому сразу после микрокоманды сложения (или до неё) можно
выполнить действие D := A ⊕ B, поместив в свободный регистр D
вектор неравнозначности разрядов операндов. При анализе
переполнения старший разряд этого вектора соответствует a7 ⊕ b7 и
может быть проанализирован в DL.
На следующем слайде приведён список микрокоманд
(микропрограмма), реализующая алгоритм вычитания.
В микрокомандах, номера которых помечены красным цветом
необходимо осуществлять условный переход по условию, указанному в
примечании. В микрокоманде 19 осуществляется безусловный переход
на микрокоманду 21.
() Арифметические основы ЭВМ 2015 год 54 / 148
Микропрограмма для АЛУ-1

A и B операнды, результат необходимо поместить в регистр С,


признак переполнения OV — в триггер DL.

0 : y1 , y3 , y29 ; Ввод B 11 : y26 , y2 , y15 ;


1 : y11 , y17 , y24 ; 80h → C 12 : y4 , y8 , y16 , y24 ; Корр.
2 : y26 , y2 ; 13 : y26 , y2 ; A := C
3 : y4 , y7 , y13 , y16 , y24 ; 14 : y4 , y32 , y18 ; x 2 → 16
4 : y26 , y3 ; B := B 15 : y5 , y32 , y16 , y24 ; C := a7 .A0
5 : y0 , y2 ; Ввод A 16 : y27 , y2 , y14 ; a7 ⊕ b7 −?
6 : y4 , y32 , y18 ; x2 → 9 17 : y4 , y32 , y18 ; x2 → 20
7 : y5 , y32 , y16 , y24 ; 18 : y26 , y2 ;
8 : y26 , y2 ; А,В - в ОК 19 : y4 , y6 , y13 , y18 ; 1 → 21
9 : y4 , y6 , y13 , y16 , y25 ; a7 ⊕ b7 20 : y28 ; OV := 0
10 : y4 , y6 , y8 , y16 , y24 ; x 1 → 13 21 : y21 ; Стоп

() Арифметические основы ЭВМ 2015 год 55 / 148


А вот задачка другого рода

Расстоянием Хэмминга между двоичными векторами одинаковой


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

Задача: определить расстоянием Хэмминга между 8-разрядными


векторами, заданными в регистрах Ax и Bx .
Очевидно, вес вектора A ⊕ B и будет расстоянием Хэмминга между
векторами A и B.
Для подсчёта несовпадающих компонент вектора следует организовать
цикл, в котором анализируется очередной сдвинутый разряд вектора и
при его единичном значении инкрементируется регистр - счётчик веса,
предварительно обнулённый.

() Арифметические основы ЭВМ 2015 год 56 / 148


Микропрограмма определения расстояния Хэмминга

0 : y 0 , y2 ; Ввод A
1 : y 1 , y3 ; Ввод B
2 : y4 , y6 , y13 , y16 , y24 ; C := A ⊕ B
3 : y26 , y2 ; A := C 1
4 : y11 , y16 , y24 ; Сброс C
5 : y26 , y3 , y22 , y15 ; Сброс счётчика веса B2 , счётч. цикла, p0 := 1
6 : y4 , y32 , y17 , y24 ; Сдвиг A вправо; x 3 → 9
7 : y6 , y8 , y16 , y25 ; D := B + 1
8 : y27 , y3 ; B := D
9 : y26 , y2 , y23 ; A := C ; Inc(Сч.Ц); x 4 → 6
10 : y6 , y12 , y16 , y24 ; C := B
11 : y14 , y22 , y21 ; p0 := 0; Сч.Ц := 0; Стоп

1
Используем регистры A и C для хранения «взвешиваемого вектора»
2
Используем регистры B и D для хранения веса вектора
() Арифметические основы ЭВМ 2015 год 57 / 148
Операционный автомат АЛУ-R

АЛУ-R

() Арифметические основы ЭВМ 2015 год 58 / 148


Вариант ОА АЛУ с двухпортовым регистровым СОЗУ

() Арифметические основы ЭВМ 2015 год 59 / 148


Особенности организации ОА АЛУ-R

Программная модель АЛУ-R отличается от АЛУ-1 прежде всего


организацией управления в операционном автомате. Вместо набора
микроопераций, подаваемых в конкретные точки управления, в ОА
АЛУ-R каждое поле микрокоманды управляет конкретным узлом
структуры: АЛБ, счётчиком, сдвигателем. . .
Кроме того, в ОА вместо пары входных и пары выходных регистров
операндов, предусмотрен регистровый файл (8 восьмиразрядных
регистров), содержащий два выходных порта (A и B) и один входной
(F ). Допускается одновременное чтение содержимого двух любых
регистров на выходные порты, в том числе и чтение одного регистра
на оба порта. Поскольку чтение и запись в регистровый файл
осуществляется по разным фазам такта, возможно в одном такте
осуществлять чтение и запись в регистр. Все регистры файла
равноправны и могут использоваться в микропрограмме
произвольным образом.

() Арифметические основы ЭВМ 2015 год 60 / 148


Примеры разработки микропрограмм на структуре ОА
АЛУ-R

Рассмотрим в ОА АЛУ-R те же примеры, которые ранее были решены


на структуре ОА АЛУ-1:
1) вычитание ПК-ОК-ОК-ПК;
2) определение расстояния Хэмминга между 8-разрядными
двоичными векторами.

() Арифметические основы ЭВМ 2015 год 61 / 148


Отметим некоторые особенности ОА АЛУ-R.

1) Все микрокоманды основного формата содержат три поля адреса


регистров: A, B – адреса операндов бинарных операций, F – адрес
результата. Если выполняется унарная операция, например
Q := R, то содержимое поля другого адреса (B) безразлично.
Но в любой операции результат будет безусловно записан по
адресу F , даже если этот результат не требуется в дальнейшем
использовать. Чтобы не потерять операнды или промежуточные
результаты, будем сбрасывать такие ненужные коды в какой-то
свободный регистр, например в R7.
2) Если требуется записать произвольные значения в триггеры
P0, DR, DL или во флаг OV , следует переключиться на
«всомогательный» формат микрокоманды, для чего в поле СД
управления сдвигателем требуется установить код 111.

() Арифметические основы ЭВМ 2015 год 62 / 148


Обсудим реализацию микропрограммы вычитания
Cd := (Ad − Bi )i
Пусть Ad находится в R0, Bi – в R1, а результат Cd следует
разместить в R2. Регистр R7 используем в качестве рабочего регистра
для «сброса» невостребованных результатов.

Сначала переводим в обратный код содержимое R0, предварительно


проанализировав его знак, далее безусловно инвертируем все разряды
R1.
Потом складываем R1i + R2i и, при необходимости проводим
коррекцию суммы (+1 к младшему разряду суммы, если P8 = 1).
Далее формируем признак переполнения OV, и если OV=0, переводим
полученный результат в прямой код.

На следующем слайде приведена микропрограмма этой операции. Синим


выделены микрокоманды дополнительного формата, а красным – условие и
адрес перехода.
() Арифметические основы ЭВМ 2015 год 63 / 148
Микропрограмма вычитания ПК-ОК-ОК-ПК для АЛУ-R
Начало

0
a7
1
№ A B F !a !b АЛБ Сдв. Приме-
A := a7.A* МК OV P0 DL DR – – 111 чание
B := B 0 R0 R1 R7 A B R L x2 → 2
C := A + B
1 R0 R1 R0 !a B R Q
0
2 R0 R1 R1 A !B S Q
p8
3 R0 R1 R2 A B ADD Q x1 → 6
1
C := C + 1 4 OV 1 DL DR - - C
5 R2 R1 R2 A 0 ADD Q
1
a7 b7
6 R0 R1 R7 A B XOR L x2 → 10
0
1
a7 c7
0 7 R0 R2 R7 A B XOR L x 2 → 10
8 1 P8 DL DR - - C 1 → 12
OV := 1 OV := 0
9 0 P8 DL DR - - C
0
c7 10 R2 R1 R7 A B R L x 2 → 12
1 11 R2 R1 R2 !a B R Q
C := c7.C*
12 R2 R2 R2 A B AND Q End
Конец

() Арифметические основы ЭВМ 2015 год 64 / 148


Микрокоманды АЛУ-R для сложения в прямом коде
Самостоятельно рассмотрите микропрограмму сложения чисел в прямом
коде (ПК-ПК-ПК-ПК). Дополните её информацией об условных переходах по
микропрограмме.

Номер A B F !a !b АЛБ Сдв.


Сч.
МК OV P0 DL DR – – 111
0 R0 R1 R7 A B XOR L Ch
1 R0 R1 R2 A B ADD L Ch
2 1 P8 DL DR - - C Ch
3 R0 R1 R2 A B SUBA L Ch
4 R0 R1 R2 A B SUBB L Ch
5 R1 R1 R7 A B R L Ch
6 R0 R1 R7 A B R L Ch
7 R2 R1 R2 A B R R Ch
8 0 P8 DL DR - - C Ch
9 R2 R1 R7 A B R Q Ch

() Арифметические основы ЭВМ 2015 год 65 / 148


Определим расстояние Хэмминга между двоичными
векторами

Исходные вектора – в регистрах R0 и R1, в R2 – R0 ⊕ R1, в R3 – вес


вектора R0 ⊕ R1, равный расстоянию Хэмминга между содержимым
R0 и R1.
Вес вектора можно определить, сдвигая код, например, влево и
подсчитывая количество единиц, появляющихся после сдвига в DL.
Количество сдвигов – 8.

Характерно, что в АЛУ-R установленный разряд P0 самостоятельно


сбрасывается после выполнения микрокоманды. Это можно было бы
рассматривать как ошибку проектирования модели, но раз мы не
можем (пока?) её исправить, следует учитывать эту особенность при
разработке микропрограмм.

() Арифметические основы ЭВМ 2015 год 66 / 148


Микропрограмма вычисления расстояние Хэмминга
для АЛУ-R

№ A B F !a !b АЛБ Сдв.
Сч. Примечание
МК OV P0 DL DR – – 111
0 R3 R3 R3 0 0 AND Q 0 R3:=0; Сч:=0
1 R0 R1 R2 A B XOR Q Ch R2 := R0 ⊕ R1
2 OV 1 DL DR - - C Ch P0:=1
3 R2 R2 R2 A B R L Ch L1(R2); x 2 → 5
4 R3 R3 R3 A 0 ADD Q Ch R3:=R3+1
5 R7 R7 R7 0 0 AND Q Inc Сч+1; x 4 → 2

Обратите внимание, управление в микрокоманде 5 передаётся на


микрокоманду 2, а не 3, учитывая отмеченную выше особенность
поведения триггера P0.

() Арифметические основы ЭВМ 2015 год 67 / 148


Умножение

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


прямом коде. Действительно, знак произведения не зависит от
соотношения величин модулей сомножителей, а зависит только от их
знаков:
c0 = a0 ⊕ b0 = a0 b0 ∨ a0 b 0 , (7)
а модуль произведения равен произведению модулей сомножителей.

() Арифметические основы ЭВМ 2015 год 68 / 148


Умножение модулей

Обозначим A0 , B 0 , C 0 — модули сомножителей и произведения


соответственно. Тогда

C 0 = A0 · B 0 =
A0 (b1 · 2−1 + b2 · 2−2 + . . . + bn · 2−n ) =
A0 bn · 2−n + A0 bn−1 · 2−(n−1) + . . . + A0 b2 · 2−2 + A0 b1 · 2−1 =
(A0 bn · 2−(n−1) + A0 bn−1 · 2−(n−2) + . . . + A0 b2 · 2−1 + A0 b1 ) · 2−1 =
((A0 bn · 2−(n−2) + A0 bn−1 · 2−(n−3) + . . . + A0 b2 ) · 2−1 + A0 b1 ) · 2−1 =
....................................................................
((. . . (0 + A0 bn ) · 2−1 + A0 bn−1 ) · 2−1 + . . . + A0 b2 ) · 2−1 + A0 b1 ) · 2−1
(8)

() Арифметические основы ЭВМ 2015 год 69 / 148


Умножение

Выражение (8) определяет процесс формирования произведения


путем вычисления частичных сумм и суммы частичных произведений.
Напомним, что b1 — старший разряд множителя, а bn — младший.
Вычисляя непосредственно по формуле (8), следует на каждом шаге:
1) проанализировать очередную цифру множителя bi . Если bi = 1,
то очередная частичная сумма равна A0 и она добавляется к
накопленной ранее сумме частичных произведений Σ (на первом
шаге Σ = 0), иначе добавления не производится;
2) умножение Σ · 2−1 соответствует делению на 2, что в двоичной
системе счисление равносильно сдвигу числа на один разряд
вправо;
3) пункты 1 и 2 повторяются до тех пор, пока не будут исчерпаны
все цифры множителя.
Очевидно, число шагов при использовании приведенного выше метода
равно разрядности модуля множителя.
() Арифметические основы ЭВМ 2015 год 70 / 148
ГСА умножения
В результате вычисления по формуле (8)
получается произведение разрядностью 2n − 1.
Если рассматривать сомножители как дроби, то
младшие n − 1 разрядов можно просто отбросить
(округление с недостатком) или округлить до
n-разрядного модуля по правилам округления.
Очевидно, из выражения (8) легко получить

C 0 = A0 ·B 0 = ((. . . (0+2−n ·A0 b1 )·2+2−n ·A0 b2 )·2+

+ . . . + 2−n · A0 bn−1 ) · 2 + 2−n · A0 b−n


что позволяет производить умножение начиная
со старших разрядов множителя. При этом сдвиг
суммы частичных произведений осуществляется
влево на один разряд, чему соответствует
умножение двоичного числа на 2.
() Арифметические основы ЭВМ 2015 год 71 / 148
Умножение в дополнительном коде

Умножение в ДК, как и сложение, предполагает различные варианты


коррекции при определённом сочетании знаков операндов.
Существуют различные методы коррекции произведения в
дополнительном коде. Рассмотрим один из методов, на мой взгляд,
наиболее легко реализуемый.
Итак,
A – n-разрядное множимое, представленное в ДК (старший
разряд кодирует знак);
B – n-разрядный множитель в том же формате;
C – 2n-разрядное произведение со знаком в ДК;
СЧП – сумма частичных произведений, в начале операции
СЧП = 0;
Умножение осуществляется с анализом разрядов множителя по
одному, начиная с младшего и сдвигом СЧП вправо.

() Арифметические основы ЭВМ 2015 год 72 / 148


Умножение в дополнительном коде - коррекция

Очевидно, если A > 0 и B > 0, то коррекции не требуется.


Если A < 0, то коррекция осуществляется путём т.н.
модифицированного правого сдвига СЧП, при котором
освобождающиеся старшие разряды СЧП заполняются не нулями, а
единицами.
Очевидно, при A > 0 сдвиг СЧП выполняется с заполнением старшего
разряда нулём. Кроме того, при A < 0 и наличии группы младших
нулей множителя сдвиг СЧП при умножении на эти разряды должен
выполняться как обыкновенный (с заполнением старшего разряда
нулём).
Учитывая сказанное, можно трактовать модифицированный сдвиг при
умножении в ДК следующим образом:
При правом сдвиге СЧП старший (знаковый) разряд сдвигается
вправо и одновременно сохраняет своё значение. (*)
Это правило сдвига может применяться всегда, при любом сочетании
знаков сомножителей и значении разрядов множителя.
() Арифметические основы ЭВМ 2015 год 73 / 148
Умножение в дополнительном коде - коррекция

При B < 0 следует после умножения на все разряды множителя,


включая знаковый, вычесть из старших n разрядов СЧП множимое A
или (что гораздо удобнее) добавить к этим разрядам СЧП
дополнительный код множимого, изменив его знак: [−A]c .

Наконец, при A < 0 и B < 0 выполняется как модифицированный


сдвиг СЧП, так и добавление [−A]c в конце операции.

Кстати, о модифицированном сдвиге в определении (*) можно


«вообще не думать» – он при умножении в ДК выполняется всегда,
даже при A > 0 и B > 0.

Рассмотрим примеры умножения двоичных чисел в ДК при разном


сочетании знаков.

() Арифметические основы ЭВМ 2015 год 74 / 148


Пример умножения в ДК: (+5) × (+5) = +25

() Арифметические основы ЭВМ 2015 год 75 / 148


Пример умножения в ДК: (−5) × (+5) = −25

() Арифметические основы ЭВМ 2015 год 76 / 148


Пример умножения в ДК: (+5) × (−5) = −25

() Арифметические основы ЭВМ 2015 год 77 / 148


Пример умножения в ДК: (−5) × (−5) = +25

() Арифметические основы ЭВМ 2015 год 78 / 148


Пример умножения в ДК: (−5) × (+4) = −20
Младшие нули множителя при отрицательном множимом вызывают
сдвиги нулей.

Модифицированный правый сдвиг копирует знаковый разряд суммы


частичных произведений в старший разряд модуля и сохраняет
значение знакового разряда
() Арифметические основы ЭВМ 2015 год 79 / 148
Методы ускорения умножения

Методы ускорения умножения принято делить на аппаратные и


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

При использовании аппаратных методов дополнительные затраты


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

Дополнительные затраты оборудования при реализации логических


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

() Арифметические основы ЭВМ 2015 год 80 / 148


Разновидности аппаратных методов
ускорения умножения

К аппаратным методам ускорения умножения относятся:


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

() Арифметические основы ЭВМ 2015 год 81 / 148


Умножитель на многовходовом сумматоре

() Арифметические основы ЭВМ 2015 год 82 / 148


Табличный умножитель

Метод табличного умножения позволяет получить произведение за


один такт при условии, что вся таблица умножения (результаты
умножения всевозможных пар n–разрядных сомножителей!) будет
размещена в памяти.
Очевидно, для этого понадобится запоминающее устройство объёмом
22n 2n–разрядных слов

Разрядность Количество Разрядность Объём


операндов слов ЗУ ЗУ (бит) ЗУ (байт)
8 65536 16 217
16 232 32 234
32 264 64 267

() Арифметические основы ЭВМ 2015 год 83 / 148


Табличное умножение

() Арифметические основы ЭВМ 2015 год 84 / 148


Табличное умножение

Операнды большой разрядности можно разбить на фрагменты и


использовать таблицы умножения для этих фрагментов.
Пусть n – чётное. Тогда каждый из двух сомножителей можно
представить конкатенацией двух полей одинаковой разрядности n2 :
A = Ah Al , B = Bh Bl .
В этом случае произведение можно представить следующим
выражением:
n n
A × B = Al · Bl + 2 2 · Ah · Bl + 2 2 · Al · Bh + 2n · Ah · Bh

() Арифметические основы ЭВМ 2015 год 85 / 148


Умножение четырёхразрядных чисел по таблице 2 × 2

Проиллюстрируем этот метод на простом примере. Пусть требуется


перемножать 4–разрядные числа без знака.
Построим таблицу умножения 2 × 2 (без нулевых сомножителей и пар,
симметричных уже включённым)

01 × 01 = 0001 10 × 10 = 0100
01 × 10 = 0010 10 × 11 = 0110
01 × 11 = 0011 11 × 11 = 1001

() Арифметические основы ЭВМ 2015 год 86 / 148


Пример умножения 6 × 10 = 60

В двоичном коде:

|{z} 10 × |{z}
01 |{z} 10 |{z}
10 = 00111100
Ah Al Bh Bl

Al × Bl = 10 × 10 = 0100 Al × Bh = 10 × 10 = 0100
Ah × Bl = 01 × 10 = 0010 Ah × Bh = 01 × 10 = 0010

01 00
+ 01 00
00 10
00 10
00 11 11 00

() Арифметические основы ЭВМ 2015 год 87 / 148


Пример умножения 7 × 11 = 77

В двоичном коде:

|{z} 11 × |{z}
01 |{z} 10 |{z}
11 = 01001101
Ah Al Bh Bl

Al × Bl = 11 × 11 = 1001 Al × Bh = 11 × 10 = 0110
Ah × Bl = 01 × 11 = 0011 Ah × Bh = 01 × 10 = 0010

10 01
+ 01 10
00 11
00 10
01 00 11 01

() Арифметические основы ЭВМ 2015 год 88 / 148


Логические методы ускорения умножения

Среди логических наиболее распространены в настоящее время


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

Комбинация Действие Добавлено


00 Сдвиг — Сдвиг 0
01 Сложение — Сдвиг — Сдвиг A
10 Сдвиг — Сложение — Сдвиг 2A
11 Сложение — Сдвиг — Сложение — Сдвиг 3A = 4A − A

() Арифметические основы ЭВМ 2015 год 89 / 148


Умножение на пару разрядов множителя

Таким образом, для умножения сразу на два разряда множителя


достаточно:
• при 00 просто произвести сдвиг на два разряда;
• при 01 прибавить к сумме частичных произведений множимое и
произвести сдвиг на два разряда;
• при 10 прибавить к сумме частичных произведений удвоенное
множимое и произвести сдвиг на два разряда;
• при 11 вычесть из суммы частичных произведений множимое
(Или добавить обратный (дополнительный) код множимого),
произвести сдвиг на два разряда и добавить 1 к следующей
(старшей) паре цифр множителя;

() Арифметические основы ЭВМ 2015 год 90 / 148


Ускоренное умножение модулей

i:= n

C:= 0

p:= 0

нет нет нет


b[i-1,i]=00 b[i-1,i]=01 b[i-1,i]=10
да да да

1 0 1 0 1 0
p p p p
0 1

C:= C + A C:= C + 2A C:= C - A

p:= 0 p:= 1

C:= R2(C)

i :=i+2

да
i>0
нет

OV := 0

() Арифметические основы ЭВМ 2015 год 91 / 148


Алгоритмы деления

Делим модули:
22 : 7 22 − 7 − 7 − 7 − 7(< 0) + 7 ⇒ 3 Частное:
10 − 7 − 7(< 0) + 7 ⇒ 1 3, 1 . . .
30 − 7 . . .

() Арифметические основы ЭВМ 2015 год 92 / 148


Деление двоичных чисел

Пусть A – делимое, B – делитель, C – частное, W – остаток.

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


очевидно, должно соблюдаться условие |A| < |B|.

Процесс деления двоичных чисел может быть сведен к


последовательности вычитаний и анализа знаков получающихся
остатков.

Сформулируем словесный алгоритм двоичного деления чисел


(модулей) в формате с фиксированной запятой следующим образом:

() Арифметические основы ЭВМ 2015 год 93 / 148


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

Шаг 1◦ : вычесть из делимого делитель. Если знак разности «0», то


деление невозможно так как |C | > 1 и следует, установив OV = 1,
завершить операцию; иначе в разряд целой части частного
записывают «0» (в конце операции в этот разряд помещается
знак частного);
Шаг 2◦ : т. к. остаток (разность A − B) оказался отрицательным,
восстанавливают остаток путем добавления делителя к остатку;
Шаг 3◦ : сдвигают восстановленный остаток влево на один разряд;
Шаг 4◦ : вычитают из сдвинутого остатка делитель; если полученная
разность положительна, то очередной цифрой частного
становится «1» и следует перейти к шагу 3◦ ; иначе очередная
цифра частного – «0» и переходят к шагу 2◦ ;
Шаги [2◦ ], 3◦ , 4◦ повторяют столько раз, сколько цифр требуется
получить в частном.
() Арифметические основы ЭВМ 2015 год 94 / 148
Пример деления: 3/16 : 12/16 = 1/4 = 4/16
Делим модули .0011 : .1100 = 0.010. . .

() Арифметические основы ЭВМ 2015 год 95 / 148


Методы деления

Рассмотренный метод деления называется методом деления с


восстановлением остатка. При получении отрицательного остатка
на очередном шаге деления необходимо перед левым сдвигом
восстановить остаток путем добавления к нему делителя.
При этом для получения n–разрядного частного требуется в среднем
1, 5 · n циклов сложения/вычитания.

Существует алгоритм деления без восстановления остатка,


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

() Арифметические основы ЭВМ 2015 год 96 / 148


Деление без восстановленя остатка

Номер
Действие W >0 W <0
шага
2◦ Восстановление остатка Нет W +B
3◦ Сдвиг влево 2W 2(W + B)
2(W + B) − B =
4◦ Вычитание делителя 2W − B
= 2W + B

Видно, что если на очередном шаге остаток получился


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

() Арифметические основы ЭВМ 2015 год 97 / 148


Тот же пример деления: 3/16 : 12/16 = 1/4 = 4/16
методом без восстановления остатка

частное
0.0100... 0011
- вычитание
1100
1.0111 сдвиг
0.11 10
+ сложение
1100
1.1010
сдвиг
1.0100 сложение
+
1100
0.0000 сдвиг
- 0.01100
000
вычитание
1.0100 сдвиг
0.1000
+ сложение
1100
1.0100 и так далее

() Арифметические основы ЭВМ 2015 год 98 / 148


0101

1000
0,← 1 1 1 0 1.
1 1010
+
1000
1← 0 0 0 1 0.
0 0100

Ещё один пример деления: 1000
5/16 : 8/16 = 5/8 = 10/16 0← 1 1 1 0 0.
1 1000
+
1000
1← 0 0 0 0 0.
0 0000
Синие цифры — частное, сверху – вниз, –
1000
начиная со старших разрядов. 0← 1 1 0 0 0.
1 0000
+
1000
0← 1 1 0 0 0.
1 0000
+
1000

() Арифметические основы ЭВМ 2015 год 99 / 148


Ну, и наконец ГСА деления без восстановления остатка

Íà÷àëî

äà íåò
a0= b0

s:= 0 s:= 1
A, B - делимое и делитель со знаками,
a0:= 0

b0:= 0
C - остаток,
C:= A-B D - текущее значение частного,
0
ñ0
1
s - переменная, в которой хранится знак
OV:= 0 OV:= 1

n:= 16
частного: s := a0 ⊕ b0 .
A:= C OV - признак переполнения,
A:= L1(A)

0 ñ0 1
n - разрядность операндов.
D[15]:= 1 D[15]:= 0 В конце операции результат перемещается
C:= A-B C:= A+B
в C (традиция!) и в его знаковый разряд
D:= L1(D)

n:= n-1
записывается значение знака частного:
íåò
n=0 c0 := s.
äà
C:= D

c0:= s

Êîíåö

() Арифметические основы ЭВМ 2015 год 100 / 148


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

В таком формате число определяется значениями мантиссы и порядка:

N = m · qp , (9)

где m — мантисса числа;


p — порядок;
q — основание.
Мантисса и порядок могут иметь свои знаки, причем знак мантиссы
соответствует знаку числа. Основание q может не совпадать с
основанием системы счисления.
При операциях с двоичными числами иногда для расширения
диапазона представления чисел выбирают q = 2k , например, q = 16.

() Арифметические основы ЭВМ 2015 год 101 / 148


Формат числа ПЗ

В машинном представлении формат числа с плавающей запятой


задается двумя полями — полем мантиссы m и полем порядка p,
причем каждое поле имеет свой разряд знака. Значение порядка в
формате числа не указывается — оно подразумевается одинаковым
для всех чисел.
0 1 k 0 1 s
Çí. Çí.
p m
p
, m
,
Мантисса и порядок представляются в формате с фиксированной
запятой, причем обычно порядок — целое число со знаком (запятая
фиксирована после младшего разряда), а мантисса — правильная
дробь (запятая фиксирована между знаковым разрядом и старшим
разрядом модуля).

() Арифметические основы ЭВМ 2015 год 102 / 148


Точность представления числа ПЗ

С целью увеличения точности представления числа в заданном


формате (точность определяется числом значащих разрядов
мантиссы) мантиссу представляют в нормализованной форме, когда
старший разряд модуля мантиссы — не ноль3 .
Действительно,
0, 2364 · 104 ≈ 0, 0024 · 106 ,
однако в последнем случае мантисса не нормализована и точность
представления числа — всего два десятичных разряда.

3
Для прямых кодов числа.
() Арифметические основы ЭВМ 2015 год 103 / 148
Алгебраическое сложение

Ранее мы договорились, что алгебраическое вычитание легко свести к


алгебраическому сложению путем замены знака второго операнда.
Поэтому рассмотрим процесс алгебраического сложения.
Для уяснения принципа выполнения сложения ПЗ рассмотрим пример
в десятичной системе.
Сложить два числа, представленные в формате с плавающей запятой:
A = 0, 315290 · 10−2 , B = 0, 114082 · 10+2 .
Обратите внимание, мантиссы чисел нормализованы. Очевидно,
прежде, чем складывать мантиссы, требуется преобразовать числа
таким образом, чтобы они имели одинаковые порядки. Это можно
выполнить двумя способами — уменьшением большего порядка до
меньшего или увеличением меньшего до большего.

() Арифметические основы ЭВМ 2015 год 104 / 148


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

A= 0,315290 ·10−2 A= 0,000031 5290 ·10+2


1) B= 114 0,820000 ·10−2 2) B= 0,114082 ·10+2
C= ?? 1,135290 ·10−2 C= 0,114113 ·10+2

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


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

() Арифметические основы ЭВМ 2015 год 105 / 148


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

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


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

A = 0, 96502 · 10+2 A = 0, 96502 · 10+2


B = 0, 73005 · 10+1 B = 0, 07300 · 10+2
C = 1, 03802 · 10+2 – Переполнение мантисс!
C = 0, 10380 · 10+3 – Правильный результат

Однако, если в результате этого добавления произойдет переполнение


разрядной сетки порядков, то результат окажется неверным —
OV := 1.
() Арифметические основы ЭВМ 2015 год 106 / 148
Нормализация
В результате алгебраического сложения мантисс результат может
оказаться не нормализованным. Для нормализации результата
необходимо сдвигать мантиссу результата влево до тех пор, пока в
старшем значащем разряде не окажется цифра, отличная от «0» (в
двоичной системе это «1»), сопровождая каждый сдвиг уменьшением
на «1» порядка результата. Этот процесс называется нормализацией
результата.
A = 0, 24512 · 10−8
B = −0, 24392 · 10−8
C = 0, 00120 · 10−8 = 0, 12000 · 10−10
В процессе уменьшения порядка при нормализации может оказаться,
что порядок превысил по модулю максимальную величину,
размещаемую в поле порядка. Этот случай принято называть
«отрицательным переполнением». Его можно избежать, оставив
результат ненормализованным, однако принято считать, что сохранять
ненормализованный результат в памяти недопустимо.
() Арифметические основы ЭВМ 2015 год 107 / 148
Двоичное сложение чисел ПЗ
Итак, процедура алгебраического сложения чисел с плавающей
запятой складывается из следующих этапов:
1) выравнивание порядков;
2) алгебраическое сложение мантисс как чисел с фиксированной
запятой;
3) нормализация результата.
Алгоритм операции сложения с плавающей запятой представлен на
рис. 6. Первая часть алгоритма — выравнивание порядков,
представлена достаточно подробно, хотя можно предложить несколько
различных способов реализации этой процедуры (в зависимости от
способа кодирования порядков).
Алгоритм алгебраического сложения мантисс как чисел с
фиксированной запятой подробно обсуждался ранее, поэтому в
рассматриваемом алгоритме он представлен одним блоком.
Нормализация результата приведена для случая представления чисел
в прямом коде.
() Арифметические основы ЭВМ 2015 год 108 / 148
Íà÷àëî

q' - модуль разности порядков

L - длина поля порядка

Âûðàâíèâàíèå ïîðÿäêîâ
Àëãåáðàè÷åñêîå
ñëîæåíèå/âû÷èòàíèå
Ôîðìèðóåòñÿ
ìàíòèññ
mc è OVm
êàê ÷èñåë ÔÇ
Óñòðàíåíèå ïåðåïîëíåíèÿ

Íîðìàëèçàöèÿ ðåçóëüòàòà
ìàíòèññ

Êîíåö

() Арифметические основы ЭВМ 2015 год 109 / 148


Умножение и деление чисел с плавающей запятой

Введём обозначения:

A = mA · q pA ; B = mB · q pB ; C = mC · q pC ; D = mD · q pD .

Тогда результаты операций умножения и деления могут быть


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

C = A × B = (mA × mB ) · q pA +pB ; mC = mA × mB ; pC = pA + pB .

A mA pA −pB mA
D= = ·q ; mD = ; pD = pA − pB .
B mB mB
Таким образом, умножение или деление чисел с плавающей запятой
сводится к паре операций над числами с фиксированной запятой.

() Арифметические основы ЭВМ 2015 год 110 / 148


Особенности форматов с плавающей запятой в х86

В формате х86 принято использовать мантиссу, нормализованную в


диапазоне 2 > m ≥ 1, причём целая часть мантиссы, которая всегда
равна «1», не хранится в формате, а лишь подразумевается, а на её
месте располагается знак числа (мантиссы).
Формат числа с плавающей запятой в х86 может занимать 32, 64 или
80 двоичных разрядов. Порядок в этих форматах занимает
соответственно 8, 11 и 15 разрядов.
Формат 32-разрядного числа с плавающей запятой:
31 30 23 22 0

Знак Характеристика Мантисса

() Арифметические основы ЭВМ 2015 год 111 / 148


Особенности форматов с плавающей запятой в х86

Характеристика числа отличается от его порядка положительным


смещением, позволяющим представить все отрицательные числа в
заданном диапазоне как положительные или ноль.
Так, если под порядок отведено 8 разрядов, то максимальный
положительный порядок может быть p = 01111111(2) = +127(10) , а
отрицательный (в прямом коде) p = 11111111(2) = −127(10) .
Значение характеристики вычисляется по формуле:

h = p + 127

Для 64- и 80-разрядных форматов смещение составляет


соответственно 1023(10) = 3FF(16) и 16 386(10) = 3FFF(16) .
Мантисса представляется в формате с плавающей запятой
в прямом коде.

() Арифметические основы ЭВМ 2015 год 112 / 148


Десятичная арифметика

При использовании в ЭВМ десятичные цифры кодируются группой


двоичных разрядов. Учитывая, что

log2 10 ≈ 3, 32 (10)

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


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

() Арифметические основы ЭВМ 2015 год 113 / 148


Кодирование десятичных цифр

Основной недостаток кодирования десятичных цифр в коде «8421»


состоит в несоответствии веса десятичного и шестнадцатиричного
переносов. Действительно, перенос из тетрады шестнадцатиричной
цифры имеет вес 16, а десятичный перенос — 10.

Для устранения этого противоречия можно выбрать другие способы


кодирования десятичных цифр. Например, код «8421+3» (иногда его
называют код с избытком три) позволяет при сложении получать
сумму «с избытком 6», при этом вес переноса соответствует
десятичному.

() Арифметические основы ЭВМ 2015 год 114 / 148


Кодирование десятичных цифр

Можно подобрать такие веса двоичных разрядов при кодировании


десятичных цифр, чтобы их сумма равнялась 10. Например, код
«5211» обладает именно таким свойством.

При этом, однако, нарушается свойство функциональности


соответствия десятичных цифр и их двоичного представления.
Например, цифра 7 может быть представлена как 1100 или как 1011.
Для преодоления этого недостатка достаточно договориться, чтобы в
подобных ситуациях всегда сначала заполнялись младшие разряды
кода.

() Арифметические основы ЭВМ 2015 год 115 / 148


Некоторые десятичные коды

Цифры 8421 8421+3 5211


0 0000 0011 0000
1 0001 0100 0001
2 0010 0101 0011
3 0011 0110 0101
4 0100 0111 0111
5 0101 1000 1000
6 0110 1001 1001
7 0111 1010 1011
8 1000 1011 1101
9 1001 1100 1111

() Арифметические основы ЭВМ 2015 год 116 / 148


Арифметические операции над десятичными числами

Арифметические операции над десятичными числами можно


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

() Арифметические основы ЭВМ 2015 год 117 / 148


Сложение в коде «8421»

Рассмотрим выполнение операции сложения десятичных чисел


в коде «8421» по правилам двоичной арифметики.

A = 4754 = 0100 0111 0101 0100


B = 2917 = 0010 1001 0001 0111
C = 7671 = 0111 x 0000 0110 1011
7 0 6 11

Из рассмотренного примера видно, что тетрады результата (назовем


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

() Арифметические основы ЭВМ 2015 год 118 / 148


Сложение в коде «8421»

Введём обозначения:
a, b – десятичные цифры операндов,
c – десятичная цифра результата,
p – входной перенос/заём,
q – выходной десятичный перенос/заём.
Выделим три случая формирования суммы в тетраде (десятичной
цифре):
Случай 1◦ a + b + p < 10 – имеем истинное значение и q = 0;
Случай 2◦ 9 < a + b + p < 16 – перенос не формируется,
необходима коррекция! c := c+6 > 15 Возникающий при
коррекции перенос «уносит» из тетрады 16, вес q – 10 и 6 –
компенсирует коррекцию.
Случай 3◦ a + b + p > 15 – перенос «уносит» из тетрады 16, а
надо – 10. Необходима коррекция: c := c+6
() Арифметические основы ЭВМ 2015 год 119 / 148
Сложение в коде «8421»

Действительно, если сумма тетрад, представляющих соответствующие


десятичные разряды слагаемых, превышает 9, но не превышает 15,
двоичный перенос в следующую тетраду не формируется. В этом
случае требуется выработать искусственный перенос и удалить из
тетрады 10, что соответствует добавлении шестерки (0110) и передаче
обязательно возникающего при этом переноса в следующий старший
разряд.

Если из тетрады был двоичный перенос (в примере он отмечен знаком


x), то он «унес» из тетрады 16, в то время как десятичный перенос
должен «уносить» только 10. Следовательно, в такие тетрады, из
которых был перенос, следует добавить шестерку (0110).

() Арифметические основы ЭВМ 2015 год 120 / 148


Сложение в коде «8421»

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


использовании кода «8421» заключается в добавлении кода 0110 ко
всем тетрадам предварительной суммы, значение которых превышает
9 или из которых был двоичный перенос. Возникающие при коррекции
переносы должны обязательно передаваться в следующую старшую
тетраду.

() Арифметические основы ЭВМ 2015 год 121 / 148


Коррекция результата

A = 4754 = 0100 0111 0101 0100


B = 2917 = 0010 1001 0001 0111
C = 7671 = 0111 x0000 0110 1011
0110 0110
0111 0110 0111 x0001
7 6 7 1

() Арифметические основы ЭВМ 2015 год 122 / 148


Еще один пример сложения

A = 3852 = 0011 1000 0101 0010


B = 5179 = 0101 0001 0111 1001
C = 9031 = 1000 1001 1100 1011
0110 0110
1000 0101 x0011 x0001
0110
1001 x0000 0011 0001
9 0 3 1

Из примера видно, что межтетрадные переносы, возникающие в


процессе коррекции предварительной суммы, могут таким образом
изменить старшие тетрады, что их также потребуется корректировать.
В худшем случае количество последовательных коррекций будет равно
разрядности слагаемых (рассмотрите пример сложения 9999+1 в коде
«8421»).
() Арифметические основы ЭВМ 2015 год 123 / 148
Десятичная коррекция при вычитании
в коде «8421»

Случай 1◦ a ≥ b + p – имеем истинное значение c и q = 0;


Случай 2◦ a < b + p – формируется заём q = 1, который
«приносит» из старшей тетрады 16 (а надо 10). Поэтому
значение с следует уменьшить на 6. c := c−6
При коррекции новые заёмы не формируются (16 ≥ b + p + 6),
поэтому связь между тетрадами отсутствует и коррекцию вычитания в
коде «8421» можно проводить параллельно по всем тетрадам.

Итак, коррекции при вычитании в коде «8421» подлежат те тетрады,


для которых q = 1.
Коррекция реализуется либо вычитанием кода 0110 (-6), либо
сложением с кодом 1010 (+10). В последнем случае возникающий из
тетрады перенос следует игнорировать.

() Арифметические основы ЭВМ 2015 год 124 / 148


Пример вычитания

Вычитание C := A − B = 4754 − 2972 = 1782

A = 4754 = 0100 y 0111 y 0101 0100


B = 2972 = 0010 1001 0111 0010
C = 1782 = 0001 6x 1101 1110 0010
+ 1010 - 0110
0001 0111 1000 0010
1 7 8 2

Коррекция тетрад проведена разными способами исключительно для


иллюстрации их равноценности.

() Арифметические основы ЭВМ 2015 год 125 / 148


Недостатки применения кода «8421»

Можно отметить следующие недостатки применения кода «8421»


(прежде всего применительно к сложению):
1) необходимо отслеживать не только переносы из тетрад, но и
значения модулей тетрад предварительной суммы;
2) в общем случае невозможно произвести одновременно коррекцию
во всех тетрадах, где может потребоваться коррекция.
Для преодоления отмеченных недостатков можно использовать другие
коды, например «8421+3».

() Арифметические основы ЭВМ 2015 год 126 / 148


Код «с избытком три»

При кодировании с избытком три каждая десятичная цифра a


представляется a∗ = a + 0011, где a – код «8421» цифры.

Тогда при сложении


0
c ∗ = (a + 3) + (b + 3) + p = a + b + p + 6.
При этом в тетраде всегда будет формироваться истинное значение
десятичного переноса: для всех комбинаций десятичных слагаемых,
для которых a + b + p > 9, значения a∗ + b ∗ + p > 15.Однако,

() Арифметические основы ЭВМ 2015 год 127 / 148


Коррекция сложения в коде «с избытком три»

Случай 1◦ Если переноса из тетрады не было, то результат


сформируется «с избытком 6», поэтому потребуется коррекция
тетрады предварительной суммы - удаление из тетрады лишней
0
тройки: c ∗ := c ∗ −3 .
Вычитание (-3) можно заменить сложением с дополнением до 3
(+13). Обязательно возникающий при этом перенос не передается
в следующую тетраду. Потеря переноса равносильно потере 16, то
есть −16 + 13 = −3;
Случай 2◦ Если перенос из тетрады был, то его вес равен
24 = 16, таким образом из тетрады удаляется 16, а вес
десятичного переноса – 10. Поэтому перенос из тетрады в коде
«8421+3» уносит из тетрады лишнюю шестерку, которую и
нужно добавить при коррекции. Но сложение тетрад «с избытком
3» приводит к получению суммы «с избытком 6», поэтому вместо
0
добавления шестерки достаточно добавить тройку: c ∗ := c ∗ +3 .
() Арифметические основы ЭВМ 2015 год 128 / 148
Коррекция сложения в коде «с избытком три»

Итак, коррекции при сложении в коде «8421+3» подлежат все


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

Таким образом, коррекция при сложении в коде «8421+3» во-первых,


определяется только значениями переносов из тетрад
предварительной суммы и, во-вторых — может проводится
параллельно во всех тетрадах.

() Арифметические основы ЭВМ 2015 год 129 / 148


Пример сложения в коде «8421+3»

Сложение C := A + B = 3852 − 5279 = 9031

A = 3852 = 0110 1011 1000 0101


+
B = 5179 = 1000 0100 1010 1100
C = 9031 = 1111  0000  0011  0001
+ + + +
1101 0011 0011 0011
1100 0011 0110 0100
12 − 3 = 9 3−3=0 6−3=3 4−3=1

() Арифметические основы ЭВМ 2015 год 130 / 148


Коррекция при вычитании в коде «8421+3»

Случай 1◦ Если в тетраде не был сформирован выходной заём, то


0
c ∗ = (a + 3) − (b + 3) − p = a − b − p
0
то есть предварительная разность c ∗ получается без избытка 3.
Следовательно, в такие тетрады следует добавить константу 0011
0
c ∗ := c ∗ + 3
Случай 2◦ Если в тетраде был сформирован выходной заём, то
c∗0 = 16+(a+3)−(b+3)−p = (a−b−p)+16 = (a−b−p+3)+10−3
Учитывая, что вес десятичного заёма равен 10, последняя
(выделенная) тройка является в тетраде лишней, её следует
удалить, например, добавив в тетраду константу 1101 (13) и
игнорируя возникающий из тетрады перенос
0
c ∗ := c ∗ + 13

() Арифметические основы ЭВМ 2015 год 131 / 148


Варианты коррекции в коде «8421+3»

Итак, коррекция при сложении и вычитании в коде «8421+3» может


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

Выходной Добавить
Операция перенос/ константу
заём
да 0011
Сложение
нет 1101
да 1101
Вычитание
нет 0011

Таким образом, коррекция при сложении и вычитании в коде


«8421+3» во-первых, определяется только значениями переносов из
тетрад предварительной суммы и, во-вторых – может проводится
параллельно во всех тетрадах.

() Арифметические основы ЭВМ 2015 год 132 / 148


Машинная арифметика в остаточных классах

Будем говорить, что «α есть остаток числа A по модулю p»4 , если


имеет место следующее равенство:
 
A
α=A− · p, (11)
p
h i
где Ap — целая часть частного Ap ;
Тогда α — наименьший целый остаток от деления A на p. Часто это
соотношение записывают так:

α ≡ A (mod p). (12)

4
Иногда говорят, что «A сравнимо с α по модулю p».
() Арифметические основы ЭВМ 2015 год 133 / 148
Представления чисел в СОК

Для представления чисел в СОК необходимо выбрать т. н. систему


оснований — множество целых чисел p1 , p2 , . . . , pn . Тогда любое число
A может быть представлено в СОК следующим образом:

A = (α1 , α2 , . . . , αn ), (13)

где αi ≡ A (mod pi ).
Обозначим произведение
n
Y
pi = p1 · p2 · . . . · pn = P (14)
i=1

Можно показать, что если все основания pi — взаимно-простые числа,


то между числами 0, 1, 2, . . . , (P − 1) и числами, представленными в
СОК согласно (13), имеет место взаимно-однозначное
соответстветствие.
() Арифметические основы ЭВМ 2015 год 134 / 148
Примеры представления чисел в СОК

Пусть p1 = 3, p2 = 5, p3 = 7 — взаимно-простые числа.


P = 3 · 5 · 7 = 105. Представим в СОК несколько десятичных чисел:
17 = (2, 2, 3) 11 = (2, 1, 4) 100 = (1, 0, 2)
63 = (0, 3, 0) 0 = (0, 0, 0) 105 = (0, 0, 0)
55 = (1, 0, 6) 1 = (1, 1, 1) 106 = (1, 1, 1)
Заметим, что при выходе за пределы диапазона [0..(P − 1)]
нарушается взаимно-однозначное соответствие между представлением
чисел в позиционной системе счисления и СОК. Действительно,

0 ≡ 105 ≡ 210 ≡ . . . (mod 3), (mod 5), (mod 7);

1 ≡ 106 ≡ 211 ≡ . . . (mod 3), (mod 5), (mod 7);


и так далее. Очевидно, для расширения диапазона представления
чисел в СОК следует увеличить число и/или значения оснований.

() Арифметические основы ЭВМ 2015 год 135 / 148


Арифметические операции в СОК с положительными
числами

Рассмотрим правила выполнения операций сложения и умножения в


СОК в случае, если оба операнда и результат операции находятся в
диапазоне [0, P).
Пусть
A = (α1 , α2 , . . . , αn ),
B = (β1 , β2 , . . . , βn ),
A + B = (γ1 , γ2 , . . . , γn ),
A · B = (δ1 , δ2 , . . . , δn ),
и при этом имеет место соотношение
A < P, B < P, A + B < P, A · B < P

() Арифметические основы ЭВМ 2015 год 136 / 148


Арифметические операции в СОК

Покажем, что
γi ≡ (αi + βi ) (mod pi ),
δi ≡ (αi · βi ) (mod pi ),
при этом в качестве цифры результата берется наименьший остаток.
 
αi + βi
γi = αi + βi − · pi , (15)
pi
 
αi · βi
δi = αi · βi − · pi . (16)
pi

() Арифметические основы ЭВМ 2015 год 137 / 148


Выполним сложение чисел, представленных в СОК

p1 = 3, p2 = 5, p3 = 7 13 = (1, 3, 6)

55 = (1, 0, 6) 55 = (1, 0, 6)
17 = (2, 2, 3) + +
+ 17 = (2, 2, 3) 63 = (0, 3, 0)
63 = (0, 3, 0) +
11 = (2, 1, 4) 118 ⇐ (1, 3, 6)
80 ⇐ (2, 0, 3)
83 ⇐ (2, 3, 6) 118 ≡ 13 = 118 − P

Обратите внимание, если результат выходит за пределы допустимого


диапазона (A + B > P), то в СОК он неотличим от A + B − P.

() Арифметические основы ЭВМ 2015 год 138 / 148


Выполним умножение чисел, представленных в СОК

p1 = 3, p2 = 5, p3 = 7

17 = (2, 2, 3) 78 = (0, 3, 1) 18 = (0, 3, 4)


× × ×
6 = (0, 1, 6) 1 = (1, 1, 1) 5 = (2, 0, 5)
102 ⇐ (0, 2, 4) 78 ⇐ (0, 3, 1) 90 ⇐ (0, 0, 6)

() Арифметические основы ЭВМ 2015 год 139 / 148


Вычитание в СОК

Операция вычитания в общем случае в СОК не определена, так как в


СОК отсутствуют отрицательные числа. Однако в частных случаях,
когда A, B, (A − B) ∈ [0..P) можно записать

 
A−B
λi = αi − βi − · pi (17)
pi
λi = (αi − βi ) (mod pi ),
i = 1, 2, . . . , n

Операция вычитания в тех случаях, когда ее результат положителен,


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

() Арифметические основы ЭВМ 2015 год 140 / 148


Вычитание A − B для случаев A < B

p1 = 3, p2 = 5, p3 = 7

17 = (2, 2, 3) 78 = (0, 3, 1) 98 = (2, 3, 0)


− − −
6 = (0, 1, 6) 41 = (2, 1, 6) 55 = (1, 0, 6)
11 ⇐ (2, 1, 4) 37 ⇐ (1, 2, 2) 43 ⇐ (1, 3, 1)

() Арифметические основы ЭВМ 2015 год 141 / 148


Представление отрицательных чисел в СОК

Если необходимо оперировать отрицательными числами, можно


ввести так называемые искусственные формы представления чисел в
СОК. Выражение (14) определяет диапазон представления чисел в
СОК с основаниями p1 , p2 , . . . , pn .
Пусть одно из оснований системы равно 2, например, для
определенности p1 = 2.
Обозначим через P величину
P P
P= = = p2 p3 . . . pn = (1, 0, 0, . . . , 0).
2 p1
Будем оперировать числами, лежащими в диапазоне

0 < |N| < P.

() Арифметические основы ЭВМ 2015 год 142 / 148


Представление отрицательных чисел в СОК

Примем в качестве нуля число P и будем представлять


положительные числа N = |N| в виде N 0 = P + |N|, а отрицательные
числа N = −|N| в виде N 0 = P − |N|. Тогда при алгебраическом
суммировании получим следующий вид представления положительных
и отрицательных чисел:
N 0 = P + N.
Это означает, что в принятом представлении мы всегда будем иметь
дело с положительными числами, однако числа в искусственной
форме в интервале [0, P) будут отображать отрицательные числа, а в
интервале [P, P) — положительные.

() Арифметические основы ЭВМ 2015 год 143 / 148


Если результата операции не выходит за пределы нового диапазона [0, P),
можно выполнять операции сложения и вычитания следующим образом.
Пусть искусственные формы слагаемых N1 и N2 имеют следующее
представление
N10 = P + N1 , N20 = P + N2 .
Тогда
N10 + N20 = P + N1 + P + N2 = 2P + (N1 + N2 ).
искусственная форма суммы есть

(N1 + N2 )0 = (N1 + N2 ) + P,

откуда
(N1 + N2 )0 = (N1 + N2 ) − P
или, что то же
(N1 + N2 )0 = (N1 + N2 ) + P, (18)
так как P = (1, 0, 0, . . . , 0), поэтому прибавление или вычитание этого числа
к любому N в СОК изменит только первую цифру N, причем одинаковым
образом. Действительно,

0+1≡0−1≡1 (mod 2), 1+1≡1−1≡0 (mod 2).

() Арифметические основы ЭВМ 2015 год 144 / 148


Рассмотрим несколько примеров вычитания в СОК
Система оснований

p1 = 2, p2 = 3, p3 = 5, p4 = 7; P = p2 p3 p4 = 3 · 5 · 7 = 105.

N1 = 17, N2 = 41. Образуем искусственные формы заданных чисел:

N10 = (1, 0, 0, 0) + (1, 2, 2, 3) = (0, 2, 2, 3),

N20 = (1, 0, 0, 0) + (1, 2, 1, 6) = (0, 2, 1, 6)


и на основании (18) получаем

(N1 + N2 )0 = (0, 2, 2, 3) + (0, 2, 1, 6) + (1, 0, 0, 0) = (1, 1, 3, 2).

Число (1,1,3,2) является искусственной формой суммы заданных


чисел, что проверяется переходом к десятичной позиционной системе:

(17 + 41)0 = (58)0 = 105 + 58 = (1, 0, 0, 0) + (0, 1, 3, 2) = (1, 1, 3, 2).

() Арифметические основы ЭВМ 2015 год 145 / 148


Достоинства СОК

Отсутствие межразрядных связей позволяет выполнять операции над


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

() Арифметические основы ЭВМ 2015 год 146 / 148


Недостатки СОК

1) Не определены отрицательные и дробные числа.


2) Сложно определить выход за пределы диапазона (переполнение).
3) Сложно выполнять модульные операции (сравнение).
4) Громоздкий перевод из ПСС в СОК и обратно.
5) . . . . . .

() Арифметические основы ЭВМ 2015 год 147 / 148


Сфера применения СОК

Вычислительные задачи с (относительно) малым количеством входной


и выходной информации, большим объёмом операций сложения и
умножения, с возможностью масштабирования данных таким образом,
чтобы исключить переполнение. (Например, задачи корреляционного
анализа).

() Арифметические основы ЭВМ 2015 год 148 / 148

Вам также может понравиться