Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Сложение двоичных чисел со знаком




Микропроцессор не различает числа со знаком и без знака. Вместо этого у него есть средства фиксирования возникновения характерных ситуаций, одно из них –это флаг переноса cf, установка которого в 1 говорит о том, что произошел выход за пределы разрядности операндов, и команда adc, которая учитывает возможность такого выхода (перенос из младшего разряда). Другое средство - это регистрация состояния старшего (знакового) разряда операнда, которое осуществляется с помощью флага переполнения of в регистре eflags (бит 11).

В компьютере числа представляются так: положительные числа — в двоичном коде, а отрицательные — в дополнительном коде. Рассмотрим различные варианты сложения чисел. Примеры призваны показать поведение двух старших битов операндов и правильность результата операции сложения.

Пример 8.1. Сложение чисел 1

30566 = 01110111 01100110

+

00687 = 00000010 10101111

31253 = 0111101000010101

Следим за переносами из 14-го и 15-го разрядов и правилъностью результата: переносов пет, результат правильный.

Пример 8.2. Сложение чисел 2

30566*0111011101100110

+

30566-01110111 01100110

61132 = 11101110 11001100

Произошел перенос из 14-го разряда; из 15-го разряда переноса нет. Результат неправильный, так как имеется переполнение — значение числа получилось больше, чем то, которое может иметь 16-битное число со знаком (+32 767).

Пример 8.3. Сложение чисел 3

-30566= 10001000 10011010

+

-04875 = 11101100 11110101

-35441 =01110101 10001111

Произошел перенос из 15-го разряда, из 14-го разряда нет переноса. Результат Неправильный, так как вместо отрицательного числа получилось положительное (в старшем бите находится 0).

Пример 8.4. Сложение чисел 4

-4875= 11101300 11130101

+

-4875 = 1101100 11110101

-9750 = 1101100 11101010

Есть переносы из 14-го и 15-го разрядов. Результат правильный. Таким образом, мы исследовали все случаи и выяснили, что ситуация переполнения (установка флага of в 1) происходит при переносе:

- из 14-го разряда (для положительных чисел со знаком);

- из 15-го разряда (для отрицательных чисел).

И наоборот, переполнения не происходит (то есть флаг of сбрасывается в 0), если есть перенос из обоих разрядов или перенос отсутствует в обоих разрядах. Итак, переполнение регистрируется с помощью флага переполнения of. Дополнительно к флагу of при переносе из старшего разряда устанавливается в 1 и флаг переноса cf. Так как микропроцессор не знает о существовании чисел со знаком и без знака, то вся ответственность за правильность действий с получившимися числами ложится на программиста. Учтя все это, мы сможем организовать правильный процесс сложения чисел — будем анализировать флаги cf и of и принимать правильное решение! Проанализировать флаги cf и of можно командами условного перехода jc\jnc и jo\jno, соответственно. Команды сложения чисел со знаком те же, что и для чисел без знака.

 






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных