<<
>>

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

Теперь настала пора раскрыть небольшой секрет. Дело в том, что на самом деле процессор не подозревает о различии между числами со знаком и числами без зна- ка. Вместо этого у него есть средства фиксации возникновения характерных ситуа- ций, складывающихся в процессе вычислений.
Некоторые из них мы рассмотрели ранее при обсуждении команд сложения чисел без знака — это учет флага перено- са CF. Установка этого флага в 1 говорит о том, что произошел выход за пределы разрядности операндов. Далее с помощью команды ADC можно учесть возможность такого выхода (переноса из младшего разряда) во время работы программы. Другое средство фиксации характерных ситуаций в процессе арифметических вычислений — регистрация состояния старшего (знакового) разряда операн- да, которое осуществляется с помощью флага переполнения OF в регистре EFLAGS (бит И). В главе 4 мы рассматривали, как представляются числа в компьютере. При этом отмечали, что положительные числа представляются в двоичном коде, а отрица- тельные — в дополнительном. Рассмотрим различные варианты сложения чисел. Примеры призваны показать поведение двух старших битов операндов и правиль- ность результата операции сложения. Первый вариант сложения чисел: 30566 = 01110111 01100110 + ■ 00687 = 00000010 10101111 31253 = 0111101000010101. Следим за переносами из 14-го и 15-го разрядов и за правильностью результа- та: переносов нет, результат правильный. Второй вариант сложения чисел: 30566 = 01110111 01100110 + 30566 = 0111011101100110 61132 = ИЮНЮ 11001100. Произошел перенос из 14-го разряда; из 15-го разряда переноса нет. Результат неправильный, так как имеется переполнение — значение числа получилось боль- ше, чем то, которое может иметь 16-разрядное число со знаком (+32 767). Третий вариант сложения чисел: -30566 = 10001000 10011010 + -04875= 11101100 11110101 -35441 = 01110101 10001111. Произошел перенос из 15-го разряда, из 14-го разряда нет переноса.
Результат неправильный, так как вместо отрицательного числа получилось положительное (в старшем бите находится 0). Четвертый вариант сложения чисел: -4875= 11101100 11110101 + -4875= 1110110011110101 . -9750 = 11011001 11101010. Есть переносы из 14-го и 15-го разрядов. Результат правильный. Таким образом, мы исследовали все случаи и выяснили, что ситуация перепол- нения (установка флага OF в 1) происходит при переносе: * из 14-го разряда (для положительных чисел со знаком); в из 15-го разряда (для отрицательных чисел). И, наоборот, переполнения не происходит (то есть флаг OF сбрасывается в 0), если есть перенос из обоих разрядов или перенос отсутствует в обоих разрядах. Таким образом, ситуация переполнение регистрируется процессором с помо- щью флага переполнения 0 F, Дополнительно к флагу OF при переносе из старшего разряда устанавливается в 1 и флаг переноса CF. Так как процессор не знает о су- ществовании чисел со знаком и без знака, то вся ответственность за правильность действий с получившимися числами ложится на программиста. Теперь, наверное, понятно, почему мы столько внимания уделили тонкостям сложения чисел со зна- ком. Учтя все это, мы сможем организовать правильный процесс сложения чисел — будем анализировать флаги CF и OF и принимать правильное решение! Проанали- зировать флаги CF и OF можно командами условного переходаJС\ЗNС и ЗО\JNО соот- ветственно (глава 10). Что же касается команд сложения чисел со знаком, то из изложенного ранее понятно, что в архитектуре IA-32 сами команды сложения чисел со знаком те же, что и для чисел без знака.
<< | >>
Источник: В. И. Юров. Assembler. Учебник для вузов. 2-е изд. 2003

Еще по теме Сложение двоичных чисел со знаком:

  1. Прием сложения мысленной картины.
  2. Прием сложения мысленной картины.
  3. Статья 72. Правила сложения наказаний и зачет срока предварительного заключения
  4. Трактовка чисел нумерологического эгрегора
  5. Характеристики чисел года соляра
  6. 3.5.2. Начнем со знакомых образов
  7. Как знакомиться на улице
  8. Информация от родственников и знакомых
  9. Информация от родственников и знакомых
  10. Знакомиться - это естественно. А отказываться от знакомства - неестественно
  11. 1. Порядок определения сроков наказаний при сложении наказаний
  12. МОЙ ОБЫЧНЫЙ РАБОЧИЙ ДЕНЬ (рассказ знакомого менеджера)