Флаг переполнения OF - единственный флаг в старшем байте регистра флагов, который устанавливается обычными арифметическими операциями. Остальные флаги старшего байта находятся под прямым управлением программиста. Флаг переполнения - еще один арифметический флаг, как флаг нуля и переноса. Флаг переполнения необходим для арифметики в дополнительном коде в такой же степени, как флаг переноса для арифметики повышенной точности.
В арифметике чисел, представленных в дополнительном коде, старший бит используется для хранения знака числа. Сумматор микропроцессора работает как со знакопеременными числами, так и беззнаковыми. Обычно сложение чисел со знаком дает верный результат. Однако на которые из чисел, представленных в дополни- тельном коде, при сложении дают неверный результат. Пример на Фиг. 3.14 - сложение двух 8-битовых чисел, представленных в коде двоичного дополнения, - иллюстрирует этот случай. Если 72H и 53H -
Шестнадцатеричное Десятичный эквивалент
------------------------------------------------
72H 114
+ 53H + 83
------ ------
0C5H 197
------------------------------------------------
Фиг. 3.14 8-битовое сложение с переполнением
числа без знака, то результат их сложения верен. Если же это числа, представленные в дополнительном коде со знаком, то результат сложения 0C5H неверен, в коде двоичного дополнения он равен -59. сложение положительных чисел никогда не дает в результате отрицательное. Результат сложения оказался не представимым в диапазоне значений 8-битовых чисел в двоичном коде (от 127 до -128). Этот эффект принято называть переполнением, так как сумма вышла за пределы диапазона чисел, представимых в дополнительном коде.Важно заметить, что переполнение и перенос - два различных флага и имеют разное значение. На Фиг. 3.14 нет переноса, так как сложение без знака дает правильный результат, а есть переполнение: что сложение со знаком дает неверный результат. Возможен и случай одновременно переноса и переполнения, как показано на Фиг. 3.15.
Шестнадцатеричное Двоичное дополнение Беззнаковое
------------------------------------------------------------
8EH -114 142
0ADH - 83 173
----- ----- ----
1 3BH -197 315
------------------------------------------------------------
Фиг. 3.15 8-битовое сложение с переносом и переполнением
Здесь показан пример сложения двух отрицательных чисел. Результат -197 выходит за пределы диапазона представимости в дополнительном коде. Это показано тем, что 8-битовый результат 3BH - положительное число. Кроме того в этом примере устанавливается флаг переноса, означающий, что сложение без знака дало число, большее максимального представимого. В случае 8-битовых чисел максимальное число равно 255.
Вообще говоря, операция сложения в процессоре выполняется одинаково над числами и со знаком, и без знака, а также с десятичными числами. Флаги переноса, дополнительного переноса и переполнения содержат информацию о выполненной операции, позволяя программе определить верный результат в используемой системе счисления. Флаг переполнения показывает, что результат арифметической операции выходит за пределы диапазона чисел, представленных в дополнительном виде. Переполнение отличается от переноса, который показывает, что произошел перенос из старшего бита результата.