Флаг переполнения
Флаг переполнения (OF) сигнализирует выход за допустимый диапазон результата арифметических операций над знаковыми операндами. Его значение определяется как (X XOR Y), где X суть перенос за разрядную сетку (то есть то, что заносится во флаг CF), а Y суть перенос в старший разряд. Таким образом, флаг OF предназначен для обнаружения переполнения при работе исключительно со знаковыми операндами — для беззнаковых[неоднозначная ссылка] эту работу выполняет флаг CF.
Устанавливается в командах сложения и вычитания, если результат не помещается в формате, при этом и операнды и результат интерпретируются как знаковые числа. Аппаратно он формируется совпадением переносов из двух старших разрядов при сложении и заёмов в два старших разряда при вычитании (если они совпадают, то флаг равен нулю).[1]
Переполнение при сложении чисел возникает только в том случае, если операнды имеют одинаковые знаки. Переполнение фиксируется тремя способами:
• сравнение знаков операндов и суммы: если знак суммы отличается от знаков операндов, то фиксируется переполнение;
• сравнение переносов из двух старших разрядов: если они не совпадают, то фиксируется переполнение;
• использование модифицированного знака (под знак отводится два разряда, второй разряд дублирует знак).
Примечания
- ↑ А. Г. Зыков, В. И. Поляков. АРИФМЕТИЧЕСКИЕ ОСНОВЫ ЭВМ Учебное пособие по дисциплине «Дискретная математика». — СПб: Университет ИТМО, 2016, 2016. — С. 49, 50. — 140 с.
Ссылки
Перенос и переполнение — что они представляют собой на самом деле?