- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
При взаимном преобразовании прямого и обратного двоично-десятичного кода заменяют коды значащих цифр обратными, только если число отрицательное. Замену кода цифр обратным кодом можно выполнять по правилам, описанным в разделе 4.7.1.
Пример 4-72. Выполняется преобразование прямого кода десятичного числа -537 в обратный код.
В варианте A десятичное число представлено в коде 8421+3. Преобразование выполнено в соответствии с (4-37) инвертированием значащих разрядов кода. Если исходный код интерпретировать как прямой код двоичного числа, то результат преобразования является обратным кодом этого числа.
В вариантах B и C десятичное число представлено в коде 8421+6. Преобразование выполнено в соответствии с (4-34) и (4-35) соответственно. Для этого к инверсиям тетрад в варианте B прибавлена константа 0110, а в варианте C из инверсий тетрад вычтена константа 1010. Поскольку младшие разряды констант равны 0, то они не участвуют в выполнении операций.
В варианте D десятичное число представлено в коде 8421. Преобразование выполнено в соответствии с (4-31).
Преобразование обратного кода в прямой выполняется аналогично.
При взаимном преобразовании прямого и дополнительного двоично-десятичного кода необходимо учитывать вариант применяемого дополнительного кода (раздел 3.2). Преобразование кодов можно выполнить способами, описанными в разделе 3.2.1.3. Преобразование выполняют, только если число отрицательное. Здесь рассмотрим лишь особенности преобразования при представлении десятичных цифр двоично-десятичными кодами.
При преобразовании следует учитывать, что дополнительные коды 1|00…0доп и 0|00…0доп десятичных чисел в двоично-десятичном представлении содержат нули только в коде 8421; в кодах 8421+6 и 8421+3 поля значащих разрядов содержат коды и соответственно.
При косвенном преобразовании коды значащих цифр заменяют обратными по правилам, описанным в разделе 4.7.1. Обратный код отрицательного числа должен быть увеличен на 1 младшего разряда. Это можно сделать разными способами.
Сложить обратный двоично-десятичный код с двоично-десятичным кодом положительной единицы по правилам, описанным в разделе 4.7.4. Например, при преобразовании прямого кода в дополнительный код десятичного числа -537, представленного в двоично-десятичном коде 8421+6, взять его обратный код (пример 4-72 варианты B или С) и сложить с кодом 0|0110 0110 0111 (+1).
Можно сложить обратный код младшей тетрады с 1 по правилу сложения двоичных чисел, и, если код суммы в тетраде не применяется для кодирования десятичной цифры, заменить его кодом 0 и увеличить на 1 код следующей тетрады.
Пример 4-73. Выполняется преобразование прямых кодов десятичных чисел в дополнительный код с промежуточным преобразованием в обратный код с прибавлением 1 к младшей тетраде.
В
A B C D Код: 8421+3 8421+3 8421+6 8421+6 -
5 3 7 - 5 3 0 - 5 3 7 - 5 3 0 1|1000
0110 1010пр
1|1000 0110
0011пр
1|1011
1001
1101п
1|1011
1001
0110п 1|0111
1001 0101об
1|0111
1001
1100об
1|0100
0110
0010 1|0100
0110
1001
+
1
+
1
`
1
+
0110
+0110
+0111
+0110
+0111
+0111 1|0111
1001 0110д
1010
1101 1|1010 1100
1001д 1|0100
1101
0000 - 4 6
3
1|0111
1010 0011д -
4 6 3 1|0100 1101
0110д
- 4
7 0 - 4 7 0
В варианте B результат сложения младшей тетрады обратного кода с 1 не является кодом десятичной цифры. Поэтом он заменен на код 0, и к очередной тетраде прибавлена 1. Так как результат прибавления 1 к очередной тетраде является кодом десятичной цифры, то вычислен дополнительный код. Если бы вычисленный код не был кодом десятичной цифры, то он был бы заменен кодом 0, и выполнялось бы прибавление 1 следующей тетраде.
В коде 8421+3 результат увеличения обратного кода тетрады на 1 не являющийся кодом десятичной цифры всегда равен 1101, что и является признаком переноса 1 в следующую тетраду и необходимости замены кода в тетраде кодом 0.
В вариантах C и D прибавление 1 к обратному коду тетрады совмещено с его вычислением. Вычисление обратного кода выполняется в соответствии с (4-34) подобно тому, как это выполнено в варианте B примера 4-72, но константа 1010 в младшей тетраде увеличена на 1. Можно не увеличивать константу 1010, а принять при сложении перенос в младший двоичный разряд равным 1.
В варианте C результат содержит в младшей тетраде код десятичной цифры. Поэтому вычислен дополнительный код.
В варианте D результат сложения в младшей тетраде содержит код 0000 не являющийся кодом десятичной цифры. Поэтому он заменен на код нуля 0110, и константа в следующей тетраде увеличена на 1.
В коде 8421+6 результат увеличения обратного кода тетрады на 1 не являющийся кодом десятичной цифры всегда равен 0000, что и является признаком переноса 1 в следующую тетраду и необходимости замены кода в тетраде кодом 0110. При вычислении по (4-34) и сумме в тетраде равной 0000 перенос из старшего бита 1. Этот перенос можно направить в следующую тетраду и использовать для замены кода 0000 на код 0110.
При вычислении по (4-33) или (4-35) можно совмещать вычисление обратного кода с увеличением его на 1 и кроме кода 0000 использовать иные признаки переноса/займа в следующую тетраду.
При непосредственном преобразовании просматривают справа налево двоично-десятичные коды цифр, и оставляют их без изменения пока не встретится код цифры не равной 0. Код первой цифры не равной 0 заменяют кодом цифры дополняющей ее до 10. Коды всех последующих цифр заменяют кодами обратных цифр.
П
A B C Код: 8421 8421+6 8421+3 - 8 7 0 0 - 3 6 2 0 - 3 0 8 1 1|1000
0111 0000 0000 1|1001 1100 1000 0110 1|0110 0011 1011 0100 1|0001
0011 0000 0000 1|1100 1001 1110 0110 1|1001 1100 0100 1100 - 1 3 0 0 - 6 3 8 0 - 6 9 1 9
В варианте C код в младшей тетраде не является кодом цифры 0. Поэтому он заменен кодом цифры дополняющей исходную цифру до 10.
Замену кода цифр обратным кодом можно выполнять по правилам, описанным в разделе 4.7.1. Код, дополняющий исходную цифру до 10, можно получить увеличением обратного кода цифры на 1 в процессе его вычисления подобно тому, как это выполнялось в примере 4-73, причем перенос в следующую тетраду всегда равен 0.
Систему, выполняющую непосредственное преобразование двоично-десятичного кода 8421+3, можно легко перенастроить на преобразование двоично-шестнадцатеричного кода и, следовательно, двоичного кода. Для этого достаточно заменить код 0011 признака цифры 0 в тетраде кодом 0000. При этом длина пробега переноса в тетраде не будет превышать 3 разряда.
Для перенастройки системы, выполняющей непосредственное преобразование двоично-десятичного кода 8421, на преобразование двоично-шестнадцатеричного кода необходимо изменить константы при вычислении обратного кода десятичных цифр. При вычислении по (4-30) константу 1001 заменить константой 1111, а при вычислении по (4-31) или (4-32) заменить константы кодом 0000.
Для перенастройки системы, выполняющей преобразование кода 8421+6, нужно заменить не только константы, а и код 0110 признака цифры 0 в тетраде кодом 0000.
Во всех случаях длина пробега переноса в тетраде не будет превышать 3 разряда.