Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерных процессорах флаг переполнения (иногда называемый флагом V ) обычно представляет собой отдельный бит в регистре состояния системы, который используется для указания, когда в операции произошло арифметическое переполнение, что указывает на то, что результат с дополнением до двух со знаком не помещается в количество битов, используемых для результата. Некоторые архитектуры могут быть настроены на автоматическое создание исключения для операции, приводящей к переполнению.

Например, предположим, что мы складываем 127 и 127, используя 8-битные регистры. 127 + 127 равно 254, но с использованием 8-битной арифметики результатом будет 1111 1110 двоичное, что является двоичным кодированием с дополнением -2, отрицательного числа. Отрицательная сумма положительных операндов (или наоборот) - это переполнение. Затем будет установлен флаг переполнения, чтобы программа могла знать о проблеме и смягчать ее или сигнализировать об ошибке. Таким образом, флаг переполнения устанавливается, когда самый старший бит (здесь считается битом знака) изменяется путем добавления двух чисел с одинаковым знаком (или вычитания двух чисел с противоположными знаками). Переполнение не может произойти, если знаки двух операндов сложения различны (или знаки двух операндов вычитания одинаковы). [1]

Когда двоичные значения интерпретируются как числа без знака , флаг переполнения не имеет смысла и обычно игнорируется. Одно из преимуществ арифметики дополнения до двух состоит в том, что операции сложения и вычитания не должны различать операнды со знаком и без знака. По этой причине большинство компьютерных наборов команд не различают операнды со знаком и без знака, генерируя как (подписанные) флаги переполнения, так и (беззнаковые) флаги переноса для каждой операции, и оставляя это следующим инструкциям, чтобы обратить внимание на то, какой из них представляет интерес. [2]

Внутри флаг переполнения обычно генерируется исключающим ИЛИ внутреннего переноса в знаковый бит и обратно .

Побитовые операции (и, или, xor, not, rotate) не имеют понятия подписанного переполнения, поэтому определенное значение варьируется в зависимости от архитектуры процессора; одни очищают бит безоговорочно, другие оставляют его без изменений и по-прежнему устанавливают неопределенное значение. Сдвиги и умножения допускают четко определенное значение, но оно не реализуется последовательно. Например, набор инструкций x86 определяет только флаг переполнения для умножений и 1-битных сдвигов; многобитовые сдвиги оставляют его неопределенным.

Ссылки [ править ]

  1. Холодов, Игорь (1 ноября 2008 г.). «Обнаружение переполнения: добавление номеров со знаком» . CIS77 Введение в компьютерные системы (примечания к курсу). Бристольский общественный колледж . Проверено 30 декабря 2020 .
  2. Аллен, Ян Д. (25 февраля 2011 г.). «Флаг CARRY и флаг OVERFLOW в двоичной арифметике» . DAT 2343 Архитектура компьютерных систем (примечания к курсу). Алгонкинский колледж .