Флаг переноса

Флаг переноса CF (англ. Carry flag) в микропроцессорах — битовый флаг, который устанавливается, если в результате арифметической операции в (n + 1)-м значащем бите появилась единица (соответственно, в результате двоичного сдвига из разрядной сетки ушла единица). На языке ассемблера для 8088-процессоров обозначается как «CF».

Пример использования для восьмибитной архитектуры:

(флаг не установлен)
(флаг установлен)

Таким образом, при операции арифметического сложения флаг можно рассматривать как девятый бит результата.

Общие сведения
Флаг переноса

Для чего нужен

Для арифметических операций над беззнаковыми числами флаг переноса — это признак переполнения. Для знаковых чисел, как правило, есть знаковый отдельный флаг переполнения (OF = overflow flag в 8086).

Чтобы сравнить два числа — «меньше», «больше» или «равны» — у процессоров есть операция CMP, которая вычитает два числа, но не сохраняет результат, только заполняет флаги. По содержимому флагов «перенос» (CF), «переполнение» (OF) и «ноль» (ZF) можно определить результат сравнения. Например, беззнаковое «больше» — это CF=0 и ZF=0.

Чтобы складывать и вычитать длинные числа, есть команды «сложить с переносом» и «вычесть с заимствованием» (Y = A + B + CF, Y = A − B − CF). К слову сказать, вычитание обычно реализуется как A + not(B) + 1, соответственно, вычитание с заимствованием — как A + not(B) + not(CF). Чтобы сдвигать длинные числа, есть команда «двоичный сдвиг через флаг переноса». Также флаг переполнения свидетельствует о смене знака числа (как только сменился - сразу принимает значение "1"), с которым процессор произвел какое либо действие.

См. также

Литература

  • Л. Скэнлон. Флаги // Персональные ЭВМ IBM PC и XT: Программирование на языке ассемблера = IBM PC & XT Assembly Language: A guide for Programmers. Enchanced and Enlarged / пер. с англ. И. В. Емелин. — 2-е изд., стереотипное. — М.: Радио и связь, 1991. — С. 24—26. — 50 000 экз. — ISBN 5-256-00956-7.

Категории