Двоичное вычитание можно выполнить, применяя арифметику двоичного дополнения.
Двоичное дополнение (дополнительный код) двоичного числа можно получить, заменив в числе нули единицами, а единицы-нулями, прибавив затем единицу. На первом шаге этого преобразования формируется обратный код числа.
Двоичное вычитание может быть выполнено прибавлением дополнительного кода вычитаемого к уменьшаемому. В качестве примера рассмотрим следующее двоичное вычитание:
Уменьшаемое
(3910)
Вычитаемое
-(2610)
(1310)
С помощью дополнительного кода вычитание можно выполнить следующим образом:
Инвертирование
+
Дополнительный код вычитаемого
Уменьшаемое
(3910)
Вычитаемое в дополнительном коде
1- перенос
(1310)
Перенос означает, что результат положительный.
Отсутствие цифры переноса означает, что результат имеет отрицательный знак, и окончательный ответ представляет собой дополнительный код результата сложения уменьшаемого с дополнительным кодом вычитаемого.
Булевы операции над двумя числами, каждое из которых состоит более чем из одного разряда, можно выполнять поразрядно, начиная с самого младшего разряда. Например:
Ú
Рассмотрим операцию И.
Ù
Рассмотрим задачу представления положительных и отрицательных чисел 8-разрядными словами. Поскольку не существует ни одного способа представить восемью битами более чем 256 различных чисел, их диапазон ограничивается величинами ± 127. Первые 128 чисел, от 0 до 127 (7F в шестнадцатеричной системе), определяются как положительные числа. Отрицательные числа получаются обратным отсчетом от нуля. Так же и в аппаратном реверсивном счетчике-если содержимое регистра равно 00000000 и происходит уменьшение этого числа на единицу, то следующим показанием счетчика будет 1111 1111 (FF в шестнадцатеричной системе). Следовательно, FF является шестнад-цатеричным представлением числа — 1. Такое представление носит название дополнения до двух (или дополнительного кода числа). В табл. 2.5 приведены дополнительные коды чисел от — 8 до +7.
Заметим, что самый старший разряд показывает знак числа. Если этот разряд равен нулю, то число положительное, если единице - отрицательное.
Процедура вычисления дополнительного кода проста. Для положительных чисел дополнительные коды совпадают с их представлением в двоичной системе (как показывают первые восемь строк табл. 2.5). В случае отрицательных чисел для определения дополнительного кода необходимо произвести следующие действия:
1. Записать двоичное представление абсолютной величины числа (например, 00000101 для числа -5).
2. Произвести инвертирование (получить обратный код) двоичного числа (например, для числа 00000101 это будет 11111010).
3. Прибавить единицу для получения дополнительного кода числа (например,
11111010+1=11111011= = дополнительный код числа — 5).
Такую же процедуру нужно проделать и для получения абсолютного значения отрицательного числа по его дополнитель- ному коду: следует образовать дополнение числа, выражающего дополнительный код, и затем прибавить единицу, Рассмотрим, например, дополни
тельный код числа 11111011:
11111011=00000100 00000100+1= 00000101= 5
Следовательно, 11111011 есть дополнительный код отрицательного числа - 5.
Заметьте, что число 11111011 можно было бы также интерпретировать как десятичное число 251, если бы его рассматривали как правильное двоичное число, а не как дополнительный код. Поэтому необходимо уметь отличать числа, являющиеся дополнительными кодами, и помнить, что с ними нужно обращаться соответствующим образом.
Дополнительные коды очень удобны для арифметических действий. Выражаю их числа при сложении, вычитании, умножении или делении также дают числа, представляющие собой дополнительные коды. Обычно они используются в микропроцесеорных системах, которые должны оперировать как с положительными, так с отрицательными числами.
Таблица 2.5. Дополнительные коды чисел от —8 до +7