В таблице приведены все коды условий и соответствующие им описания и значения флагов. Эти условия используются в командах 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 и применяются при сравнении двух целых знаковых величин.
Код(cc) | Условие | Часть кода команды | Значение флагов |
O | Переполнение (Overflow) | 0000 | OF = 1 |
NO | Нет переполнения (No overflow) | 0001 | OF = 0 |
B`NAE | Ниже (Below) Не выше и не равно (Neither above nor equal) | 0010 | CF = 1 |
NB`AE | Не ниже (Not below) Выше или равно (Above or equal) | 0011 | CF = 0 |
E`Z | Равно (Equal) Нуль (Zero) | 0100 | ZF = 1 |
NE`NZ | Не равно (Not equal) Не нуль (Not zero) | 0101 | ZF = 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) | 1000 | SF = 1 |
NS | Знака нет (No sign) | 1001 | SF = 0 |
P`PE | Чётность есть (Parity) Паритет чётный (Parity even) | 1010 | PF = 1 |
NP`PO | Чётности нет (No parity) Паритет не чётный (Parity odd) | 1011 | PF = 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 | Вопросы? Замечания? Пишите: sasm@narod.ru |
Copyright © Александр Семенко. |