وو

وحید آنلاین . آرشیو وبلاگ وحیدمی دات آی آر . شرکت بیان. vahidmy.blog.ir

وو

وحید آنلاین . آرشیو وبلاگ وحیدمی دات آی آر . شرکت بیان. vahidmy.blog.ir

MOVSLDUP

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

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

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

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

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

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

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

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

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

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