UCOMISS - 無序比較標量單精度浮點值並設定 EFLAGS

操作碼

指令

說明

0F 2E /r

UCOMISS xmm1, xmm2/m32

比較 xmm1 暫存器中的低位單精度浮點值與 xmm2/mem 中的低位單精度浮點值,並相應設定狀態標誌。

說明

對源運算元 1(第一個運算元)與源運算元 2(第二個運算元)中的單精度浮點值執行無序比較,並根據結果(無序、大於、小於或等於)設定 EFLAGS 暫存器中的 ZF、PF 及 CF 標誌。EFLAGS 暫存器中的 OF、SF 及 AF 標誌設定為 0。如果任何一個雙精度浮點值是 NaN(QNaN 或 SNaN),則返回無序謂詞。

源運算元 1 是 XMM 暫存器;源運算元 2 可以是 XMM 暫存器或 32 位記憶體位置。

UCOMISS 指令與 COMISS 指令的不同之處在於,只有當源運算元是 SNaN 時,UCOMISS 指令才發出 SIMD 浮點無效異常訊號。如果源運算元是 QNaN 或 SNaN,則 COMISS 指令發出無效訊號。

發生無掩碼 SIMD 浮點異常時,EFLAGS 暫存器不更新。

操作

RESULT UnorderedCompare(SRC1[63-0] <> SRC2[63-0]) {
* Set EFLAGS *CASE (RESULT) OF
UNORDERED: ZF,PF,CF 111;
GREATER_THAN: ZF,PF,CF 000;
LESS_THAN: ZF,PF,CF 001;
EQUAL: ZF,PF,CF 100;
ESAC;
OF,AF,SF 0;

英特爾(R) C++ 編譯器等價內部函式

int_mm_ucomieq_ss(__m128 a, __m128 b) int_mm_ucomilt_ss(__m128 a, __m128 b)

int_mm_ucomile_ss(__m128 a, __m128 b) int_mm_ucomigt_ss(__m128 a, __m128 b)

int_mm_ucomige_ss(__m128 a, __m128 b) int_mm_ucomineq_ss(__m128 a, __m128 b)

SIMD 浮點異常

無效(如果是 SNaN 運算元)、非規格化。

保護模式異常

#GP(0) - CS、DS、ES、FS 或 GS 段中的記憶體運算元有效地址非法。

#SS(0) - SS 段中的地址非法。

#PF(錯誤程式碼) - 頁錯誤。

#NM - 如果 CR0 中的 TS 設定為 1。

#XM - 如果發生無掩碼 SIMD 浮點異常,且 CR4 中的 OSXMMEXCPT 是 1。

#UD - 如果發生無掩碼 SIMD 浮點異常,且 CR4 中的 OSXMMEXCPT 是 0。如果 CR0 中的 EM 設定為 1。如果 CR4 中的 OSFXSR 是 0。如果 CPUID 功能標誌 SSE 為 0。

#AC - 如果在目前特權級別為 3 時進行未對齊的記憶體引用。

實地址模式異常

中斷 13 - 如果運算元的任何部分出現在從 0 到 0FFFFH 的有效地址空間之外。

#NM - 如果 CR0 中的 TS 設定為 1。

#XM - 如果發生無掩碼 SIMD 浮點異常,且 CR4 中的 OSXMMEXCPT 是 1。

#UD - 如果發生無掩碼 SIMD 浮點異常,且 CR4 中的 OSXMMEXCPT 是 0。如果 CR0 中的 EM 設定為 1。如果 CR4 中的 OSFXSR 是 0。如果 CPUID 功能標誌 SSE 為 0。

虛 8086 模式異常

與“實地址模式”中的異常相同。

#PF(錯誤程式碼) - 頁錯誤。

#AC - 如果在目前特權級別為 3 時進行未對齊的記憶體引用。