Флаг переполнения
Флаг переполнения
Флаг переполнения 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.
Вообще говоря, операция сложения в процессоре
выполняется одинаково над числами и со знаком, и без знака, а также
с десятичными числами. Флаги переноса, дополнительного переноса и
переполнения содержат информацию о выполненной операции, позволяя
программе определить верный результат в используемой системе
счисления. Флаг переполнения показывает, что результат
арифметической операции выходит за пределы диапазона чисел,
представленных в дополнительном виде. Переполнение отличается от
переноса, который показывает, что произошел перенос из старшего
бита результата.