<<<    Index    >>>
6-39
INSTRUCTION SET SUMMARY
instructions decrement the contents of the ECX register before testing for zero. If the value in
the ECX register is zero initially, it will be decremented to FFFFFFFFH on the first loop instruc-
tion, causing the loop to be executed 2
32
 times. To prevent this problem, a JECXZ instruction
can be inserted at the beginning of the code block for the loop, causing a jump out the loop if
the EAX register count is initially zero. When used with repeated string scan and compare
instructions, the JECXZ instruction can determine whether the loop terminated because the
count reached zero or because the scan or compare conditions were satisfied.
The JCXZ (jump if CX is zero) instruction operates the same as the JECXZ instruction when the
16-bit address-size attribute is used. Here, the CX register is tested for zero.
6.9.3.Software Interrupts
The INT n (software interrupt), INTO (interrupt on overflow), and BOUND (detect value out of
range) instructions allow a program to explicitly raise a specified interrupt or exception, which
in turn causes the handler routine for the interrupt or exception to be called.
The INT n instruction can raise any of the processor’s interrupts or exceptions by encoding the
vector number or the interrupt or exception in the instruction. This instruction can be used to
support software generated interrupts or to test the operation of interrupt and exception handlers.
The IRET instruction (refer to Section 6.9.1.3., “Return From Interrupt Instruction”) allows
returns from interrupt handling routines.
The INTO instruction raises the overflow exception, if the OF flag is set. If the flag is clear,
execution continues without raising the exception. This instruction allows software to access the
overflow exception handler explicitly to check for overflow conditions.
The BOUND instruction compares a signed value against upper and lower bounds, and raises
the “BOUND range exceeded” exception if the value is less than the lower bound or greater than
the upper bound. This instruction is useful for operations such as checking an array index to
make sure it falls within the range defined for the array.
6.10.STRING OPERATIONS
The MOVS (Move String), CMPS (Compare string), SCAS (Scan string), LODS (Load string),
and STOS (Store string) instructions permit large data structures, such as alphanumeric char-
acter strings, to be moved and examined in memory. These instructions operate on individual
elements in a string, which can be a byte, word, or doubleword. The string elements to be oper-
ated on are identified with the ESI (source string element) and EDI (destination string element)
registers. Both of these registers contain absolute addresses (offsets into a segment) that point to
a string element. 
By default, the ESI register addresses the segment identified with the DS segment register. A
segment-override prefix allows the ESI register to be associated with the CS, SS, ES, FS, or GS
segment register. The EDI register addresses the segment identified with the ES segment
register; no segment override is allowed for the EDI register. The use of two different segment
registers in the string instructions permits operations to be performed on strings located in
different segments. Or by associating the ESI register with the ES segment register, both the
<<<    Index    >>>