操作碼 |
指令 |
說明 |
0F 6E /r |
MOVD mm, r/m32 |
將雙字從 r/m32 移到 mm。 |
0F 7E /r |
MOVD r/m32, mm |
將雙字從 mm 移到 r/m32。 |
66 0F 6E /r |
MOVD xmm, r/m32 |
將雙字從 r/m32 移到 xmm。 |
66 0F 7E /r |
MOVD r/m32, xmm |
將雙字從 xmm 移到 r/m32。 |
從源運算元(第二個運算元)將雙字複製到目標運算元(第一個運算元)。源運算元與目標運算元可以是通用暫存器、MMX™ 技術暫存器、XMM 暫存器或 32 位記憶體位置。此指令用於將雙字移入/移出 MMX 暫存器與通用暫存器的低位雙字或 32 位記憶體位置,或是移入/移出 XMM 暫存器與通用暫存器的低位雙字或 32 位記憶體位置。此指令無法用於在 MMX 暫存器之間、XMM 暫存器之間、通用暫存器之間或記憶體位置之間傳輸數據。
目標運算元是 MMX 暫存器時,源運算元寫入暫存器的低位雙字,暫存器按照零擴充套件方式擴充套件成 64 位。目標運算元是 XMM 暫存器時,源運算元寫入暫存器的低位雙字,暫存器按照零擴充套件方式擴充套件成 128 位。
MOVD instruction when destination operand is MMX register:
DEST[31-0] SRC;
DEST[63-32] 00000000H;
MOVD instruction when destination operand is XMM register:
DEST[31-0] SRC;
DEST[127-32] 000000000000000000000000H;
MOVD instruction when source operand is MMX or XXM register:
DEST SRC[31-0];
MOVD __m64 _mm_cvtsi32_si64 (int i ) MOVD int _mm_cvtsi64_si32 ( __m64m ) MOVD __m128i _mm_cvtsi32_si128 (int a) MOVD int _mm_cvtsi128_si32 ( __m128i a)
無。
無。
#GP(0) - 如果目標運算元位於不可寫的段。如果記憶體運算元有效地址超出 CS、DS、ES、FS 或 GS 段限制。
#SS(0) - 如果記憶體運算元有效地址超出 SS 段限制。
#UD - 如果 CR0 中的 EM 設定為 1。(僅限 XMM 暫存器操作)。如果 CR4 中的 OSFXSR 是 0。(僅限 XMM 暫存器操作)。如果 CPUID 功能標誌 SSE2 是 0。
#NM - 如果 CR0 中的 TS 設定為 1。
#MF(僅限 MMX 暫存器操作) - 如果存在未決的 FPU 異常。
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果啟用對齊檢查並在目前特權級別為 3 時進行未對齊的記憶體引用。
#GP - 如果運算元的任何部分出現在 0 到 FFFFH 的有效地址空間之外。
#UD - 如果 CR0 中的 EM 設定為 1。(僅限 XMM 暫存器操作)。如果 CR4 中的 OSFXSR 是 0。(僅限 XMM 暫存器操作)。如果 CPUID 功能標誌 SSE2 是 0。
#NM - 如果 CR0 中的 TS 設定為 1。
#MF(僅限 MMX 暫存器操作) - 如果存在未決的 FPU 異常。
與“實地址模式”中的異常相同
#PF(錯誤程式碼) - 如果發生頁錯誤。
#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。