MOVSLDUP
Usage: MOVSLDUP dest,src Modifies flags: None.
Move 128 bits representing packed SP data elements from 'src' to 'dest' register and duplicate low.
Move Packed Single-Precision FP Low and Duplicate
MOVSLDUP xmm1, xmm2/mem128 ; F3 0F 12 /r [Pent4]
The linear address corresponds to the address of the least-significant byte of the referenced memory data. When a memory address is indicated, the 16 bytes of data at memory location mem128 are loaded and the single-precision elements in positions 0 and 2 are duplicated. When the register-register form of this operation is used, the same operation is performed but with data coming from the 128-bit source register.
source = mem128 load instruction
xmm1[31-0] = mem128[31-0];
xmm1[63-32] = mem128[31-0];
xmm1[95-64] = mem128[95-64];
xmm1[127-96] = mem128[95-64
Or
move instruction
xmm1[31-0] = xmm2[31-0];
xmm1[63-32] = xmm2[31-0];
xmm1[95-64] = xmm2[95-64];
xmm1[127-96] = xmm2[95-64]; For 64 bit operation.
EXAMPLE:
movsldup xmm1 xmm2
MOVSHDUP
Usage: MOVSHDUP dest,src Modifies flags: None
Move two single-precision floating-point values from the higher 32-bit operand of each qword in 'src' to 'dest' and duplicate each 32-bit operand to the lower 32-bits of each qword.
Move Packed Single-FP High and Duplicate
MOVSHDUP xmm1 ,xmm2/mem128 ; F3 0F 16 /r [Pent4]
The linear address corresponds to the address of the least-significant byte of the referenced memory data. When a memory address is indicated, the 16 bytes of data at memory location mem128 are loaded and the single-precision elements in positions 1 and 3 are duplicated. When the register-register form of this operation is used, the same operation is performed but with data coming from the 128-bit source register.
If source = mem128 load instruction:
xmm1[31-0] = mem128[63-32];
xmm1[63-32] = mem128[63-32]
xmm1[95-64] = mem128[127-96];
xmm1[127-96] = mem128[127-96]
Or
Move instruction:
xmm1[31-0] = xmm2[63-32];
xmm1[63-32] = xmm2[63-32];
xmm1[95-64] = xmm2[127-96];
xmm1[127-96] = xmm2[127-96]
EXAMPLE:
movshdup xmm2 Label
MOVSD
Usage: MOVSD Modifies flags: None
Copies doubleword from location addressed by ESI 'src' (even if operands are given) to the location EDI 'dest' and updates ESI and EDI based on the size of the operand or instruction used. ESI and EDI are incremented when the Direction Flag is cleared and decremented when the Direction Flag is Set. Use with REP prefixes.
Move Scalar Double-Precision FP Value
MOVSD xmm1,xmm2/m64 ; F2 0F 10 /r [WILLAMETTE,SSE2]
MOVSD xmm1/m64,xmm2 ; F2 0F 11 /r [WILLAMETTE,SSE2]
MOVSD moves a double-precision FP value from the source operand to the destination operand. When the source or destination is a register, the low-order FP value is read or written.
EXAMPLE:
mov edi Label1 | mov esi Label2 | mov al 0
repne movsd | je Found
MOVSB
Usage: MOVSB Modifies flags: None
Copies byte of data from location addressed by ESI (even if operands are given) to the location EDI destination and updates ESI and EDI based on the size of the operand or instruction used. Use with REP prefixes.
Move String
MOVSB ; A4 [8086]
MOVSW ; o16 A5 [8086]
MOVSD ; o32 A5 [386]
MOVSB copies the byte at ESI to EDI. It then increments or decrements (depending on the direction flag: increments if the flag is clear, decrements if it is set) ESI and EDI.
MOVSW and MOVSD work in the same way, but they copy a word or a doubleword instead of a byte, and increment or decrement the addressing registers by 2 or 4 instead of 1.
The REP prefix may be used to repeat the instruction ECX times.
Example:
While B$esi <> 0 | movsb | End_While
MOVQ2DQ
Usage: MOVQ2DQ dest,src Modifies flags: None
Moves the quadword from the 'src' to the low quadword of the 'dest' operand.
Move Quadword from MMX to XMM register.
MOVQ2DQ xmm,mm ; F3 OF D6 /r [WILLAMETTE,SSE2]
MOVQ2DQ moves the quadword from the source operand to the low quadword of the destination operand, and clears the high quadword.
The 'src' operand is an MMX technology register and the 'dest' operand is an XMM register.
EXAMPLE:
movq2dq xmm1 mmx
MOVQ
Usage: MOVQ dest,src Modifies flags: None
Copies a quadword from the 'src' to the 'dest' operand.
Move Quadword to/from MMX Register
MOVQ mm1,mm2/m64 ; 0F 6F /r [PENT,MMX]
MOVQ mm1/m64,mm2 ; 0F 7F /r [PENT,MMX]
MOVQ xmm1,xmm2/m64 ; F3 0F 7E /r [WILLAMETTE,SSE2]
MOVQ xmm1/m64,xmm2 ; 66 0F D6 /r [WILLAMETTE,SSE2]
MOVQ copies 64 bits from its source (second) operand into its destination (first) operand. When the source is an XMM register, the low quadword is moved. When the destination is an XMM register, the destination is the low quadword, and the high quadword is cleared.
The 'src' and 'dest' operands can be MMX technology registers, XMM registers, or 64-bit memory locations. This instruction can be used to move a quadword between two MMX technology registers or between an MMX technology register and a 64-bit memory location, or to move data between two XMM registers or between an XMM register and a 64-bit memory location. The instruction cannot be used to transfer data between memory locations.
EXAMPLE:
movq Label xmm1
MOVNTQ
Usage: MOVNTQ dest,src Modifies flags: None
Moves the quadword in the 'src' to the 'dest' operand.
Move Quadword Non Temporal
MOVNTQ m64,mm ; 0F E7 /r [KATMAI,MMX]
MOVNTQ moves the quadword in the MMX source register to the destination memory location, using a non-temporal hint. This store instruction minimizes cache pollution.
The 'src' is an MMX technology register, which is assumed to contain packed integer data (packed bytes, words, or doublewords). The destination operand is a 64-bit memory location.
EXAMPLE:
movntq Label mmx
MOVNTPS
Usage: MOVNTPS dest,src Modifies flags: None
Moves the double quadword in the 'src' (second operand) to the 'dest' (first operand) using a non-temporal hint to minimize cache pollution during the write to memory.
Move Aligned Four Packed Single-Precision FP Values Non Temporal
MOVNTPS m128,xmm ; 0F 2B /r [KATMAI,SSE]
MOVNTPS moves the double quadword from the XMM source register to the destination memory location, using a non-temporal hint. This store instruction minimizes cache pollution. The memory location must be aligned to a 16-byte boundary.
The source operand is an XMM register, which is assumed to contain four packed single-precision floating-point values. The destination operand is a 128-bit memory location.
EXAMPLE:
movntps Label xmm2
MOVNTPD
Usage: MOVNTPD dest,src Modifies flags: None
Moves the double quadword in the 'src' to the 'dest' using a non-temporal hint to minimize cache pollution during the write to memory.
Move Aligned Four Packed Single-Precision FP Values Non Temporal
MOVNTPD m128,xmm ; 66 0F 2B /r [WILLAMETTE,SSE2]
MOVNTPD moves the double quadword from the XMM source register to the destination memory location, using a non-temporal hint. This store instruction minimizes cache pollution. The memory location must be aligned to a 16-byte boundary.
The 'src' operand is an XMM register, which is assumed to contain two packed double-precision floating-point values. The 'dest' operand is a 128-bit memory location.
EXAMPLE:
movntpd Label xmm1
MOVNTI
Usage: MOVNTI dest,src Modifies flags: None
Moves the doubleword integer in the 'src' (second operand) to the 'dest' (first operand) using a non-temporal hint to minimize cache pollution during the write to memory.
Move Doubleword Non Temporal
MOVNTI m32,reg32 ; 0F C3 /r [WILLAMETTE,SSE2]
MOVNTI moves the doubleword in the source register to the destination memory location, using a non-temporal hint. This store instruction minimizes cache pollution.
The 'src' operand is a general-purpose register. The 'dest' operand is a 32- bit memory location.
EXAMPLE:
movnti Label eax