Флаг переполнения
Эта статья нуждается в дополнительных цитатах для проверки . ( январь 2008 г. ) |
В компьютерных процессорах флаг переполнения (иногда называемый флагом V ) обычно представляет собой один бит в регистре состояния системы , используемый для индикации того, что в операции произошло арифметическое переполнение, указывающее, что результат с дополнением до двух со знаком не помещается в количество битов, используемых для результата. Некоторые архитектуры могут быть настроены на автоматическую генерацию исключения для операции, приводящей к переполнению.
Например, предположим, что мы сложили 127 и 127, используя 8-битные регистры. 127+127 равно 254, но при использовании 8-битной арифметики результатом будет 1111 1110 в двоичном виде, что представляет собой кодировку с дополнением до двух отрицательного числа -2. Отрицательная сумма положительных операндов (или наоборот) является переполнением. Затем будет установлен флаг переполнения, чтобы программа могла знать о проблеме и смягчить ее или сигнализировать об ошибке. Таким образом, флаг переполнения устанавливается, когда старший бит (здесь он считается битом знака) изменяется путем сложения двух чисел с одинаковым знаком (или вычитания двух чисел с противоположными знаками). Переполнение не может произойти, если знаки двух операндов сложения различны (или знаки двух операндов вычитания одинаковы). [1]
Когда двоичные значения интерпретируются как числа без знака , флаг переполнения не имеет смысла и обычно игнорируется. Одним из преимуществ арифметики с дополнением до двух является то, что для операций сложения и вычитания не требуется различать знаковые и беззнаковые операнды. По этой причине большинство наборов компьютерных команд не различают знаковые и беззнаковые операнды, генерируя как флаги (знакового) переполнения, так и (беззнаковые) флаги переноса для каждой операции, и оставляя возможность следовать инструкциям, чтобы обратить внимание на тот, который представляет интерес. [2]
На внутреннем уровне флаг переполнения обычно генерируется посредством исключающего или внутреннего переноса в и из него знаковый бит .
Побитовые операции (и, или, xor, not, Rotate) не имеют понятия знакового переполнения, поэтому определяемое значение варьируется в зависимости от архитектуры процессора. Некоторые процессоры очищают бит безоговорочно (что полезно, поскольку побитовые операции устанавливают флаг знака, а флаг очистки переполнения указывает, что флаг знака действителен), другие оставляют его неизменным, а некоторые устанавливают для него неопределенное значение. Сдвиги и умножения позволяют получить четко определенное значение, но оно не реализуется последовательно. Например, набор команд x86 определяет флаг переполнения только для умножений и 1-битных сдвигов; многобитовые сдвиги оставляют его неопределенным.
Ссылки
[ редактировать ]- ^ Холодов, Игорь (1 ноября 2008 г.). «Обнаружение переполнения: сложение знаковых чисел» . CIS77 Введение в компьютерные системы (конспекты курса). Бристольский общественный колледж . Проверено 30 декабря 2020 г.
- ^ Аллен, Ян Д. (25 февраля 2011 г.). «Флаг CARRY и флаг OVERFLOW в двоичной арифметике» . DAT 2343 Архитектура компьютерных систем (конспекты курса). Алгонкинский колледж .