Intel 64 and IA-32 Architectures Software Developers Manual Volume 1, Basic Architecture
7-24 Vol. 1
PROGRAMMING WITH GENERAL-PURPOSE INSTRUCTIONS
The LOOPNE and LOOPNZ instructions (mnemonics for the same instruction) operate
the same as the LOOPE/LOOPPZ instructions, except that they terminate the loop if
the ZF flag is set.
Jump if zero instructions — The JECXZ (jump if ECX zero) instruction jumps to the
location specified in the destination operand if the ECX register contains the value
zero. This instruction can be used in combination with a loop instruction (LOOP,
LOOPE, LOOPZ, LOOPNE, or LOOPNZ) to test the ECX register prior to beginning a
loop. As described in “Loop instructions on page 7-23, the loop instructions decre-
ment 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 232 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.
7.3.8.3 Control Transfer Instructions in 64-Bit Mode
In 64-bit mode, the operand size for all near branches (CALL, RET, JCC, JCXZ, JMP,
and LOOP) is forced to 64 bits. The listed instructions update the 64-bit RIP without
need for a REX operand-size prefix.
Near branches in the following operations are forced to 64-bits (regardless of
operand size prefixes):
• Truncation of the size of the instruction pointer
• Size of a stack pop or push, due to CALL or RET
• Size of a stack-pointer increment or decrement, due to CALL or RET
• Indirect-branch operand size
Note that the displacement field for relative branches is still limited to 32 bits and the
address size for near branches is not forced.
Address size determines the register size (CX/ECX/RCX) used for JCXZ and LOOP. It
also impacts the address calculation for memory indirect branches. Addresses size is
64 bits by default, although it can be over-ridden to 32 bits (using a prefix).
7.3.8.4 Software Interrupt Instructions
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 inter-
rupt or exception, which in turn causes the handler routine for the interrupt or excep-
tion to be called.