logo

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

Система команд 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

COMISS

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

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

I

D

Z

O

U

P

*

*

 

 

 

 

 

Код

Команда

Описание

Проц.

Пример

0F 2F /r

COMISS xmm1, xmm2/m32

Сравнить младшие короткие вещественные значения из xmm1и из xmm2/m32, по результатам сравнения  установить EFLAGS.ZF, PF, CF

Pentium III

comiss xmm3,[ecx]

Описание:

Команда COMISS сравнивает младшее (из четырех упакованных) короткое вещественное значение из операнда-источника с младшим короткими вещественным из операнда-назначения. По результатам сравнения устанавливаются флаги ZF, PF, CF регистра EFLAGS, а флаги OS, SF, AF всякий раз сбрасываются.

Операнды считаются несравнимыми, когда любой из них NaN. При этом флаги устанавливаются в ZF, PF, CF = 111, если исключение #I замаскировано, в противном случае вызывается обработчик исключений.

Отличия между командой COMISS и командой неупорядоченного сравнения UCOMISS заключаются в работе с операндами QNaN. COMISS генерируют исключение #I, если любой операнд команды NaN (SNaN или QNaN). Команда UCOMISS делает то же самое, кроме генерации SIMD-исключения Недействительная операция (#I) для случая с операндами QNaN.

Использование префикса REP/REPNE (F3h/F2h) и префикса размера операнда (66h) с командой COMISS является зарезервированной недокументированной функцией. Различные модели процессоров по разному реагируют на эту ситуацию. Не рекомендуется применять в программах комбинацию команды COMISS и указанных префиксов, т.к. в дальнейших моделях процессоров эта функция может быть изменена или исключена.

Операция:

OF = 0;

SF = 0;

AF = 0;

IF ((DEST[31-0] UNORD SRC/m32[31-0]) = TRUE) THEN

     ZF = 1;

     PF = 1;

     CF = 1;

ELSE

  IF ((DEST[31-0] GTRTHAN SRC/m32[31-0]) = TRUE)THEN

     ZF = 0;

     PF = 0;

     CF = 0;

  ELSE

     IF ((DEST[31-0] LESSTHAN SRC/m32[31-0]) = TRUE THEN

        ZF = 0;

        PF = 0;

        CF = 1;

     ELSE

        ZF = 1;

        PF = 0;

        CF = 0;

     FI;

  FI;

FI;

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

#GP(0) при некорретном эффективном адресе операнда в памяти в сегментах CS, DS, ES, FS или GS.
#SS(0) при использовании некорректного эффективного адреса в сегменте SS.
#PF(Код ошибки) при страничной ошибке.
#NM, если CR0.TS = 1.
#AC при невыровненных обращениях к памяти (когда CR0.AM = 1, EFLAGS.AC = 1 и CPL = 3).
#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(Код ошибки) при страничной ошибке.
#AC при невыровненных обращениях к памяти (когда CR0.AM = 1 и EFLAGS.AC = 1).


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




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

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

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