ADDSUBPS - 壓縮單精度浮點加法/減法

 

指令

說明

 

ADDSUBPS xmm1, xmm2/m128

將壓縮單精度浮點值從 XMM2/Mem 加到 XMM1,或從後者中減去前者。

說明

將源運算元中奇數編號的單精度浮點值加到目標運算元中相應的單精度浮點值;並將結果儲存到目標運算元中奇數編號的值。

從目標運算元中相應的單精度浮點值減去源運算元中偶數編號的單精度浮點值;並將結果儲存到目標運算元中偶數編號的值。 

操作

xmm1[31-0]   = xmm1[31-0]   - xmm2/m128[31-0];

xmm1[63-32]  = xmm1[63-32]  + xmm2/m128[63-32];

xmm1[95-64]  = xmm1[95-64]  - xmm2/m128[95-64];

xmm1[127-96] = xmm1[127-96] + xmm2/m128[127-96];

異常

源運算元為記憶體運算元時,運算元必須對齊 16 位元組邊界,否則將產生一般保護性異常 (#GP)。

數值異常

上溢、下溢、無效、精度、非規格化。

保護模式異常

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

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

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

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

#XM - 無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 1)。

#UD - 如果 CR0.EM = 1。

無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 0)。

如果 CR4.OSFXSR(bit 9) = 0。

如果 CPUID.PNI(ECX bit 0) = 0。

實地址模式異常

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

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

#XM - 無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 1)。

#UD - 如果 CR0.EM = 1。

無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 0)。

如果 CR4.OSFXSR(bit 9) = 0。

如果 CPUID.PNI(ECX bit 0) = 0。

虛 8086 模式異常

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

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

#XM - 無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 1)。

#UD - 如果 CR0.EM = 1。

無掩碼“數據流單指令多數據擴充套件指令集”數值異常 (CR4.OSXMMEXCPT = 0)。

如果 CR4.OSFXSR(bit 9) = 0。

如果 CPUID.PNI(ECX bit 0) = 0。

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