Виды машинных циклов. Слово состояния процессора. Слово состояния МП КР580ВМ80А. Ввод-вывод в режиме прерывания. Алгоритм обслуживания прерываний, страница 31

(-b7) b6 b5 b4 b3 b2 b1 b0.

Определим, что в этом коде представляет, например, двоичное число 11001101В:

-1×27 + 1×26 +0×25 + 0×24 + 1×23 + 1×22 + 0×21 + 1×20 =

= -128 + 64 + 8 + 4 + 1 = -51D.

Итак, исходное двоичное число 11001101В в дополнительном коде – это отрицательное число -51. А двоичное число 01001101В – это

-0×27 + 1×26 +0×25 + 0×24 + 1×23 + 1×22 + 0×21 + 1×20 =

= 64 + 8 + 4 + 1 = 77D

число положительное. Следовательно, единица в старшем разряде числа говорит о том, что число отрицательное, а ноль – что число положительное. Таким образом в дополнительном коде восемью двоичными разрядами можно представить числовой ряд от -128до +127:

10000000

-128

10000001

-127

10000010

-126

. . .

. . .

11111110

-2

11111111

-1

00000000

0

00000001

1

00000010

2

. . .

. . .

01111110

126

01111111

127.

Из приведенного примера видно, во-первых, что модуль числа определяется семью младшими разрядами, а не всеми восемью, как в прямом коде, а во-вторых, что дополнительный код положительного числа совпадает с его прямым кодом. Следовательно, в дополнительном коде целесообразно представлять отрицательные числа.

Перевод числа в дополнительный код осуществляется в несколько этапов:

1.  На первом этапе (если это требуется) модуль отрицательного числа представляется в прямом двоичном коде;

2.  На втором этапе полученное двоичное число представляется в обратном (инверсном) коде – единицы заменяются нулями, нули – единицами;

3.  На третьем этапе к полученному числу в инверсном коде прибавляется единица. Получившееся в результате двоичное число и есть дополнительный код исходного числа.

В качестве примера представим в дополнительном коде число минус 9:

прямой двоичный код числа 9:

00001001

инверсия:

11110110

прибавление единицы:

+1

дополнительный двоичный код числа -9:

11110111.

Единица в старшем разряде получившегося результата говорит о том, что число отрицательное. Кстати, после выполнения арифметических операций с числами с разными знаками, могут возникнуть трудности с определением модуля получившегося отрицательного числа (при положительном результате, то есть, когда в старшем разряде 0, таких трудностей не возникает, так как получается прямой двоичный код числа). Чтобы не расписывать все возможные двоичные коды отрицательных чисел (при использовании восьмиразрядной сетки – это, как показано выше, 128 чисел, а при использовании шестнадцатиразрядной сетки – 32768 чисел), достаточно получить дополнительный код отрицательного числа (то есть, проделать то же самое с полученным результатом). В результате получится прямой двоичный код, по которому просто определить модуль числа.

Таким образом, представление двоичного числа в дополнительном коде меняет его знак на обратный, а также изменяет содержимое разрядов числа таким образом, что операция вычитания двоичных чисел заменяется операцией сложения. Операция сложения очень проста с точки зрения двоичной арифметики, к тому же очень просто реализуется схемным путем (поэтому-то операция сложения у большинства микропроцессоров – одна из самых «быстрых»). Большинство микропроцессоров не приспособлены для прямого вычитания двоичных чисел, и операция вычитания заменяется операциями перевода вычитаемого в дополнительный код и операцией сложения этого кода с прямым кодом уменьшаемого.