3-38
INSTRUCTION SET REFERENCE
BOUNDCheck Array Index Against Bounds
Description
This instruction 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 a 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.
Operation
IF (ArrayIndex < LowerBound OR ArrayIndex > (UppderBound + OperandSize/8]))
(* Below lower bound or above upper bound *)
THEN
#BR;
FI;
Flags Affected
None.
OpcodeInstruction
Description
62 /r
BOUND r16,m16&16Check if r16 (array index) is within bounds specified by
m16&16
62 /r
BOUND r32,m32&32Check if r32 (array index) is within bounds specified by
m16&16