| 0000 0000 0000 0000 | 0000h |
| ... | ... |
| 0111 1111 1111 1111 | 7FFFh |
| 1000 0000 0000 0000 | 8000h |
| ... | ... |
| 1111 1111 1111 1111 | FFFFh |
Раннее отмечалось, что в некоторых случаях числа 8000h ... FFFFh
ведут себя как отрицательные.
Рассмотрим числа 0 ... FFFFh в двоичной системе
счисления. Данный ряд делится на две равные части. Cтарший бит, в двоичном
представлении чисел, выделен жирным шрифтом. Начиная с числа 8000h, старший бит
устанавливается в единицу.
Старший бит является признаком отрицательного числа. По его состоянию микропроцессор определяет знак числа. Но если в программе используются команды для чисел без знака, то микропроцессор игнорирует знаковый бит, и воспринимает диапазон [0 ... FFFFh] как ряд положительных чисел.
Числа, в которых старший бит используется для хранения знака, известны как двоичное дополнение положительных чисел или дополнительный код.
Ранее мы находили дополнительный код шестнадцатеричных чисел (вспомните инверсию шестнадцатеричного числа с добавлением единицы). Дополнительный код двоичного числа определяется аналогично. Например, найдем дополнительный код числа 1101011010001001:
1. Инвертируем число: 1101.0110.1000.1001 (D689h)
?
2. Добавляем к результату единицу: 0010.1001.0111.0110
+ 1
0010.1001.0111.0111 (-2977h)
Вычитание двоичных чисел, например A - B, сводится к их сложению A + (-B). При этом: A не меняется, B преобразуется в дополнительный код. Далее числа складываются. Например, надо произвести вычитание 1101b - 1010b:
11
1101 1101 + (-1010) = 0011 или 13 + (-10) = 3
+0110
10011 (единица в старшем разряде игнорируется)
Упражнение №8
Выполните следующие действия:
1. 1110 - 0011 3. 11110000 - 00110111
2. 1001 - 0110 4. 01110110 - 00111001