Система команд x86 |
|
Программирование - Архитектура и система команд микропроцессоров x86 |
COMISS
Влияние команды на флаги и форматы команды:
* |
* |
|
|
|
|
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).
Все права защищены © Алексей Ровдо, 1994-2023. Перепечатка возможна только по согласованию с владельцем авторских прав. admin@club155.ru