Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
CMOVcc
Влияние команды на флаги и форматы команды:
0F 47 /r |
CMOVA r16, r/m16 |
Переслать данные из r/m16 в r16, если выше (CF=0 и ZF=0) |
Pentium Pro |
cmova dx,[di] |
0F 47 /r |
CMOVA r32, r/m32 |
Переслать данные из r/m32 в r32, если выше (CF=0 и ZF=0) |
Pentium Pro |
cmova eax,ecx |
0F 43 /r |
CMOVAE r16, r/m16 |
Переслать данные из r/m16 в r16, если выше или равно (CF=0) |
Pentium Pro |
cmovae bx,ax |
0F 43 /r |
CMOVAE r32, r/m32 |
Переслать данные из r/m32 в r32, если выше или равно (CF=0) |
Pentium Pro |
cmovae edx,[ebx] |
0F 42 /r |
CMOVB r16, r/m16 |
Переслать данные из r/m16 в r16, если ниже (CF=1) |
Pentium Pro |
cmovb ax,[sp] |
0F 42 /r |
CMOVB r32, r/m32 |
Переслать данные из r/m32 в r32, если ниже (CF=1) |
Pentium Pro |
cmovb edi,[esi] |
0F 46 /r |
CMOVBE r16, r/m16 |
Переслать данные из r/m16 в r16, если ниже или равно (CF=1 или ZF=1) |
Pentium Pro |
cmovbe si,bx |
0F 46 /r |
CMOVBE r32, r/m32 |
Переслать данные из r/m32 в r32, если ниже или равно (CF=1 или ZF=1) |
Pentium Pro |
cmovbe eax,[esp] |
0F 42 /r |
CMOVC r16, r/m16 |
Переслать данные из r/m16 в r16, если перенос (CF=1) |
Pentium Pro |
comc ax,[bx] |
0F 42 /r |
CMOVC r32, r/m32 |
Переслать данные из r/m32 в r32, если перенос (CF=1) |
Pentium Pro |
cmovc esi,eax |
0F 44 /r |
CMOVE r16, r/m16 |
Переслать данные из r/m16 в r16, если равно (ZF=1) |
Pentium Pro |
cmove dx,si |
0F 44 /r |
CMOVE r32, r/m32 |
Переслать данные из r/m32 в r32, если равно (ZF=1) |
Pentium Pro |
cmove edx,[eax] |
0F 4F /r |
CMOVG r16, r/m16 |
Переслать данные из r/m16 в r16, если больше (ZF=0 и SF=OF) |
Pentium Pro |
cmovg cx,[bx] |
0F 4F /r |
CMOVG r32, r/m32 |
Переслать данные из r/m32 в r32, если больше (ZF=0 и SF=OF) |
Pentium Pro |
cmovg ecx,edx |
0F 4D /r |
CMOVGE r16, r/m16 |
Переслать данные из r/m16 в r16, если больше или равно (SF=OF) |
Pentium Pro |
cmovge dx,di |
0F 4D /r |
CMOVGE r32, r/m32 |
Переслать данные из r/m32 в r32, если больше или равно (SF=OF) |
Pentium Pro |
cmovge ebx, edi |
0F 4C /r |
CMOVL r16, r/m16 |
Переслать данные из r/m16 в r16, если меньше (SF<>OF) |
Pentium Pro |
cmovl di, [si+bx] |
0F 4C /r |
CMOVL r32, r/m32 |
Переслать данные из r/m32 в r32, если меньше (SF<>OF) |
Pentium Pro |
cmovl esi, edi |
0F 4E /r |
CMOVLE r16, r/m16 |
Переслать данные из r/m16 в r16, если меньше или равно (ZF=1 или SF<>OF) |
Pentium Pro |
cmovle di,bx |
0F 4E /r |
CMOVLE r32, r/m32 |
Переслать данные из r/m32 в r32, если меньше или равно (ZF=1 или SF<>OF) |
Pentium Pro |
cmovle edi,[ebx] |
0F 46 /r |
CMOVNA r16, r/m16 |
Переслать данные из r/m16 в r16, если не выше (CF=1 или ZF=1) |
Pentium Pro |
cmovna ax,si |
0F 46 /r |
CMOVNA r32, r/m32 |
Переслать данные из r/m32 в r32, если не выше (CF=1 или ZF=1) |
Pentium Pro |
cmovna eax,[esi] |
0F 42 /r |
CMOVNAE r16, r/m16 |
Переслать данные из r/m16 в r16, если не выше или равно (CF=1) |
Pentium Pro |
cmovnae ax,[bx] |
0F 42 /r |
CMOVNAE r32, r/m32 |
Переслать данные из r/m32 в r32, если не выше или равно (CF=1) |
Pentium Pro |
cmovnae edi,ebx |
0F 43 /r |
CMOVNB r16, r/m16 |
Переслать данные из r/m16 в r16, если не ниже (CF=0) |
Pentium Pro |
cmovnb di,[si+1] |
0F 43 /r |
CMOVNB r32, r/m32 |
Переслать данные из r/m32 в r32, если не ниже (CF=0) |
Pentium Pro |
cmovnb edi,[ecx] |
0F 47 /r |
CMOVNBE r16, r/m16 |
Переслать данные из r/m16 в r16, если не ниже или равно (CF=0 и ZF=0) |
Pentium Pro |
cmovnbe cx,ax |
0F 47 /r |
CMOVNBE r32, r/m32 |
Переслать данные из r/m32 в r32, если не ниже или равно (CF=0 и ZF=0) |
Pentium Pro |
cmovnbe eax, [esi] |
0F 43 /r |
CMOVNC r16, r/m16 |
Переслать данные из r/m16 в r16, если нет переноса (CF=0) |
Pentium Pro |
cmovnc di,[sp+5] |
0F 43 /r |
CMOVNC r32, r/m32 |
Переслать данные из r/m32 в r32, если нет переноса (CF=0) |
Pentium Pro |
cmovnc edi,ebx |
0F 45 /r |
CMOVNE r16, r/m16 |
Переслать данные из r/m16 в r16, если не равно (ZF=0) |
Pentium Pro |
cmovne cx,[si] |
0F 45 /r |
CMOVNE r32, r/m32 |
Переслать данные из r/m32 в r32, если не равно (ZF=0) |
Pentium Pro |
cmovne ebx,ecx |
0F 4E /r |
CMOVNG r16, r/m16 |
Переслать данные из r/m16 в r16, если не больше (ZF=1 или SF<>OF) |
Pentium Pro |
cmovng ax,[bp+3] |
0F 4E /r |
CMOVNG r32, r/m32 |
Переслать данные из r/m32 в r32, если не больше (ZF=1 или SF<>OF) |
Pentium Pro |
cmovng ecx,[eax] |
0F 4C /r |
CMOVNGE r16, r/m16 |
Переслать данные из r/m16 в r16, если не больше или равно (SF<>OF) |
Pentium Pro |
cmovnge si,di |
0F 4C /r |
CMOVNGE r32, r/m32 |
Переслать данные из r/m32 в r32, если не больше или равно (SF<>OF) |
Pentium Pro |
cmovnge edi,ecx |
0F 4D /r |
CMOVNL r16, r/m16 |
Переслать данные из r/m16 в r16, если не меньше (SF=OF) |
Pentium Pro |
cmovnl cx,[di] |
0F 4D /r |
CMOVNL r32, r/m32 |
Переслать данные из r/m32 в r32, если не меньше (SF=OF) |
Pentium Pro |
cmovnl cx,[ebp] |
0F 4F /r |
CMOVNLE r16, r/m16 |
Переслать данные из r/m16 в r16, если не меньше или равно (ZF=0 и SF=OF) |
Pentium Pro |
cmovnle bp,ax |
0F 4F /r |
CMOVNLE r32, r/m32 |
Переслать данные из r/m32 в r32, если не меньше или равно (ZF=0 и SF=OF) |
Pentium Pro |
cmovnle esi,ebp |
0F 41 /r |
CMOVNO r16, r/m16 |
Переслать данные из r/m16 в r16, если нет переполнения (OF=0) |
Pentium Pro |
cmovno sp,bp |
0F 41 /r |
CMOVNO r32, r/m32 |
Переслать данные из r/m32 в r32, если нет переполнения (OF=0) |
Pentium Pro |
cmovno esp,[edi] |
0F 4B /r |
CMOVNP r16, r/m16 |
Переслать данные из r/m16 в r16, если нет паритета (PF=0) |
Pentium Pro |
cmovnp ax,sp |
0F 4B /r |
CMOVNP r32, r/m32 |
Переслать данные из r/m32 в r32, если нет паритета (PF=0) |
Pentium Pro |
covnp eax,edi |
0F 49 /r |
CMOVNS r16, r/m16 |
Переслать данные из r/m16 в r16, если положительно (SF=0) |
Pentium Pro |
cmons cx,bp |
0F 49 /r |
CMOVNS r32, r/m32 |
Переслать данные из r/m32 в r32, если положительно (SF=0) |
Pentium Pro |
cmovns edx,edi |
0F 45 /r |
CMOVNZ r16, r/m16 |
Переслать данные из r/m16 в r16, если не нуль (ZF=0) |
Pentium Pro |
cmovnz sp,[bp] |
0F 45 /r |
CMOVNZ r32, r/m32 |
Переслать данные из r/m32 в r32, если не нуль (ZF=0) |
Pentium Pro |
cmovnz ecx,esi |
0F 40 /r |
CMOVO r16, r/m16 |
Переслать данные из r/m16 в r16, если переполнение (OF=1) |
Pentium Pro |
cmovo ax,[bx+si] |
0F 40 /r |
CMOVO r32, r/m32 |
Переслать данные из r/m32 в r32, если переполнение (OF=1) |
Pentium Pro |
cmovo ecx,[esi] |
0F 4A /r |
CMOVP r16, r/m16 |
Переслать данные из r/m16 в r16, если паритет (PF=1) |
Pentium Pro |
cmovp dx,[si] |
0F 4A /r |
CMOVP r32, r/m32 |
Переслать данные из r/m32 в r32, если паритет (PF=1) |
Pentium Pro |
cmovp ecx,eax |
0F 4A /r |
CMOVPE r16, r/m16 |
Переслать данные из r/m16 в r16, если четно (PF=1) |
Pentium Pro |
cmovpe ax,dx |
0F 4A /r |
CMOVPE r32, r/m32 |
Переслать данные из r/m32 в r32, если четно (PF=1) |
Pentium Pro |
cmovpe esp,[edi] |
0F 4B /r |
CMOVPO r16, r/m16 |
Переслать данные из r/m16 в r16, если нечетно (PF=0) |
Pentium Pro |
cmovpo ax,[di] |
0F 4B /r |
CMOVPO r32, r/m32 |
Переслать данные из r/m32 в r32, если нечетно (PF=0) |
Pentium Pro |
cmovpo ecx,eax |
0F 48 /r |
CMOVS r16, r/m16 |
Переслать данные из r/m16 в r16, если отрицательно (SF=1) |
Pentium Pro |
cmovs dx,[bp+di] |
0F 48 /r |
CMOVS r32, r/m32 |
Переслать данные из r/m32 в r32, если отрицательно (SF=1) |
Pentium Pro |
cmovs ecx,[edx] |
0F 44 /r |
CMOVZ r16, r/m16 |
Переслать данные из r/m16 в r16, если нуль (ZF=1) |
Pentium Pro |
cmovz dx,ax |
0F 44 /r |
CMOVZ r32, r/m32 |
Переслать данные из r/m32 в r32, если нуль (ZF=1) |
Pentium Pro |
cmovz eax,ebp |
Описание:
Команда CMOVcc осуществляет проверку состояния регистра EFLAFS и производит операцию переноса данных, если соответствующие флаги находятся в состоянии, заданном командой. Если условие (cc) не выполняется, то продолжается исполнение программы с команды следующей за CMOVcc. Команды CMOVcc могут переносить 16- и 32-битные данные из памяти в регистр общего назначения или из одного регистра общего назначения в другой. Перенос 8-битных данных не поддерживается.
Команды CMOVcc поддерживаются не всеми процессорами Pentium Pro, Pentium II … Для определения того, поддерживает ли конкретная модель процессора указанную команду, следует использовать команду CPUID.
Операция:
temp = DEST;
IF condition TRUE
THEN
DEST = SRC;
ELSE
DEST = temp;
FI;
Особые ситуации защищенного режима:
#GP(0), если результат находится в сегменте, запрещенном для записи, если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#SS, если любая часть операнда находится вне пространства эффективных адресов в сегменте SS.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки), страничная ошибка.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru