Next: i386-Float, Previous: i386-Memory, Up: i386-Dependent

#### 9.15.9 Handling of Jump Instructions

Jump instructions are always optimized to use the smallest possible displacements. This is accomplished by using byte (8-bit) displacement jumps whenever the target is sufficiently close. If a byte displacement is insufficient a long displacement is used. We do not support word (16-bit) displacement jumps in 32-bit mode (i.e. prefixing the jump instruction with the ‘`data16`’ instruction prefix), since the 80386 insists upon masking ‘`%eip`’ to 16 bits after the word displacement is added. (See also see i386-Arch)

Note that the ‘`jcxz`’, ‘`jecxz`’, ‘`loop`’, ‘`loopz`’, ‘`loope`’, ‘`loopnz`’ and ‘`loopne`’ instructions only come in byte displacements, so that if you use these instructions (`gcc` does not use them) you may get an error message (and incorrect code). The AT&T 80386 assembler tries to get around this problem by expanding ‘`jcxz foo`’ to

                  jcxz cx_zero
                  jmp cx_nonzero
         cx_zero: jmp foo
         cx_nonzero: