Intel ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS MANUAL VOLUME 1 REV 2.3 Manual page 1578

Hide thumbs Also See for ITANIUM ARCHITECTURE - SOFTWARE DEVELOPERS MANUAL VOLUME 1 REV 2.3:
Table of Contents

Advertisement

LOOP/LOOPcc—Loop According to ECX Counter
Opcode
E2 cb
E1 cb
E1 cb
E0 cb
E0 cb
Description
Performs a loop operation using the ECX or CX register as a counter. Each time the
LOOP instruction is executed, the count register is decremented, then checked for 0. If
the count is 0, the loop is terminated and program execution continues with the
instruction following the LOOP instruction. If the count is not zero, a near jump is
performed to the destination (target) operand, which is presumably the instruction at
the beginning of the loop. If the address-size attribute is 32 bits, the ECX register is
used as the count register; otherwise the CX register is used.
The target instruction is specified with a relative offset (a signed offset relative to the
current value of the instruction pointer in the EIP register). This offset is generally
specified as a label in assembly code, but at the machine code level, it is encoded as a
signed, 8-bit immediate value, which is added to the instruction pointer. Offsets of -128
to +127 are allowed with this instruction.
Some forms of the loop instruction (LOOPcc) also accept the ZF flag as a condition for
terminating the loop before the count reaches zero. With these forms of the instruction,
a condition code (cc) is associated with each instruction to indicate the condition being
tested for. Here, the LOOPcc instruction itself does not affect the state of the ZF flag;
the ZF flag is changed by other instructions in the loop.
All branches are converted to code fetches of one or two cache lines, regardless of jump
address or cacheability.
Operation
IF AddressSize = 32
THEN
Count is ECX;
ELSE (* AddressSize = 16 *)
Count is CX;
FI;
Count  Count - 1;
IF instruction is not LOOP
THEN
IF (instruction = LOOPE) OR (instruction = LOOPZ)
FI;
4:276
Instruction
LOOP rel8
LOOPE rel8
LOOPZ rel8
LOOPNE rel8
LOOPNZ rel8
THEN
IF (ZF =1) AND (Count  0)
THEN BranchCond  1;
ELSE BranchCond  0;
FI;
Description
Decrement count; jump short if count  0
Decrement count; jump short if count  0 and ZF=1
Decrement count; jump short if count  0 and ZF=1
Decrement count; jump short if count  0 and ZF=0
Decrement count; jump short if count  0 and ZF=0
Volume 4: Base IA-32 Instruction Reference

Advertisement

Table of Contents
loading

This manual is also suitable for:

Itanium architecture 2.3

Table of Contents