Intel 253666-024US Manuel D’Utilisation

Page de 760
3-66 Vol. 2A
BOUND—Check Array Index Against Bounds
INSTRUCTION SET REFERENCE, A-M
BOUND—Check Array Index Against Bounds
Description
BOUND determines if the first operand (array index) is within the bounds of an array 
specified the second operand (bounds operand). The array index is a signed integer 
located in a register. The bounds operand is a memory location that contains a pair of 
signed doubleword-integers (when the operand-size attribute is 32) or a pair of 
signed word-integers (when the operand-size attribute is 16). The first doubleword 
(or word) is the lower bound of the array and the second doubleword (or word) is the 
upper bound of the array. The array index must be greater than or equal to the lower 
bound and less than or equal to the upper bound plus the operand size in bytes. If the 
index is not within bounds, a BOUND range exceeded exception (#BR) is signaled. 
When this exception is generated, the saved return instruction pointer points to the 
BOUND instruction.
The bounds limit data structure (two words or doublewords containing the lower and 
upper limits of the array) is usually placed just before the array itself, making the 
limits addressable via a constant offset from the beginning of the array. Because the 
address of the array already will be present in a register, this practice avoids extra 
bus cycles to obtain the effective address of the array bounds.
This instruction executes as described in compatibility mode and legacy mode. It is 
not valid in 64-bit mode.
Operation
IF 64bit Mode
THEN
#UD;
ELSE
IF (ArrayIndex < LowerBound OR ArrayIndex > UpperBound)
(* Below lower bound or above upper bound *)
THEN #BR; FI;
FI;
Opcode
Instruction
64-Bit 
Mode
Compat/
Leg Mode
Description
62 /r
BOUND r16, m16&16
Invalid
Valid
Check if r16 (array index) is 
within bounds specified by 
m16&16.
62 /r
BOUND r32, m32&32
Invalid
Valid
Check if r32 (array index) is 
within bounds specified by 
m16&16.