Next: i386-Float, Previous: i386-Memory, Up: i386-Dependent
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:
The text of the Arduino reference is licensed under a Creative Commons Attribution-ShareAlike 3.0 License. Code samples in the reference are released into the public domain.