- •Содержание
- •Часть I. Арифметика в форматах с фиксированной точкой
- •1. Введение
- •Место и роль Арифметики цифровых вычислительных машин в современной науке
- •Предмет и предназначение настоящей книги
- •Рекомендации читателю
- •Раздел 2 достаточно просмотреть, быстро переворачивая страницы.
- •Позиционные системы счисления
- •Двоичная, восьмеричная, шестнадцатеричная и двоично-кодированные системы счисления
- •Преобразование чисел из десятичной в двоичную, восьмеричную и шестнадцатеричную системы счисления и наоборот
- •Представление чисел в форматах с фиксированной точкой
- •Формат с фиксированной точкой
- •Свойства формата с фиксированной точкой
- •Ограниченный диапазон представления чисел
- •Точность действительного числа в формате и точность формата
- •Значимость числа и потеря значимости
- •Эффективность использования двоичного формата
- •Представление чисел в прямом, обратном и дополнительном кодах
- •Взаимное преобразование прямого, обратного и дополнительного кодов
- •Взаимное преобразование прямого и обратного кодов отрицательных чисел
- •Взаимное преобразование обратного и дополнительного кодов отрицательных чисел
- •Взаимное преобразование прямого и дополнительного кодов отрицательных чисел
- •Запись кода числа в формат с фиксированной точкой
- •Функции системы записи и исключительные ситуации
- •Округление действительных чисел
- •Округление кодов действительных чисел с записью в формат с фиксированной точкой
- •Округление прямого кода числа
- •Округление обратного и дополнительного кодов положительного числа
- •Округление обратного кода отрицательного числа
- •Округление дополнительного кода отрицательного числа
- •Арифметические операции в форматах с фиксированной точкой
- •Операция пересылки
- •Операция изменения знака
- •Операции алгебраического сложения и вычитания
- •Сложение в дополнительном коде
- •Вычитание в дополнительном коде
- •Особенности сложения и вычитания в дополнительном коде
- •Сложение в обратном коде
- •Вычитание в обратном коде
- •Особенности сложения и вычитания в обратном коде
- •Взаимная замена операций вычитания и сложения
- •Сложение и вычитание в прямом коде
- •Операция алгебраического умножения
- •Умножение в прямом коде
- •Умножение в дополнительном коде
- •Умножение с преобразованием операндов в прямой код и произведения в дополнительный
- •Умножение дополнительного кода множимого на модуль множителя
- •Умножение дополнительного кода множимого на дополнительный код множителя
- •Умножение множимого в традиционной двоичной системе на множитель, представленный в двоичной системе счисления с алфавитом
- •Умножение дополнительных кодов с заменой знакового разряда множителя 1 на
- •Преобразование множителя с заменой цепочек единиц нулями
- •Преобразование множителя с сокращением вдвое верхней оценки количества единиц
- •Умножение на два разряда с переносом 1 в очередную двойку разрядов множителя
- •Умножение на два разряда с преобразованием множителя заменой цепочек единиц нулями
- •Умножение на два разряда множителя с увеличенным количеством нулевых частных произведений
- •Изменение операции над частным произведением
- •Вычисление частного произведения с требуемым знаком
- •Сокращение матриц дополнительных кодов частных произведений
- •Табличный способ умножения
- •Умножение чисел большой разрядности
- •Операции алгебраического деления и вычисления остатка
- •Математические основы некоторых способов деления двоичных чисел
- •Деление двоичных чисел в прямом коде
- •Деление с восстановлением остатка
- •Деление без восстановления остатка
- •Деление с вычислением очередного сдвинутого влево остатка
- •Деление без записи очередного остатка на место предыдущего
- •Деление двоичных чисел в дополнительном коде
- •Деление нормализованных двоичных чисел
- •Некоторые способы ускорения деления
- •Операция сравнение
- •Выполнение операций в двоично-десятичной системе счисления
- •Вычисление двоично-десятичного кода обратной десятичной цифры
- •Взаимные преобразования прямого, обратного и дополнительного кода двоично-десятичного числа
- •Изменение знака двоично-десятичных чисел
- •Сложение двоично-десятичных чисел
- •Сложение в двоично-десятичной системе 8421
- •Вычитание двоично-десятичных чисел
- •Литература
Вычитание в обратном коде
Вычитание в обратном коде отличается от вычитания в дополнительном коде тем, что заём из знакового разряда не отбрасывается, а вычитается из младшего разряда промежуточной разности. Этот заём называют циклическим. Результат вычитания будет получен в обратном коде.
Вычитание с расширением поля значащих разрядов операндов на одну позицию слева.
Для получения точного результата можно выполнять выравнивание полей операндов записанных в обратном коде с расширением поля целого дополнительно на одну позицию влево. В дополнительные позиции целого и дробной части положительного числа следует записывать нули, а отрицательного числа – цифры обратные нулю.
При вычислении разности в двоично-кодированных системах счисления в дополнительный разряд целого можно копировать разряд знака и выполнять вычитание в дополнительном разряде и разряде знака по правилам вычитания в двоичной системе счисления. При пересылке обратного кода точной разности системе Записи числа в формат результата, следует изменить код старшего значащего разряда по правилам, изложенным в разделе 4.3.1.
Для сокращения затрат можно использовать в качестве циклического заем из знакового разряда, а не заем вычисляемый при вычитании знаковых разрядов, и выполнять его вычитание только из значащих разрядов промежуточной разности. Эта возможность следует из того, что оба займа всегда совпадают, и вычитание 1 из младшего разряда промежуточной разности не может вызвать заем из знакового разряда равный 1.
П
ример
4-15.
Выполнено вычитание десятичных чисел
в обратном коде.
Формат операндов расширен на один разряд целого влево приписыванием в зависимости от знака числа цифры 0 или обратной нулю (9), показанной жирным шрифтом. Зачеркнутый заем можно не вычислять. Циклический заем достаточно вычитать только из значащих разрядов промежуточной разности.
Для удобства проверки правильности вычислений в нижней строке вариантов приведен прямой код отрицательных результатов вычитания.
П
ример
4-16.
Выполнено вычитание в обратном коде
тех же десятичных чисел, что и в одноименных
вариантах примера 4-15. Формат операндов
расширен на один разряд целого влево
приписыванием кода знака числа показанного
жирным шрифтом. В разряде знака и в
дополнительном разряде целого вычитание
выполняется по таблице вычитания
двоичных цифр (табл.4.3). Циклический заем
достаточно вычитать только из значащих
разрядов промежуточной разности.
В нижней строке вариантов приведен обратный код точной разности, пересылаемый системе Записи в формат результата.
П
ример
4-17.
Выполнено вычитание в обратном коде
двоичных чисел в формате расширенном
на 1 бит целого влево. Дополнительный
бит в операндах и в результате показан
жирным шрифтом. Обратный код разности
вычислен точно.
Вычитание без расширения поля значащих разрядов операндов на одну позицию слева.
Можно не расширять поле целого, а лишь выравнивать идентичные поля операндов, расширяя меньшее до большего. Тогда код разности можно интерпретировать двояко:
как обратный код значащих разрядов точной разности без разряда знака;
как обратный код разности со знаком в формате операндов, но возможно переполненный.
В первом случае знак точной разности должен быть вычислен по отдельным правилам.
Во втором случае следует вычислить признак R переполнения формата.
Варианты правил определения знака разности.
Сложить по модулю 2 знаковые разряды операндов и циклический заем.
Если знаки операндов не совпадают, принять знак результата равным знаку уменьшаемого. Если знаки операндов совпадают, копировать в бит знака бит старшего значащего разряда разности или бит старшего значащего разряда промежуточной разности.
Если циклический заем не совпадает с займом из знакового разряда, знак разности совпадает со знаком уменьшаемого. Если займы совпадают, код знака равен старшему значащему разряду разности или старшему значащему разряду промежуточной разности.
Если циклический заем совпадает с займом из знакового разряда, код знака равен старшему значащему разряду промежуточной разности; иначе – инверсии старшего значащего разряда промежуточной разности.
Комментарий к правилу 1.
Именно по этому правилу вычисляется разряд знака при расширении формата операндов на разряд целого, так как бит знака дублируется.
Комментарий к правилу 2.
Если знаки операндов не совпадают, знак результата всегда равен знаку уменьшаемого. Если знаки операндов совпадают, переполнение разностью формата операндов случиться не может. Поэтому разряд знака совпадает со старшим разрядом разности и равным ему разрядом промежуточной разности.
Комментарий к правилу 3.
Несовпадение займов может быть только при разных знаках операндов. В этом случае знак разности совпадает со знаком уменьшаемого.
При одинаковых знаках операндов займы совпадают, переполнение случиться не может. Поэтому код знака равен старшему значащему разряду разности или старшему значащему разряду промежуточной разности. При разных знаках операндов и совпадении займов переполнения не будет. Поэтому и в этом случае код знака равен старшему значащему разряду разности или старшему значащему разряду промежуточной разности.
Комментарий к правилу 4.
При совпадении займов и любых сочетаниях знаков операндов переполнения не будет. Код знака равен значению старшего разряда разности и промежуточной разности.
При несовпадении займов знаки операндов разные, и поэтому возможно переполнение. Старший значащий разряд промежуточной разности всегда инверсия знакового разряда уменьшаемого. Поэтому код знака результата является инверсией старшего значащего разряда промежуточной разности.
Старший значащий разряд не переполненной разности совпадает с кодом ее знака, а при переполненной разности – с инверсией кода знака. Поэтому в правиле 4 нельзя старший значащий разряд промежуточной разности заменить старшим значащим разрядом разности.
Пример 4-18. Выполнено точное вычитание в обратном коде тех же десятичных чисел, что и в одноименных вариантах примеров 4-15 и 4-16, но без расширения формата операндов.
П
ри
вычитании вычислены только значащие
разряды промежуточной разности и
результата. Старший значащий разряд
разности представлен в двоичном коде
одним битом как в примере 4-16. Знак
разности определен по одному из четырех
правил.
В нижней строке вариантов примера приведен обратный код точной разности, пересылаемый системе Записи в формат результата.
При вычитании обратных кодов двоичных чисел в формате операндов с определением знака точного результата по отдельным правилам отсутствует необходимость в изменении кода старшего значащего разряда разности при пересылке ее системе Записи.
Проявление ситуации переполнения разностью формата операндов.
Если разность должна быть загружена в формат операндов, то возможна исключительная ситуация переполнения формата. Для ускорения вычислений можно проявить эту ситуацию и формировать признак R переполнения формата в процессе вычитания до записи разности в формат результата. Для этого можно выполнять вычитание, не расширяя формат операндов и разности, и считать, что старший разряд разности является разрядом знака.
Признаки переполнения следующие.
Знаки операндов не совпадают, а знак разности не совпадает со знаком уменьшаемого.
Знаки операндов не совпадают, а заем из знакового разряда при вычислении промежуточной разности совпадает с кодом знака уменьшаемого и при вычитании циклического займа заем из знакового разряда равен 0.
При вычислении промежуточной разности заем из знакового разряда не совпадает с циклическим займом и при вычитании циклического займа заем из знакового разряда равен 0.
Комментарий к правилу 1. При разных знаках операндов знак точной разности совпадает со знаком уменьшаемого. Несовпадение знака разности и знака уменьшаемого является признаком переполнения.
Комментарий к правилу 2. Если код знака уменьшаемого 1, а вычитаемого 0 (знаки не совпадают), то, чтобы случилось переполнение, код знака разности должен стать равным 0 (следует из п.1). Для этого необходим заем 1 из знакового разряда при вычислении промежуточной разности, поскольку циклический заем 0. Следовательно, при сочетании кодов знаков операндов 1–0 и переполнении заем из знакового разряда при вычислении промежуточной разности должен совпадать с кодом знака уменьшаемого.
Если код знака уменьшаемого 0, а вычитаемого 1 то, чтобы случилось переполнение, код знака разности должен стать равным 1. Для этого оба займа из знакового разряда должны быть равны 0. Следовательно, при сочетании кодов знаков операндов 0–1 и переполнении заем из знакового разряда при вычислении промежуточной разности должен совпадать с кодом знака уменьшаемого и при вычитании циклического займа заем из знакового разряда должен быть равен 0.
Комментарий к правилу 3. Заем из знакового разряда не совпадает с циклическим займом только при разных знаках операндов. При коде знака уменьшаемого 1, а вычитаемого 0, циклический заем всегда 0. Чтобы при таком сочетании знаков операндов случилось переполнение, необходим заем 1 из знакового разряда при вычислении промежуточной разности (следует из п.2). Следовательно, займы не должны совпадать.
При коде знака уменьшаемого 0, а вычитаемого 1, циклический заем всегда 1. Чтобы при таком сочетании знаков операндов случилось переполнение, оба займа из знакового разряда должны быть равны 0. Следовательно, заем при вычислении промежуточной разности не должен совпадать с циклическим займом и при вычитании циклического займа заем из знакового разряда должен быть равен 0.
П
ример
4-19.
Выполнено вычитание в обратном коде
тех же десятичных чисел, что и в одноименных
вариантах примеров 4-15, 4-16 и 4-18, в формате
операндов. Результат вычислен со знаком
и проверен на переполнение по одному
из трех правил.
В вариантах A, B, E признак переполнения R=0, и вычисленный точный результат может быть отправлен по назначению.
В вариантах C, D, F признак переполнения R=1. Результат переполнен и должен быть выдан сигнал прерывания по переполнению.
В нижней строке дан точный результат, вычисленный обработчиком прерывания по переполнению по полученному им коду переполненного результата. Для вычисления точной разности обработчик инвертирует знак, так как он вычислен неправильно. Кроме того, обработчик интерпретирует весь полученный им код как код значащих разрядов точного результата и заменяет код 0 или 1 в старшем разряде (в разряде знака) по правилу, изложенному в разделе 4.3.1.
Пример 4-20. Выполнено вычитание в обратном коде двоичных чисел в формате операндов.
Р
езультат
вычислен со знаком и проверен на
переполнение по одному из трех правил
При переполнении формата R=1. Обработчик прерывания по переполнению вычислил точное значение разности, приписав к полученному им переполненному результату код знака равный инверсии кода знака в переполненной разности. Точное значение разности, вычисленное обработчиком прерывания, приведено в нижней строке примера.
