MOVD - 移動雙字

操作碼

指令

說明

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];

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

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)

影響的標誌

無。

SIMD 浮點異常

無。

保護模式異常

#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 異常。

虛 8086 模式異常

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

#PF(錯誤程式碼) - 如果發生頁錯誤。

#AC(0) - 如果在啟用對齊檢查的情況下進行未對齊的記憶體引用。