Приложение 2. Знаковые числа.

Мы почитаем всех нулями А единицами - себя.

А. С. Пушкин Евгений Онегин.

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

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

Рассмотрим однобайтовые числа. Пусть 00000001В будет представлять 1. По оп­ределению -1 должна удовлетворять соотношению: 1 +(-1)=0. Но таким числом явля­ется 1111111В (старший бит равен 1). Далее, число 2 будет представлено как 00000010В. -2 должно получаться из -1 как (-1)-1. Получим 11111111В-00000001 В=11111110В. Таким образом, -2 представляется вдвоичном виде как 11111110В. При этом, разуме­ется, выполнится соотношение 2+(-2)=0. Данный процесс можно продолжать и даль­ше. При этом получим следующий ряд однобайтовых знаковых чисел:

0 - оооооооов

1 - 00000001В

2 - 00000010В

3 - 00000011В

-3 - 11111101В -2     - 11111110В

-1   - 11111111В

Мы видим, что в одном байте помещаются отрицательные числа от -128 до 127: 127 - 01111111В, -128- 10000000В.

Аналогичные выкладки можно проделать и с двухбайтовыми числами. В резуль­тате получим ряд отрицательных чисел от -32768 до 32767.

Как уже было сказано, как сложение, так и вычитание будут правильно выпол­няться и над числами со знаком и над беззнаковыми числами - все дело в Вашей ин­терпретации. В случае же умножения и деления существуют отдельные команды для знаковых чисел (см. главу 4 и Приложение 1). Существуют и специальные команды работы со знаковыми числами: смена знака преобразовать байт в слово с учетом знака СВ\У, команды сдвига с учетом знаков.

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