- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Вычитание в дополнительном коде
Рассмотрим способы вычитания в дополнительном коде (вариант B) в одинаковых форматах. Особенности вычитания в дополнительных кодах в вариантах A и C оговорим отдельно.
Вычитание в дополнительном коде сводится к вычитанию одноименных разрядов чисел, начиная с младшего разряда и включая знаковый разряд, с учетом займа из предыдущего разряда. Знаковые разряды вычитаются по правилам вычитания двоичных цифр с учетом займа из предшествующего разряда. Заём из знакового разряда отбрасывается. Полученный результат представлен в дополнительном коде.
В табл.4.3 приведены результаты вычитания двоичных цифр с учетом займа из предыдущего разряда.
Здесь
и
– цифры уменьшаемого и вычитаемого в
разряде
;
– значение займа
в разряде
;
– значение разности
в разряде
;
–
значение займа
из последующего
разряда.
В табл.4.1, скопированной
из раздела 4.3.1 для удобства сравнения
таблиц, приведен результат сложения
двоичных цифр с учетом переноса из
предыдущего разряда. Обратите внимание
на тот факт, что столбец разности
и суммы
в таблицах совпадают. Это свойство
двоичной системы счисления используют
конструкторы устройств, предназначенных
для выполнения операций сложения и
вычитания.
При вычитании
чисел в системах счисления с основанием
или
значение разности цифр и заём определяют
по таблицам или по следующему правилу.
Если количественному эквиваленту разности цифр с учетом займа из предыдущего разряда соответствует цифра из алфавита системы счисления, то она является цифрой результата и заём из следующего разряда равен нулю. Если количественный эквивалент разности цифр меньше нуля, то заём из следующего разряда равен единице. Добавим к количественному эквиваленту цифры уменьшаемого количественный эквивалент основания системы счисления и вычтем из него количественный эквивалент цифры вычитаемого и заем из предыдущего разряда. Полученному количественному эквиваленту будет соответствовать цифра разности.
Например,
в восьмеричной системе счисления
и заём из последующего разряда равен
0. Разность
и заём из последующего разряда равен
1. Действительно, так как количественный
эквивалент разности
,
то заём равен 1, а цифра разности будет
равна
.
В шестнадцатеричной
системе счисления
и заём из последующего разряда равен
0. Разность
и заём из последующего разряда равен
1, т.к.
и
.
Вычитание с расширением поля значащих разрядов операндов на одну позицию слева.
Поскольку при вычитании чисел с разными знаками разрядность разности может превышать разрядность операндов на один разряд, предварительно расширим формат операндов влево на одну позицию целого, как это делалось при сложении (раздел 4.3.2). Это позволит исключить переполнение формата разности и вычислить результат точно.
A B C Займы:
0|00100111|011
(+393/8)
1|11111001|101
(-63/8) 1|10001110|101(-1133/8)
-
0|01010011|101
(+835/8)
-
0|01110001|011
(+1133/8)
-
1|10001110|101
(-1133/8)
1|11010011|110
(-442/8)
1|10001000|010
(-1196/8)
0|00000000|000
(+0)11
10100111
00
00
00000000
10 00
00000000
00
Пример 4-7. Выполнено вычитание шестнадцатеричных чисел в дополнительном коде в формате операндов расширенном на одну позицию. Цифра в дополнительной позиции выделена жирным шрифтом.
Знаковые разряды вычисляются по правилам вычитания в двоичной системе счисления. Разность в дополнительном коде.
A B C D
0|0
27
|6
(+396/16) 1|FF9|A
(-66/16) 1|F8E|A
(-1136/16) 1|F00|0
(-256)
-
0|0
53
|A
(+8310/16) -
0|
07
1|6
(+1136/16) -
1|F8E|A
(-1136/16) -
0|0
FF|0
(+255)
1|FD3
|С
(-444/16) 1|F8
8|4
(-11912/16) 0|0
0
0|0
(+0) 1|E01|0
(-511)
1|02C|4пр 1|077|Cпр 1|1FF|0пр
11
1
01 00
00
0 00
000 00
110
При представлении цифр десятичной, шестнадцатеричной и восьмеричной систем счисления двоичными кодами можно сократить длину двоичного расширенного формата, точно так, как это делается при сложении (раздел 4.3.1). Цифры в дополнительном бите следует вычитать по правилу вычитания двоичных цифр с учетом займа, подобно тому, как выполняется вычитание цифр знака. Содержимое дополнительного бита в коде результата при передаче его системе Записи следует заменять по тем же правилам, что и при сложении.
Выполнение операции при расширении поля операндов одним битом рассмотрим на примерах.
A B C D E F
0|027|6
0|097|6
0|097|6
0|071|6 1|172|4
(-27,6) 1|102|4
(-97,6) -
0|053|4
- 0|071|6
- 1|128|4
(-71,6) -
1|102|4
(-97,6) -
1|146|6
(-53,4) -
0|071|6
(+71,6)
1|174|2
0|026|0
0|169|2
0|169|2 0|025|8 1|030|8
1|974|2д
0|026|0
0|169|2
0|169|2 0|025|8 1|830|8
доп
1|025|8пр 1|169|2пр1
1
100 0
0 000
11
010
11 010 00 011 00
101
Вычитание без расширения поля значащих разрядов операндов на одну позицию слева.
Можно не расширять поле целого, а лишь выравнивать идентичные поля операндов. Тогда код разности в формате операндов можно интерпретировать двояко:
как дополнительный код значащих разрядов точной разности без разряда знака;
как дополнительный код разности со знаком в формате операндов, но возможно переполненный.
В первом случае разряд знака точной разности должен быть вычислен по отдельным правилам. В двоично-кодированных системах счисления старший значащий разряд разности будет представлен в одном бите подобно тому, как это имеет место в примере 4-8.
Во втором случае следует вычислить признак R переполнения формата и при переполнении сформировать сигнал прерывания.
Знак разности можно вычислить следующими способами.
Сложить по модулю 2 знаковые разряды операндов и заем из знакового разряда.
Если знаки операндов не совпадают, принять знак результата равным знаку уменьшаемого; если знаки операндов совпадают, копировать в бит знака бит старшего значащего разряда разности.
Если отбрасываемый заем не совпадает с займом из знакового разряда, знак разности совпадает со знаком уменьшаемого (знаки операндов разные). Если займы совпадают, код знака равен старшему значащему разряду.
Если отбрасываемый заем совпадает с займом из знакового разряда, код знака равен старшему значащему разряду; иначе – инверсии старшего значащего разряда.
Приведенные правила справедливы и в случае, когда заем из младшего разряда операндов равен 1. Этот способ вычитания по сравнению с предыдущим позволяет сократить длину пробега займа на один разряд и ускорить тем самым вычисление разности. При аппаратной реализации сокращаются затраты оборудования.
A B C D E F
P=2 P=2 P=2 P=2 P=2 P=10 0|0111
( +7)
1|1001
(–7)
1|1100
(–4)
1|0000
(–16)
0|1111
(+15) 1|39
(–61) -1|0100
(–12) -
0|1100
(+12) -
0|1100
(+12) -
0|1111
(+15) -
1|0001
(–15) -
0|39
(+39) 1
0011
0
1101
1
0000
0
0001
1
1110 1
00
0|10011
(+19)
1|01101
(–19)
1|10000
(–16)
1|00001
(–31)
0|11110
(+30)
1|900
(–100)
G L M N O P
P=16 P=16 P=16 P=16 P=16 P=10 0|B9
(+185) 1|47
(–185) 1|79
(–135)
1|00 (–256)
0|FF
(+255) 0|87
(+87) -1|8E
(–114) -
0|72
(+114) -
0|79
(+121)
-
0|FF
(+255)
-
1|01
(–255) -
1|75
(–25) 1
2B 0
D5 1 00 0 01 1 FE 1 12
0|12B
(+299) 1|ED5
(–299) 1|F00
(–256)
1|E01
(–511)
0|1FE
(+510)
0|112
(+112)10000
01 100
00 000
01
111
10 000
00
010
1 01
0 00
0 01
1
10
0 10
0
В нижней строке
вариантов приведены точные результаты,
пересылаемые системе Записи в формат
результата. Цифра старшего разряда в
системе счисления с основанием
вычислена по правилам, описанным в
разделе 4.3.2. Во всех вариантах знак
точной разности определен по одному из
четырех приведенных выше правил.
Воспользовавшись значениями займов,
приведенными в верхней строке примеров,
читатель может проверить, что применение
любого правила позволяет вычислять
знак точной разности правильно.
Проявление ситуации переполнения формата операндов разностью.
Если разность должна быть представлена в формате операндов, то возможна исключительная ситуация переполнения формата результата. Для ускорения вычислений целесообразно выполнять вычитание в формате операндов и считать, что старший разряд разности является разрядом знака. В процессе вычитания проявить признак R исключительной ситуации переполнения формата результата, и, если R=1, формировать сигнал прерывания, не обращаясь к системе Записи. При отсутствии переполнения (R=0) разность вычислена в формате операндов точно и может быть немедленно отправлена по назначению. При переполнении (R=1) точный результат может вычислить обработчик прерывания по переполнению программным способом.
Переполнение формата может случиться только при разных знаках операндов. Признаки переполнения следующие.
Знаки операндов разные и знак разности не совпадает со знаком уменьшаемого.
Знаки операндов разные, а заем из разряда знака не равен коду знака вычитаемого.
Заем из разряда знака не совпадает с займом, отбрасываемым при вычитании.
Вычисление признака R переполнения формата по правилу 2 выполняется одновременно с вычислением знака разности и отбрасываемого займа, а поэтому раньше, чем по правилам 1 и 3.
Вычисление признака переполнения по правилу 3 проще, чем по правилам 1 и 2, так как функция переполнения по правилу 3 зависит от двух переменных, а по правилам 1 и 2 от трех переменных.
Если код 1|00…0 не применяется для кодирования числа (варианты A и C дополнительного кода), то при определении признака переполнения необходимо дополнительно проверить код разности на равенство его 1|00…0.
Если дополнительный код 1|00…0 кодирует не число (вариант С), то ситуация сложившаяся в вариантах D и N примера 4-9 случиться не может, так как операнд с кодом 1|00…0 вызовет исключительную ситуацию невыполнимая операция и сигнал прерывания. Действия системы аналогичны описанным при сложении раздел 4.3.1. В вариантах C, F, M признак переполнения формата примет значение R=1, так как код суммы будет дополнительно проверен на значение 1|00…0 не применяемое для кодирования числа. Обработчик прерывания и в этом случае вычислит точное значение разности.
Если дополнительный
код 1|00…0 кодирует число (-0) (вариант A),
то операнды проверяют на наличие нулей
в значащих разрядах кода. Если только
уменьшаемое 0, то результат принимают
равным вычитаемому с обратным знаком,
так как
.
Если только вычитаемое 0, то результат
равен уменьшаемому, так как
.
Если оба операнда нули и код знака
уменьшаемого 1, а вычитаемого 0, то код
результата 1|00…0, так как
.
Иначе код результата 0|00…0. При вычитании
равных чисел результат должен быть
равным (+0). Ситуация сложившаяся в
вариантах D
и N
примера 4-9 случиться не может, так как
операнд с кодом 1|00…0 имеет значение
(-0). В вариантах C,
F,
M
признак переполнения
формата примет значение R=1.
