操作碼 |
指令 |
說明 |
0F 60 /r |
PUNPCKLBW mm, mm/m32 |
交叉組合 mm 與 mm/m64 低位雙字中的位元組,將結果放入 mm。 |
66 0F 60 /r |
PUNPCKLBW xmm1, xmm2/m128 |
交叉組合 xmm1 與 xmm2/m128 低位四字中的位元組,將結果放入 xmm1。 |
0F 61 /r |
PUNPCKLWD mm, mm/m32 |
交叉組合 mm 與 mm/m64 低位雙字中的字,將結果放入 mm。 |
66 0F 61 /r |
PUNPCKLWD xmm1, xmm2/m128 |
交叉組合 xmm1 與 xmm2/m128 低位四字中的字,將結果放入 xmm1。 |
0F 62 /r |
PUNPCKLDQ mm, mm/m32 |
交叉組合 mm 與 mm/m64 的低位雙字,將結果放入 mm。 |
66 0F 62 /r |
PUNPCKLDQ xmm1, xmm2/m128 |
交叉組合 xmm1 與 xmm2/m128 低位四字中的雙字,將結果放入 xmm1。 |
66 0F 6C /r |
PUNPCKLQDQ xmm1, xmm2/m128 |
交叉組合 xmm1 與 xmm2/m128 的低位四字,將結果放入 xmm1 暫存器。 |
將目標運算元(第一個運算元)與源運算元(第二個運算元)的低位數據元素(位元組、字或雙字)展開並交叉組合,然後將結果放入目標運算元。(圖 3-15 顯示 64 位運算元中的位元組擴充套件操作)。忽略高位數據元素。源運算元可以是 MMX™ 技術暫存器或 64 位記憶體位置,也可以是 XMM 暫存器或 128 位記憶體位置。目標運算元可以是 MMX 或 XMM 暫存器。如果源數據來自記憶體運算元,則從記憶體訪問完整 64 位或 128 位運算元,但指令分別只使用高 32 位或 64 位。
PUNPCKLBW 指令交叉組合源運算元與目標運算元的低位位元組,PUNPCKLWD 指令交叉組合源運算元與目標運算元的低位字,PUNPCKLDQ 指令交叉組合源運算元與目標運算元的低位雙字,PUNPCKLQDQ 指令交叉組合源運算元與目標運算元的低位四字。
如果源運算元為全零,則結果(儲存在目標運算元中)包含目標運算元中原始值的低位數據元素的零擴充套件。例如,使用 PUNPCKLBW 指令時,將對低位位元組進行零擴充套件(即擴充套件成無符號字);使用 PUNPCKLWD 指令時,則將對低位字進行零擴充套件(即擴充套件成無符號雙字)。
PUNPCKLBW instruction with 64-bit operands:
DEST[63..56] SRC[31..24];
DEST[55..48] DEST[31..24];
DEST[47..40] SRC[23..16];
DEST[39..32] DEST[23..16];
DEST[31..24] SRC[15..8];
DEST[23..16] DEST[15..8];
DEST[15..8] SRC[7..0];
DEST[7..0] DEST[7..0];
PUNPCKLWD instruction with 64-bit operands:
DEST[63..48] SRC[31..16];
DEST[47..32] DEST[31..16];
DEST[31..16] SRC[15..0];
DEST[15..0] DEST[15..0];
PUNPCKLDQ instruction with 64-bit operands:
DEST[63..32] SRC[31..0];
DEST[31..0] DEST[31..0];
PUNPCKLBW instruction with 128-bit operands:
DEST[7-0] DEST[7-0];
DEST[15-8] SRC[7-0];
DEST[23-16] DEST[15-8];
DEST[31-24] SRC[15-8];
DEST[39-32] DEST[23-16];
DEST[47-40] SRC[23-16];
DEST[55-48] DEST[31-24];
DEST[63-56] SRC[31-24];
DEST[71-64] DEST[39-32];
DEST[79-72] SRC[39-32];
DEST[87-80] DEST[47-40];
DEST[95-88] SRC[47-40];
DEST[103-96] DEST[55-48];
DEST[111-104] SRC[55-48];
DEST[119-112] DEST[63-56];
DEST[127-120] SRC[63-56];
PUNPCKLWD instruction with 128-bit operands:
DEST[15-0] DEST[15-0];
DEST[31-16] SRC[15-0];
DEST[47-32] DEST[31-16];
DEST[63-48] SRC[31-16];
DEST[79-64] DEST[47-32];
DEST[95-80] SRC[47-32];
DEST[111-96] DEST[63-48];
DEST[127-112] SRC[63-48];
PUNPCKLDQ instruction with 128-bit operands:
DEST[31-0] DEST[31-0];
DEST[63-32] SRC[31-0];
DEST[95-64] DEST[63-32];
DEST[127-96] SRC[63-32];
PUNPCKLQDQ
DEST[63-0] DEST[63-0];
DEST[127-64] SRC[63-0];
PUNPCKLBW __m64 _mm_unpacklo_pi8 (__m64 m1, __m64 m2)
PUNPCKLBW __m128i _mm_unpacklo_epi8 (__m128i m1, __m128i m2)
PUNPCKLWD __m64 _mm_unpacklo_pi16 (__m64 m1, __m64 m2)
PUNPCKLWD __m128i _mm_unpacklo_epi16 (__m128i m1, __m128i m2)
PUNPCKLDQ __m64 _mm_unpacklo_pi32 (__m64 m1, __m64 m2)
PUNPCKLDQ __m128i _mm_unpacklo_epi32 (__m128i m1, __m128i m2)
PUNPCKLQDQ __m128i _mm_unpacklo_epi64 (__m128i m1, __m128i m2)
無。
#GP(0) - 如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#UD - 如果 CR0 中的 EM 設定為 1。
#NM - 如果 CR0 中的 TS 設定為 1。
#MF - 如果存在未決的 x87 FPU 異常。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。
#GP(0) - 如果運算元的任何部分出現在 0 到 FFFFH 的有效地址空間之外。
#UD - 如果 CR0 中的 EM 設定為 1。
#NM - 如果 CR0 中的 TS 設定為 1。
#MF - 如果存在未決的 x87 FPU 異常。
與“實地址模式”中的異常相同
#PF(錯誤程式碼) - 頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。
無。