logo

Главная Система команд x86 Набор команд SIMD CMPPS

Система команд x86

Программирование - Архитектура и система команд микропроцессоров x86
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

CMPPS

Сравнить упакованные короткие вещественные значения

Влияние команды на флаги и форматы команды:

I

D

Z

O

U

P

*

*

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

0F C2 /r ib

CMPPS xmm1, xmm2/m128, imm8

Сравнить (по условию imm8) упакованные короткие вещественные значения из xmm1 с соответствующими значениями из xmm2/m128, по результатам сравнения  установить элементы  xmm1

Pentium III

cmpps xmm3, xmm5, 2

Описание:

Команда CMPPS сравнивает упакованные короткие вещественные значения из операнда-источника с соответствующими короткими вещественными, упакованными в операнде-назначении. По результатам сравнения соответствующие 32-разрядные операнды операнда-назначения заполняются либо единицами, либо нулями.

Третий операнд команды (непосредственное значение imm8) задает условие операции сравнения (0 — равно, 1 — меньше, 2 — меньше либо равно, 3 — несравнимо, 4 — не равно, 5 — не меньше, 6 — не меньше и не равно, 7 — сравнимо). Условие сравненя считается выполненным (True), если выполняется: DEST условие SRC. Например, для входного значения imm8 = 1, условие DEST < SRC выполняется (True), если DEST =2, SRC =8, и не выполняется, если DEST =1, SRC =-5.

Если заданное условие сравнения для соответствующей пары коротких вещественных операндов исполняется, то в соответсвующее 32-разрядное поле операнда-назначения помещаются все 1 (True), в противном случае — все 0 (False).

Операнды считаются несравнимыми, если любой из них NaN, и сравнимыми в противном случае. Для условий сравнения 1, 2, 5, 6, если один из операндов NaN, генерируется SIMD-исключение Недействительная операция (#I).

Значения imm8 большие 7 зарезервированы и не должны использоваться во избежание несовместимости с будущими версиями процессоров.

Операция:

IF (imm8 = 0)

THEN

  OP = "EQ";

ELSE

  IF (imm8 = 1)

  THEN

     OP = "LT";

  ELSE

     IF (imm8 = 2)

     THEN

        OP = "LE";

     ELSE

        IF (imm8 = 3)

        THEN

           OP = "UNORD";

        ELSE

           IF (imm8 = 4)

           THEN

             OP = "NE";

           ELSE

             IF (imm8 = 5)

             THEN

                OP = "NLT";

             ELSE

                IF (imm8 = 6)

                THEN

                   OP = "NLE";

                ELSE

                   IF (imm8 = 7) THEN OP = "ORD";FI;

                FI;

             FI;

           FI;

        FI;

     FI;

  FI;

FI;

CMP0 = DEST[31-0] OP SRC/m128[31-0];

CMP1 = DEST[63-32] OP SRC/m128[63-32];

CMP2 = DEST [95-64] OP SRC/m128[95-64];

CMP3 = DEST[127-96] OP SRC/m128[127-96];

IF (CMP0 = TRUE) THEN

  DEST[31-0] = FFFFFFFFh;

  DEST[63-32] = FFFFFFFFh;

  DEST[95-64] = FFFFFFFFh;

  DEST[127-96] = FFFFFFFFh;

ELSE

      DEST[31-0] = 00000000h;

      DEST[63-32] = 00000000h;

      DEST[95-64] = 00000000h;

      DEST[127-96] = 00000000h;

FI;

Особые ситуации защищенного режима:

#GP(0) при некорретном эффективном адресе операнда в памяти в сегментах CS, DS, ES, FS или GS, и для всех сегментов если операнд в памяти не выровнен по 16-байтным границам.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#NM, если CR0.TS = 1.
#UD, если CR0.EM = 1 или CR4.OSFXSR = 0, а также при встрече незамаскированных SIMD-исключений, когда CR4.OSXMMEXCPT = 0.
#XM при встрече незамаскированных SIMD-исключений, когда CR4.OSXMMEXCPT = 1.

Особые ситуации режима реальной адресации:

#GP, если любая часть операнда находится вне пространства эффективных адресов от 0 до 0FFFFh.
#NM, если CR0.TS = 1.
#UD, если CR0.EM = 1 или CR4.OSFXSR = 0, а также при встрече незамаскированных SIMD-исключений, когда CR4.OSXMMEXCPT = 0.
#XM при встрече незамаскированных SIMD-исключений, когда CR4.OSXMMEXCPT = 1.

Особые ситуации режима V86:

Такие же, как и в режиме реальной адресации.
#PF(Код ошибки) при страничной ошибке.

Замечание:

Некоторые ассемблеры могут использовать следующие мнемоники для конкретных видов сравнения:

CMPEQPS xmm1,xmm2 — для CMPPS xmm1,xmm2,0

CMPLTPS xmm1,xmm2 — для CMPPS xmm1,xmm2,1

CMPLEPS xmm1,xmm2 — для CMPPS xmm1,xmm2,2

CMPUNORDPS xmm1,xmm2 — для CMPPS xmm1,xmm2,3

CMPNEQPS xmm1,xmm2 — для CMPPS xmm1,xmm2,4

CMPNLTPS xmm1,xmm2 — для CMPPS xmm1,xmm2,5

CMPNLEPS xmm1,xmm2 — для CMPPS xmm1,xmm2,6

CMPORDPS xmm1,xmm2 — для CMPPS xmm1,xmm2,7


Входит в группу команд: Набор команд SIMD




Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru

Top.Mail.Ru       Сервер радиолюбителей России - схемы, документация,

 соревнования, дипломы, программы, форумы и многое другое!   схемы новости электроники