2.2. Двоичное дополнение

Для изображения как положительных, так и отрицательных чисел 8088 применяет арифметику двоичного дополнения. В такой знакопеременной арифметике самый левый бит целого числа указывает на его знак. Положительные числа имеют 0 в старшем бите, а отрицательные - 1. Положительные числа имеют одинаковое значение в знаковой и беззнаковой арифметике. У отрицательных же значение иное. Для того чтобы сделать число отрицательным, изменить его знак на минус, оно дополняется и результат увеличиваетя на единицу. В 4-х битовом примере 5 имеет значение 0101B, в то время как -5 равно 1011B. Пример на Фиг. 2.4 показывает этот метод.

-------------------------------------------------------
  Исходные данные:         5 = 0101B       -5 = 1011B
  Для изменения знака:
  Дополняем                    1010B            0100B
  Добавляем 1                  0001B            0001B
  Результат:              -5 = 0011B        5 = 0101B
-------------------------------------------------------
Фиг. 2.4 Изменение знака.

Пример на Фиг. 2.5 показывает единственность нуля в арифметике двоичного дополнения. То есть -0 равен 0.

--------------------------------------
  Исходные данные:         0 = 0000B
  Для изменения знака:
  Дополняем                    1111B
  Добавляем 1                  0001B
  Результат:               0 = 0000B
--------------------------------------
Фиг. 2.5 единственность нуля.

Для любого n-битового числа в системе с двоичным дополнением наибольшее значение составляет 2**(n-1)-1, а наименьшее -2**(n-1). Ноль - единственен.

В 4-х битовой системе наибольшее число, как показано на Фиг. 2.6, равно 7, а наименьшее -8.

Как мы увидим позднее, процессор 8088 может работать с одним и тем же целым как со значением имеющим или не имеющим знак. Выбор оставлен программисту языка ассемблера. Во всяком случае, когда программа работает в арифметике со знаком, процессор 8088 применяет при проведении операций двоичное дополнение.

ДесятичноеДвоичное ДесятичноеДвоичное
70111 -10000
60110 -20000
50101 -30000
40100 -40000
30011 -50000
20010 -60000
10001 -70000
00000 -80000

Фиг. 2.6 Числа с двоичным дополнением