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