操作碼 |
指令 |
說明 |
0F 67 /r |
PACKUSWB mm, mm/m64 |
使用飽和運算將 mm 中的 4 個有符號字與 mm/m64 中的 4 個有符號字壓縮成 8 個無符號位元組,結果放入 mm。 |
66 0F 67 /r |
PACKUSWB xmm1, xmm2/m128 |
使用飽和運算將 xmm1 與 xmm2/m128 中的有符號字壓縮成無符號位元組,結果放入 xmm1。 |
使用飽和運算將目標運算元(第一個運算元)中的 4 個有符號字與源運算元(第二個運算元)中的 4 個有符號字壓縮成 8 個有符號位元組,結果放入目標運算元(請參閱“圖 3-5”)。如果字的有符號值超出無符號位元組的範圍(即大於 FFH 或小於 00H),則分別將飽和位元組值 FFH 或 00H 儲存到目標運算元。
目標運算元必須是 MMX™ 技術暫存器;源運算元可以是 MMX 暫存器,也可以是四字記憶體位置。
將源運算元 xmm2/m128 中的八個有符號字與目標運算元 xmm1 中的八個有符號字壓縮成十六個無符號位元組,結果放入目標暫存器 xmm1。如果字的有符號值大於或小於無符號位元組的範圍,則對該值執行飽和運算(上溢時為 FFH,下溢時為 00H)。目標運算元是 XMM 暫存器。源運算元可以是 XMM 暫存器或 128 位記憶體運算元。
PACKUSWB instruction with 64-bit operands:
DEST[7..0] SaturateSignedWordToUnsignedByte DEST[15..0];
DEST[15..8] SaturateSignedWordToUnsignedByte DEST[31..16];
DEST[23..16] SaturateSignedWordToUnsignedByte DEST[47..32];
DEST[31..24] SaturateSignedWordToUnsignedByte DEST[63..48];
DEST[39..32] SaturateSignedWordToUnsignedByte SRC[15..0];
DEST[47..40] SaturateSignedWordToUnsignedByte SRC[31..16];
DEST[55..48] SaturateSignedWordToUnsignedByte SRC[47..32];
DEST[63..56] SaturateSignedWordToUnsignedByte SRC[63..48];
PACKUSWB instruction with 128-bit operands:
DEST[7-0] SaturateSignedWordToUnsignedByte (DEST[15-0]);
DEST[15-8] SaturateSignedWordToUnsignedByte (DEST[31-16]);
DEST[23-16] SaturateSignedWordToUnsignedByte (DEST[47-32]);
DEST[31-24] SaturateSignedWordToUnsignedByte (DEST[63-48]);
DEST[39-32] SaturateSignedWordToUnsignedByte (DEST[79-64]);
DEST[47-40] SaturateSignedWordToUnsignedByte (DEST[95-80]);
DEST[55-48] SaturateSignedWordToUnsignedByte (DEST[111-96]);
DEST[63-56] SaturateSignedWordToUnsignedByte (DEST[127-112]);
DEST[71-64] SaturateSignedWordToUnsignedByte (SRC[15-0]);
DEST[79-72] SaturateSignedWordToUnsignedByte (SRC[31-16]);
DEST[87-80] SaturateSignedWordToUnsignedByte (SRC[47-32]);
DEST[95-88] SaturateSignedWordToUnsignedByte (SRC[63-48]);
DEST[103-96] SaturateSignedWordToUnsignedByte (SRC[79-64]);
DEST[111-104] SaturateSignedWordToUnsignedByte (SRC[95-80]);
DEST[119-112] SaturateSignedWordToUnsignedByte (SRC[111-96]);
DEST[127-120] SaturateSignedWordToUnsignedByte (SRC[127-112]);
__m64 _mm_packs_pu16(__m64 m1, __m64 m2)
無。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。(僅限 128 位操作)。如果記憶體運算元未對齊 16 位元組邊界,不論是哪一段。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#UD - 如果 CR0 中的 EM 設定為 1。(僅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(僅限 128 位操作)。如果 CPUID 功能標誌 SSE-2 為 0。
#NM - 如果 CR0 中的 TS 設定為 1。
#MF(僅限 64 位操作)- 如果存在未決的 x87 FPU 異常。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0)(僅限 64 位操作)- 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。
#GP(0)(僅限 128 位操作)- 如果記憶體運算元未對齊 16 位元組邊界,不論是哪一段。如果運算元的任何部分出現在 0 到 FFFFH 的有效地址空間之外。
#UD - 如果 CR0 中的 EM 設定為 1。(僅限 128 位操作)。如果 CR4 中的 OSFXSR 是 0。(僅限 128 位操作)。如果 CPUID 功能標誌 SSE-2 為 0。
#NM - 如果 CR0 中的 TS 設定為 1。
#MF(僅限 64 位操作)- 如果存在未決的 x87 FPU 異常。
與“實地址模式”中的異常相同。
#PF(錯誤程式碼) - 頁錯誤。
#AC(0)(僅限 64 位操作)- 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。