Что предпочитаете?

понедельник, 14 февраля 2011 г.

Флаги

В программе нередко требуется принять решение на основании результата только что исполненной микропроцессором команды. Например, Вам может понадобиться выполнить одни действия, если результат сложения оказался нулем  и совсем другие действия в противном случае.
В 16-битовом регистре флагов фиксируется информация о текущем состоянии дел, которая может помочь Вашей программе принять решение. Шесть битов регистра служат для хранения состояний, а три других могут быть использованы для  программного управления режимом работы процессора.

Флаги имеют следующие значения:
  1. Бит 0, флаг переноса CF (carry flag), равен 1, если произошел перенос единицы при сложении или заем единицы при вычитании. В противном случае он равен нулю. Кроме того, CF содержит значение бита, который при сдвиге или циклическом сдвиге регистра или ячейки памяти вышел за их границы, и отражает результат операции сравнения. Наконец, служит индикатором результата умножения.
  2. Бит 2, флаг четности PF (parity flag), равен 1, если в результате операции получено число с четным числом единиц в его битах. В противном случае он равен  нулю. Флаг РF в основном используется в операциях обмена данными.
  3.  Бит 4, вспомогательный флаг переноса AF (auxiliary carry flag), аналогичен флагу CF, только контролирует перенос или заем для третьего бита данных.
  4. Бит 6, флаг нуля ZF (zero flag), равен 1, если в результате операции получен нуль;
  5. Бит 7, флаг знака SF (sign flag), имеет значение только при операциях над числами со знаком. Флаг SF равен 1, если в результате арифметической или логической операции, сдвига или циклического сдвига получено отрицательное число. В противном случае он равен нулю. Иными словами, SF дублирует старший (знаковый) бит результата независимо от того, имеет результат длину 8 или 16 битов.
  6. Бит 8, флаг трассировки TF (trap flag), разрешает микропроцессору  исполнять программу "по шагам" и используется при отладке программ.
  7. Бит 9, флаг прерывания IF (interrupt enable flag), разрешает микропроцессору  реагировать на прерывания от внешних устройств. Сбрасывание IF в нуль заставляет микропроцессор  игнорировать прерывания до тех пор, пока IF не станет равным 1.
  8. Бит 10, флаг направления DF (direction flag), заставляет микропроцессор уменьшать на единицу (DF = 1) или увеличивать на единицу (DF = 0) регистр(ы) индекса после выполнения команды для работы со строками. Если DF = 0, то микропроцессор 8088 будет обрабатывать строку "слева направо" (от младших адресов к старшим). Если DF = 1, то обработка пойдет в обратном направлении (от старших адресов к младшим или справа налево).
  9. Бит 11, флаг переполнения OF (overflow flag), в первую очередь служит идентификатором ошибки при выполнении операций над числами со знаком. Флаг OF равен 1, если результат сложения двух чисел с одинаковым знаком или результат вычитания двух чисел с противоположными знаками выйдет за пределы допустимого диапазона значений операндов. В противном случае он равен 0. Кроме того, OF = 1, если старший (знаковый) бит операнда изменился в результате операции арифметического сдвига. В противном случае он равен 0. В сочетании с флагом CF флаг OF указывает длину результата умножения. Если старшая половина произведения отлична от нуля, то OF и CF равны 1; в противном случае оба эти флага равны 0. Наконец, OF =0, если частное от деления двух чисел переполняет результирующий регистр.

    На рисунке заштрихованы позиции неиспользуемых битов.

6 комментариев:

  1. Спасибо. У меня были две книги по ассемблеру, но потерялись где-то.

    ОтветитьУдалить
  2. Отлично, коротко и понятно, жду информацию по стекам.

    ОтветитьУдалить
  3. Спасибо, в универе у меня сейчас как раз ассемблер идет.

    ОтветитьУдалить
  4. Спасибо за блог в целом и этот пост в частности. Не всегда встретишь на просторах интернета такое четкое и емкое разъяснение

    ОтветитьУдалить
  5. Интересно. 6 битов достаточно, чтобы сказать, каково текущее положение дел.

    ОтветитьУдалить
  6. Круто. Ну как уже заметил выше, про флаги напиши подробнее.

    ОтветитьУдалить