Opcode | Encoding | 16-bit | 32-bit | 64-bit | CPUID Feature Flag(s) | Description |
---|---|---|---|---|---|---|
66 0F 1A /r BNDMOV bnd1, bnd2/m64 | rm | Valid | Valid | N/E | mpx | Move a lower and upper bound from bnd2/m64 into bnd1. |
66 0F 1A /r BNDMOV bnd1, bnd2/m128 | rm | N/E | N/E | Valid | mpx | Move a lower and upper bound from bnd2/m128 into bnd1. |
66 0F 1B /r BNDMOV bnd1/m64, bnd2 | mr | Valid | Valid | N/E | mpx | Move a lower and upper bound from bnd2 into bnd1/m64. |
66 0F 1B /r BNDMOV 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
LOCK
prefix 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 (
rm
is not100b
). - If a register operand encodes
BND4
throughBND7
.
#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
LOCK
prefix 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 (
rm
is not100b
). - If a register operand encodes
BND4
throughBND7
.
#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
LOCK
prefix 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 (
rm
is not100b
). - If a register operand encodes
BND4
throughBND7
.
#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
NULL
selector. - 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
LOCK
prefix 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 (
rm
is not100b
). - If a register operand encodes
BND4
throughBND7
.
#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
NULL
selector. - 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
LOCK
prefix 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 (
rm
is not100b
). - If a register operand encodes
BND4
throughBND15
.
#SS(0)
- If a memory operand using the
SS
segment is in non-canonical form. - If a memory operand using the
SS
segment has an effective address that is outside theSS
segment'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
NULL
selector. - 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.