User's Manual

THE
80286
INSTRUCTION SET
If
the given condition
is
true, then a short jump
is
made
to
the label provided as the operand. Instruc-
tion encoding
is
most efficient when the target for the conditional jump
is
in the current code segment
and within
-128
to
+
127
bytes of the first byte of the next instruction. Alternatively, the opposite
sense (e.g.,
JNZ
has opposite sense
to
that of JZ) of the conditional jump can skip around an uncon-
ditional jump to the destination.
This range
is
necessary for the assembler
to
construct a one-byte signed displilcement from the end of
the current instruction.
If the label
is
out-of-range, or if the label
is
a FAR label, then
you
must perform
a jump with the opposite condition around an unconditional jump
to
the non-short label.
Because there are, in many instances, several
ways
to interpret a particular state of the flags, ASM286
provides more than one mnemonic for most of the conditional jump opcodes. For example, consider
that a programmer
who
has just compared a character
to
another in AL might
wish
to jump
if
the two
were equal (JE), while another programmer
who
had just ANDed AX with a bit field mask would
prefer to consider only whether the result
was
zero or not (he would use
JZ,
it synonym for JE).
JCXZ
differs from the other conditional jumps
in
that it actually tests the contents of the CX register
for zero, rather than interrogating the flags. This instruction
is
useful following a conditionally repeated
string operation
(REPE SCASB, for exampl!) or a conditional
loop
instruction (such
as
LOOPNE
TARGETLABEL). These instructions implicitly use a limiting count in the CX register. Looping
(repeating) ends when either the CX register goes
to
zero or the condition specified in the instruction
(flags indicating equals in both of the above cases) occurs.
JCXZ
is
useful when the terminations must
be handled differently.
PROTECTED MODE EXCEPTIONS
#GP(O)
if the offset jumped
to
is
beyond the limits of the code segment.
REAL ADDRESS MODE EXCEPTIONS
None
8-55