- •Основы компьютерной арифметики и логики
- •Предисловие
- •Глава 4, подготовленная доцентом о.П. Шафеевой, посвящена вопросам разработки алгоритмических моделей выполнения арифметических операций и моделирования на пэвм спроектированных алгоритмов.
- •Основы двоичной компьютерной арифметики
- •1.1. Позиционные системы счисления
- •Десятичная позиционная система счисления
- •Двоичная позиционная система счисления
- •1.1.3. Восьмеричная позиционная система счисления
- •1.1.4. Шестнадцатеричная позиционная система счисления
- •Сложение Вычитание
- •Перевод чисел из одной позиционной системы счисления в другую
- •1.2.1. Перевод целых чисел
- •1.2.2. Перевод правильных дробей
- •1.2.3. Перевод неправильных дробей из одной системы счисления в другую
- •1.2.4. Частный случай перевода чисел из одной системы счисления в другую
- •1.2.5. Перевод чисел из одной системы счисления в другую с использованием промежуточной двоично-десятичной системы
- •1.3. Представление чисел с фиксированной запятой (точкой)
- •1.4. Представление чисел с плавающей запятой (точкой)
- •1.5. Коды двоичных чисел
- •1.5.1. Прямой код
- •1.5.2. Обратный код
- •1.5.3. Модифицированный обратный код
- •1.5.4. Дополнительный код
- •2.1.1. Алгебраическое сложение чисел в дополнительном коде
- •2.1.2. Алгебраическое сложение чисел в обратном коде
- •2.1.3. Переполнение разрядной сетки при сложении чисел
- •2.2. Сложение (вычитание) двоичных чисел с плавающей запятой
- •2.2.1. Метод ускоренного сложения двоичных чисел с запоминанием переносов
- •2.3. Умножение двоичных чисел с фиксированной запятой
- •2.4. Машинные технологии выполнения операции умножения двоичных чисел с фиксированной запятой
- •2.5. Умножение двоичных чисел с плавающей запятой
- •2.6. Методы ускоренного выполнения операции умножения двоичных чисел
- •2.6.1. Метод пропуска такта суммирования
- •2.6.2. Метод анализа сомножителей
- •2.6.3. Метод расшифровки и одновременного умножения на два разряда множителя
- •2.6.4. Метод ускоренного умножения Мак-Сорли
- •2.6.5. Метод ускоренного умножения Лемана
- •2.6.6. Метод умножения с расшифровкой пар разрядов множителя и запоминанием переносов
- •2.7. Деление двоичных чисел с фиксированной запятой
- •2.8. Деление двоичных чисел с плавающей запятой
- •3. Основы десятичной компьютерной арифметики
- •3.1. Машинное кодирование десятичных чисел
- •3.2. Выполнение арифметических операций с десятичными числами
- •3.2.1. Сложение десятичных чисел в эвм
- •3.2.2. Умножение десятичных чисел в эвм
- •3.2.3. Ускорение умножения в -кодах
- •Деление десятичных чисел в эвм
- •4.2. Моделирование алгоритма сложения двоичных чисел
- •Различные случаи ненормализованных мантисс
- •4.3. Проектирование алгоритма умножения чисел
- •4.5. Проектирование алгоритма деления чисел
- •4.7. Разработка алгоритма вычисления квадратного корня
- •Определение 1. Пусть и произвольные множества. Соответствием называется тройка множеств
- •Свойства отношений
- •Эквивалентность
- •Толерантность
- •Отношения порядка
- •Самодвойственные функции
- •Монотонные функции
- •Линейные функции
- •Функции, сохраняющие константу
- •5.2.7. Минимизация булевых функций
- •Метод Блейка
- •Метод Квайна-Мак-Класки
- •Минимизация с использованием карт Карно
- •Дана функция четырех переменных (рис. 5.13):
- •Минимизация не полностью определенных булевых функций
- •Минимизация систем булевых функций
- •5.3. Методика синтеза комбинационных схем на логических элементах
- •5.3.1. Логические элементы
- •5.3.2. Общий алгоритм построения комбинационных схем
- •5.3.3. Синтез кс в классическом базисе
- •5.3.4. Синтез кс в базисах «и-не», «или-не»
- •5.3.5. Реализация кс в базисе Жегалкина
- •5.3.6. Синтез составных кс
- •Заключение
- •Библиографический список к главам 1, 2, 3, 4
- •Библиографический список к главе 5
3. Основы десятичной компьютерной арифметики
3.1. Машинное кодирование десятичных чисел
В современных ЭВМ для облегчения связи человека с машиной имеется возможность подготавливать и вводить в машину исходную информацию в привычной для человека десятичной системе счисления и получать результаты обработки информации также в десятичной системе. Для этой цели используются специальные, так называемые, двоично-десятичные коды, позволяющие представлять десятичные цифры посредством двоичных символов (0 и 1). Известен ряд систем такого кодирования десятичной информации. Выбор системы кодирования определяется особенностью использования десятичной информации в ЭВМ.
Если десятичные числа используются только при вводе и выводе в машину информации, то наиболее важными требованиями к системе кодирования являются наглядность представления десятичных чисел и простота перевода из десятичной системы в двоичную и обратно.
Если ЭВМ предназначена для обработки экономической информации или иной другой, связанной с большим объемом обработки десятичных данных, то довольно часто с помощью специальных алгоритмов в машине производятся операции над числами в десятичной системе счисления. В этом случае к способу кодирования десятичных чисел предъявляются требования удобства выполнения арифметических операций над этими числами в соответствующем коде.
Наибольшее распространение в вычислительной технике нашел естественный двоично-десятичный позиционный код 8421, в котором каждая цифра десятичного числа от 0 до 9 заменяется соответствующим четырехразрядным двоичным числом (тетрадой) с весовыми коэффициентами разрядов (слева направо) 8,4,2,1 (табл. 3.1). Такой код называют также -кодом.
Таблица 3.1
Десятичные цифры |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
Двоично-десятичный код 8421 |
0000 |
0001 |
0010 |
0011 |
0100 |
0101 |
0110 |
0111 |
1000 |
1001 |
Этот код удобен для выполнения машинных преобразований из десятичной системы в двоичную и обратно, а также для выполнения арифметических операций в -кодах.. Данный код аддитивен, то есть сумма представлений цифр есть код их суммы. В ЭВМ с десятичной арифметикой код знака десятичного числа в двоично-десятичном изображении обычно размещается справа в разрядной сетке и может представляться, как в двоичной системе счисления, наименьшей и наибольшей цифрой, кодирующей соответственно знаки плюс и минус: + ~ 0000; – ~ 1001.
При таком кодировании знаков тетерады двоично-десятичного числа, начиная с младшей, размещаются слева от знака в порядке возрастания весов. В запоминающем устройстве двоичные тетрады обычно хранятся в естественном прямом коде.
Описанный двоично-десятичный код 8421 без каких-либо модификаций мало удобен для реализации арифметических операций десятичными числами. Это вызвано трудностями обнаружения переноса в следующий десятичный разряд и относительной сложностью перехода к обратным и дополнительным кодам для десятичных чисел, облегчающим выполнение алгебраического сложения. Последнее объясняется тем, что код 8421 не является самодоопределяющимся, то есть инверсия его двоичных цифр не дает кода дополнения десятичной цифры до 9. В связи с этом, в процессе выполнения арифметических действий над двоично-десятичными числами, их коды преобразуются из системы 8421 либо в код с потетрадным избытком 3, либо в код с потетрадным избытком 6 (табл. 3.2), являющиеся самодоопределяющимися и обеспечивающие легкое определение переноса из разряда в разряд, ввиду исключения лишних кодовых комбинаций (1010; 1011; 1100; 1101; 1110; 1111).
Таблица 3.2
Десятичная цифра |
Естественный двоично-десятичный код (8421) |
Код с избытком три |
Код с избытком шесть |
0 |
0000 |
0011 |
0110 |
1 |
0001 |
0100 |
0111 |
2 |
0010 |
0101 |
1000 |
3 |
0011 |
0110 |
1001 |
4 |
0100 |
0111 |
1010 |
5 |
0101 |
1000 |
1011 |
6 |
0110 |
1001 |
1100 |
7 |
0111 |
1010 |
1101 |
8 |
1000 |
1011 |
1110 |
9 |
1001 |
1100 |
1111 |
Коды с потетрадным избытком 3 или 6 обеспечивают возможность применения достаточно простых в структурном отношении алгоритмов и устройств для выполнения арифметических операций в -кодах.
Для того, чтобы при сложении десятичных цифр, сумма которых больше девяти, сформировать единицу переноса и передать ее в следующий десятичный разряд, следует представить либо цифры обоих слагаемых в коде с избытком три, либо цифры одного из слагаемых в коде с избытком шесть, оставив другое слагаемое в естественном двоично-десятичном коде. Если при выполнении сложения с применением таких кодов возникает перенос в следующую тетраду, то результат в данном разряде получается в естественном двоично-десятичном коде (без избытка). Если в каких-либо тетрадах при выполнении операции переносы не возникли, то для получения истинного результата операции из кодов этих тетрад необходимо вычесть избытки шесть. Вычитание из тетрады избытка, т.е. числа 6 (0110) можно заменить потетрадным прибавлением его дополнения до 24, то есть числа 1010.
Из-за особенностей кодирования знаков знак результата приходится формировать по специальным правилам.
Пример.
Сложить два десятичных числа и .
Естественные двоично-десятичные коды чисел и соответственно будут иметь вид и .
Представим число в коде с потетрадным избытком шесть:
0000 1001 Х
+ 0110 0110 избыток 6
0110 1111 Х (с избытком 6).
В результате сложения сформированного с избытком 6 кода числа с кодом числа (без избытка) получим
0110 1111 Х (с избытком 6)
+ 0001 0110 Y
1000 0101 (Х+Y) (с избытком 6).
Поскольку при сложении возник перенос ← только из первой справа тетрады во вторую, то необходимо скорректировать содержимое второй тетрады, вычтя из нее число 6=0110, то есть прибавив его дополнение 1010. В результате выполнения этой операции получим истинный результат, равный, как нетрудно заметить, десятичному числу 25:
1000 0101 (Х+Y) (с избытком 6)
+ 1010 0000 коррекция
0010 0101 Х+Y=25.
Операция коррекции - потетрадная, поэтому все переносы из тетрад теряются и не влияют на результат.
Легко показать, что аналогичный результат будет получен, если в каждый из операндов ввести потетрадную избыточность 3= 0011.
X = 9 = 0000 1001
Y = 16 = 0001 0110
X(изб. 3) = 0011 1100
Y(изб. 3) = 0100 1001
X(изб. 3) + Y(изб. 3) = 1000 0101
коррекция 1010 0000
X + Y = 0010 0101 = 25(10)