назад

Дополнительный код

 

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:

  1. Преобразуем 1010 в дополнительный код: 1010 ® 0101 ® 0101 + 1 = 0110
  2. Выполняем сложение:
    11
    1101 1101 + (-1010) = 0011 или 13 + (-10) = 3
    +0110
    10011 (единица в старшем разряде игнорируется)

 Упражнение №8

Выполните следующие действия:

1. 1110 - 0011     3. 11110000 - 00110111
2. 1001 - 0110 4. 01110110 - 00111001