Коды условий и флаги EFLAGS

      В таблице приведены все коды условий и соответствующие им описания и значения флагов. Эти условия используются в командах CMOVcc, FCMOVcc, Jcc и SETcc.
      Колонка "Код(cc)" содержит название условия, используемое вместо символов "cc" в конкретной команде (например, для кода "NAE" команда Jcc будет выглядеть как JNAE, а команда CMOVcc - CMOVNAE).
      В колонке "Условие" приведены названия условий на русском и английском языках в общепринятом виде.
      Колонка "Часть кода команды" содержит значения кода, добавляемое к основному коду команды и может вам пригодиться, если вы составляете машинный код команды из её компонентов (ассемблерных обозначений), например, при написании компилятора.
      В колонке "Значение флагов" содержится либо значение флага, соответствующее данному условию (например, OF = 1, OF = 0), либо алгоритм, по которому процессор вычисляет возникновение условия (например, (CF OR ZF) = 1 - условие возникает тогда, когда значения флагов CF и ZF, совмещённые логическим "ИЛИ" дают в результате единицу - это значит, что и CF, и ZF равны 1).

      Большинство условий имеют по два названия, например, LE (Less or Equal - меньше или равно) и NG (Not Greater - не больше) представлены одним и тем же кодом, т.к. имеют одинаковый смысл. Такое разнообразие названий придаёт условным командам больше смысла. Термины "выше" (above) и "ниже" (below) ассоциируются со значением флага CF и применяются при сравнении двух целых беззнаковых величин. Термины "больше" (greater) и "меньше" (less) ассоциируются со значениями флагов SF и OF и применяются при сравнении двух целых знаковых величин.

Коды условий и флаги EFLAGS
Код(cc) Условие Часть кода команды Значение флагов
OПереполнение (Overflow)0000OF = 1
NOНет переполнения (No overflow)0001OF = 0
B`NAEНиже (Below) Не выше и не равно (Neither above nor equal)0010CF = 1
NB`AEНе ниже (Not below) Выше или равно (Above or equal)0011CF = 0
E`ZРавно (Equal) Нуль (Zero)0100ZF = 1
NE`NZНе равно (Not equal) Не нуль (Not zero)0101ZF = 0
BE`NAНиже или равно (Below or equal) Не выше(Not above)0110(CF OR ZF) = 1
NBE`AНе ниже и не равно (Neither below nor equal) Выше (Above)0111(CF OR ZF) = 0
SЗнак есть (Sign)1000SF = 1
NSЗнака нет (No sign)1001SF = 0
P`PEЧётность есть (Parity) Паритет чётный (Parity even)1010PF = 1
NP`POЧётности нет (No parity) Паритет не чётный (Parity odd)1011PF = 0
L`NGEМеньше (Less) Не больше и не равно (Neither greater nor equal)1100(SF XOR OF) = 1
NL`GEНе меньше (Not less) Больше или равно (Greater or equal)1101(SF XOR OF) = 0
LE`NGМеньше или равно (Less or equal) Не больше (Not greater)1110((SF XOR OF) OR ZF) = 1
NLE`GНе меньше и не равно (Neither less nor equal) Больше (Greater)1111( (SF XOR OF) OR ZF) = 0

См. также:

  • Взаимодействие команд с флагами EFLAGS

    Приложения Регистр EFLAGS Вопросы? Замечания? Пишите: sasm@narod.ru

      Copyright © Александр Семенко.
    TopList

    Hosted by uCoz