| Opcode | Encoding | 16-bit | 32-bit | 64-bit | CPUID Feature Flag(s) | Description |
|---|---|---|---|---|---|---|
66 0F 1A /rBNDMOV bnd1, bnd2/m64 | rm | Valid | Valid | N/E | mpx | Move a lower and upper bound from bnd2/m64 into bnd1. |
66 0F 1A /rBNDMOV bnd1, bnd2/m128 | rm | N/E | N/E | Valid | mpx | Move a lower and upper bound from bnd2/m128 into bnd1. |
66 0F 1B /rBNDMOV bnd1/m64, bnd2 | mr | Valid | Valid | N/E | mpx | Move a lower and upper bound from bnd2 into bnd1/m64. |
66 0F 1B /rBNDMOV bnd1/m128, bnd2 | mr | N/E | N/E | Valid | mpx | Move a lower and upper bound from bnd2 into bnd1/m128. |
Encoding
| Encoding | Operand 1 | Operand 2 |
|---|---|---|
rm | ModRM.reg[w] | ModRM.r/m[r] |
mr | ModRM.r/m[w] | ModRM.reg[r] |
Description
The BNDMOV instruction moves a pair of lower and upper bounds from the source operand into the destination operand.
Which instruction form is used depends on the operating mode of the processor. In 16-bit and 32-bit modes, the 32-bit form is used (64-bit are moved). In 64-bit mode, the 64-bit form is used (128 bits are moved).
This instruction can be used with the LOCK prefix to allow atomic exectution.
Operation
public void BNDMOV(ref Bound dest, Bound src)
{
dest = src;
}Flags Affected
None.Intrinsics
void *_bnd_copy_ptr_bounds(const void *dest, const void *src)Exceptions
Real-Address Mode
#UD- If the
LOCKprefix is used, but the destination is not a memory operand. - If 16 bit addressing is used, or 32 or 64 bit addressing is used, but without an SIB byte (
rmis not100b). - If a register operand encodes
BND4throughBND7.
#SS(0)- If a memory operand using the
SS- segment has an effective address that is outside the
SS- segment's limit.
#GP(0)- If a memory operand (using a segment other than
SS- ) has an effective address that is outside the segment's limit.
Virtual-8086 Mode
#UD- If the
LOCKprefix is used, but the destination is not a memory operand. - If 16 bit addressing is used, or 32 or 64 bit addressing is used, but without an SIB byte (
rmis not100b). - If a register operand encodes
BND4throughBND7.
#SS(0)- If a memory operand using the
SS- segment has an effective address that is outside the
SS- segment's limit.
#GP(0)- If a memory operand (using a segment other than
SS- ) has an effective address that is outside the segment's limit.
#PF(fc)- If a page fault occurs.
#AC(0)- If alignment checking is enabled while the current privilege level is 3 and an unaligned memory access is made.
Protected Mode
#UD- If the
LOCKprefix is used, but the destination is not a memory operand. - If 16 bit addressing is used, or 32 or 64 bit addressing is used, but without an SIB byte (
rmis not100b). - If a register operand encodes
BND4throughBND7.
#SS(0)- If a memory operand using the
SS- segment has an effective address that is outside the
SS- segment's limit.
#GP(0)- If the destination is located in a non-writable segment.
- If a memory operand uses a segment containing a
NULLselector. - If a memory operand (using a segment other than
SS) has an effective address that is outside the segment's limit.
#PF(fc)- If a page fault occurs.
#AC(0)- If alignment checking is enabled while the current privilege level is 3 and an unaligned memory access is made.
Compatibility Mode
#UD- If the
LOCKprefix is used, but the destination is not a memory operand. - If 16 bit addressing is used, or 32 or 64 bit addressing is used, but without an SIB byte (
rmis not100b). - If a register operand encodes
BND4throughBND7.
#SS(0)- If a memory operand using the
SS- segment has an effective address that is outside the
SS- segment's limit.
#GP(0)- If the destination is located in a non-writable segment.
- If a memory operand uses a segment containing a
NULLselector. - If a memory operand (using a segment other than
SS) has an effective address that is outside the segment's limit.
#PF(fc)- If a page fault occurs.
#AC(0)- If alignment checking is enabled while the current privilege level is 3 and an unaligned memory access is made.
Long Mode
#UD- If the
LOCKprefix is used, but the destination is not a memory operand. - If 16 bit addressing is used, or 32 or 64 bit addressing is used, but without an SIB byte (
rmis not100b). - If a register operand encodes
BND4throughBND15.
#SS(0)- If a memory operand using the
SSsegment is in non-canonical form. - If a memory operand using the
SSsegment has an effective address that is outside theSSsegment's limit.
#GP(0)- If a memory operand (using a segment other than
SS) is in non-canonical form. - If a memory operand uses a segment containing a
NULLselector. - If a memory operand (using a segment other than
SS) has an effective address that is outside the segment's limit.
#PF(fc)- If a page fault occurs.
#AC(0)- If alignment checking is enabled while the current privilege level is 3 and an unaligned memory access is made.