as: i386-Jumps

 
 9.15.8 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 Seei386-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: