ТОР 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, соответственно. Команды сложения чисел со знаком те же, что и для чисел без знака.
Не нашли, что искали? Воспользуйтесь поиском:
|