Флаг переполнения (OF) сигнализирует выход за допустимый диапазон результата арифметических операций над знаковыми операндами. Его значение определяется как (X XOR Y), где X суть перенос за разрядную сетку (то есть то, что заносится во флаг CF), а Y суть перенос в старший разряд. Таким образом, флаг OF предназначен для обнаружения переполнения при работе исключительно со знаковыми операндами — для беззнаковых эту работу выполняет флаг CF.

Устанавливается в командах сложения и вычитания, если результат не помещается в формате, при этом и операнды и результат интерпретируются как знаковые числа. Аппаратно он формируется совпадением переносов из двух старших разрядов при сложении и заёмов в два старших разряда при вычитании (если они совпадают, то флаг равен нулю).

Переполнение при сложении чисел возникает только в том случае, если операнды имеют одинаковые знаки. Переполнение фиксируется тремя способами:

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

Примечания

Ссылки Перенос и переполнение — что они представляют собой на самом деле?

Категория:Обработка команд