Перейти до вмісту

Прапор переносу

Матеріал з Вікіпедії — вільної енциклопедії.

У комп'ютерних процесорах, прапор переносу (біт переносу у регістрі стану процесора), який зазвичай позначається як CF (англ. Carry flag) — спеціальний прапор, який вказує на випадок арифметичного перенесення або запозичення під час зсуву старшого біта арифметико-логічним пристроєм (АЛП). Це дозволяє виконувати дії з довшими числами, ніж ті, що використовуються в АЛП.

Прапор переносу встановлюється в «1» у двох випадках:

  • коли виконується перенесення одиниці до знакового розряду (7, 15, 31-го) і перенесення за межі розрядної сітки (з 7, 15, 31-го розряду до 8, 16, 32-го, які не існують за даної розрядності)
  • коли виконується ЛИШЕ перенесення одиниці за межі розрядної сітки

Використання

[ред. | ред. код]

Застосовується для виконання операцій над числами більшої розрядності.

Приклад використання для 8-бітової архітектури

[ред. | ред. код]
(прапор не встановлений)
(прапор встановлений)

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

У процесорах Intel 8086 прапор «CF» також використовується для відображення операції порівняння та індикації результату множення (спільно з прапором переповнення «OF»).

Приклад для 16-бітової архітектури

[ред. | ред. код]

Зазвичай під час виконання арифметичних операцій на зразок додавання або віднімання процесор Intel 8088 може працювати з не більш ніж 16-бітовими числами. Проте в деяких випадках доводиться маніпулювати з числами які перевищують 216. Наприклад, для додавання двох 32-бітових чисел програмі доведеться додати спочатку молодші частини чисел, а потім — старші. Розглянемо додавання 32-бітових чисел 22224444H і 3333EEEEH:

         друге додавання перше додавання
      ---------------------------------------
         2222              4444
         3333              EEEE
            1 (перенос від першого)		
         ----              ----
         5556              13332     
      --------------------------------------- 
        32-бітове додавання з перенесенням

Перше 16-бітове додавання 4444H і EEEEH дає результат 13332H. Оскільки результат має довжину 17 біт, він не поміститься в 16-бітовий регістр. Прапор перенесення регістра станів отримає цей додатковий біт арифметичної інформації. Під час другого 16-бітового додавання додаються не тільки числа 2222H і 3333H, але й значення прапора переносу. Існує дві форми команди додавання: команда ADD додає два 16-бітових числа, даючи 17-бітовий результат, а команда додавання з перенесенням ADC додає два 16-бітових числа і значення прапора переносу, даючи також 17-бітовий результат.

Команди керування прапором переносу CF

[ред. | ред. код]
  1. CLC скидає прапор CF
  2. STC встановлює прапор CF в одиницю
  3. CMC інвертує значення прапора CF

Ці команди не мають операндів і результатом є тільки зміна значення відповідного прапора.

Література

[ред. | ред. код]
  • Л. Скэнлон. Флаги // Персональные ЭВМ 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.
  • П. Абель. Язык Ассемблера для IBM PC и программирования = IBM PC Assembler Language and programming / пер. с англ. Ю. В. Сальникова. — М. : Высшая школа, 1992. — С. 24—26.

Посилання

[ред. | ред. код]