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

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до: навігація, пошук

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

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

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

Використання[ред.ред. код]

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

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

01111111_2 + 00000001_2 = (0)  10000000_2 (прапор не встановлений)
11111111_2 + 00000001_2 = (1)  00000000_2 (прапор встановлений)

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

У процесорах 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
  • П. Абель. «Язык Ассемблера для IBM PC и программирования» оригинал «IBM PC Assembler Language and programming» пер. с англ. Ю. В. Сальникова. Высшая школа 1992. страницы 24—26

Посилання[ред.ред. код]