Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
PCMPEQW
Влияние команды на флаги и форматы команды:
0F 74 /r |
PCMPEQB mm,mm/m64 |
Проверить, равны ли упакованные байты из mm соответствующим байтам из mm/m64, по результатам сравнения установить mm |
pcmpeqb mm2,mm1 |
0F 75 /r |
PCMPEQW mm,mm/m64 |
Проверить, равны ли упакованные слова из mm соответствующим словам из mm/m64, по результатам сравнения установить mm |
pcmpeqb mm2,[ebp] |
0F 76 /r |
PCMPEQD mm,mm/m64 |
Проверить, равны ли упакованные двойные слова из mm соответствующим двойным словам из mm/m64, по результатам сравнения установить mm |
pcmpeqd mm2,mm3 |
Описание:
Команда PCMPEQ сравнивает элементы операнда-назначения с соответствующими элементами операнда-источника. Если значения элементов равны между собой, то в соответствующий элемент операнда-назначения записываются все единицы, в противном случае записываются все нули.
Операндом-назначением является MMX-регистр. Операндом-источником может быть как MMX-регистр, так и операнд в памяти.
Команда PCMPEQB сравнивает байты операнда-назначения с байтами операнда-источника и устанавливает байты операнда-назначения в соответствии с результатом.
Команда PCMPEQW сравнивает слова операнда-назначения со словами операнда-источника и устанавливает слова операнда-назначения в соответствии с результатом.
Команда PCMPEQD сравнивает двойные слова операнда-назначения с двойными словами операнда-источника и устанавливает двойные слова операнда-назначения в соответствии с результатом.
Операция:
IF Команда PCMPEQB
THEN
IF DEST(7..0) = SRC(7..0)
THEN DEST(7 0) = FFH;
ELSE DEST(7..0) = 0;
FI;
(* Продолжить сравнение байтов со 2-го по 7-й в DEST и SRC *)
IF DEST(63..56) = SRC(63..56)
THEN DEST(63..56) = FFH;
ELSE DEST(63..56) = 0;
FI;
ELSE IF Команда PCMPEQW THEN
IF DEST(15..0) = SRC(15..0)
THEN DEST(15..0) = FFFFH;
ELSE DEST(15..0) = 0;
FI;
(* Продолжить сравнение байтов со 2-го по 7-й в DEST и SRC *)
IF DEST(63..48) = SRC(63..48)
THEN DEST(63..48) = FFFFH;
ELSE DEST(63..48) = 0;
FI;
ELSE (* Команда PCMPEQD *)
IF DEST(31..0) = SRC(31..0)
THEN DEST(31..0) = FFFFFFFFH;
ELSE DEST(31..0) = 0;
FI;
IF DEST(63..32) = SRC(63..32)
THEN DEST(63..32) = FFFFFFFFH;
ELSE DEST(63..32) = 0;
FI;
FI;
Особые ситуации защищенного режима:
#GP(0), если используется некорректный эффективный адрес операнда в памяти в сегментах CS, DS, ES, FS, GS или нулевой селектор.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память при текущем уровне привилегий равном 3.
Особые ситуации режима реальной адресации:
#GP, если любая часть операнда находится вне пространства эффективных адресов в сегментах CS, DS, ES, FS или GS.
#UD, если CRO.EM=1.
#NM, если CRO.TS=1.
#MF, если есть отложенные необработанные незамаскированные исключения FPU.
Особые ситуации режима V86:
Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.
#AC(0) при невыровненной ссылке в память.
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru