JXX - Jump Instructions Table
Mnemonic | Meaning | Jump Condition |
---|---|---|
JA | Jump if Above | CF=0 and ZF=0 |
JAE | Jump if Above or Equal | CF=0 |
JB | Jump if Below | CF=1 |
JBE | Jump if Below or Equal | CF=1 or ZF=1 |
JC | Jump if Carry | CF=1 |
JCXZ | Jump if CX Zero | CX=0 |
JE | Jump if Equal | ZF=1 |
JG | Jump if Greater (signed) | ZF=0 and SF=OF |
JGE | Jump if Greater or Equal (signed) | SF=OF |
JL | Jump if Less (signed) | SF != OF |
JLE | Jump if Less or Equal (signed) | ZF=1 or SF != OF |
JMP | Unconditional Jump | unconditional |
JNA | Jump if Not Above | CF=1 or ZF=1 |
JNAE | Jump if Not Above or Equal | CF=1 |
JNB | Jump if Not Below | CF=0 |
JNBE | Jump if Not Below or Equal | CF=0 and ZF=0 |
JNC | Jump if Not Carry | CF=0 |
JNE | Jump if Not Equal | ZF=0 |
JNG | Jump if Not Greater (signed) | ZF=1 or SF != OF |
JNGE | Jump if Not Greater or Equal (signed) | SF != OF |
JNL | Jump if Not Less (signed) | SF=OF |
JNLE | Jump if Not Less or Equal (signed) | ZF=0 and SF=OF |
JNO | Jump if Not Overflow (signed) | OF=0 |
JNP | Jump if No Parity | PF=0 |
JNS | Jump if Not Signed (signed) | SF=0 |
JNZ | Jump if Not Zero | ZF=0 |
JO | Jump if Overflow (signed) | OF=1 |
JP | Jump if Parity | PF=1 |
JPE | Jump if Parity Even | PF=1 |
JPO | Jump if Parity Odd | PF=0 |
JS | Jump if Signed (signed) | SF=1 |
JZ | Jump if Zero | ZF=1 |
Clocks | ||||
---|---|---|---|---|
operands | 286 | 386 | 486 | Size Bytes |
Jx: jump | 7+m | 7+m | 3 | 2 |
no jump | 3 | 3 | 1 | 2 |
Jx: near-label | 7+m | 3 | 4 | |
no jump | 3 | 1 | 4 | |
It's a good programming practice to organize code
so the expected case is executed without a jump since the actual jump takes longer to execute than falling through the test. |
||||
see JCXZ and JMP for their respective timings |
JCXZ/JECXZ - Jump if Register (E)CX is Zero
Usage: JCXZ label
JECXZ label (386+)
Modifies Flags: None
Causes execution to branch to "label" if register CX is zero. Uses unsigned comparision.
Clocks | ||||
---|---|---|---|---|
operands | 286 | 386 | 486 | Size Bytes |
label: jump | 8+m | 9+m | 8 | 2 |
no jump | 4 | 5 | 5 | 2 |
JMP - Unconditional Jump
Usage: JMP target
Modifies Flags: None
Unconditionally transfers control to "label". Jumps by default are within -32768 to 32767 bytes from the instruction following the jump. NEAR and SHORT jumps cause the IP to be updated while FAR jumps cause CS and IP to be updated.
Clocks | |||
---|---|---|---|
operands | 286 | 386 | 486 |
rel8 (relative) | 7+m | 7+m | 3 |
rel16 (relative) | 7+m | 7+m | 3 |
rel32 (relative) | 7+m | 3 | |
reg16 (near, register indirect) | 7+m | 7+m | 5 |
reg32 (near, register indirect) | 7+m | 5 | |
mem16 (near, mem indirect) | 11+m | 10+m | 5 |
mem32 (near, mem indirect) | 15+m | 10+m | 5 |
ptr16:16 (far, dword immed) | 12+m | 17 | |
ptr16:16 (far, PM dword immed) | 27+m | 19 | |
ptr16:16 (call gate, same priv.) | 38+m | 45+m | 32 |
ptr16:16 (via TSS) | 175+m | TS | 42+TS |
ptr16:16 (via task gate) | 180+m | TS | 43+TS |
mem16:16 (far, indirect) | 43+m | 13 | |
mem16:16 (far, PM indirect) | 31+m | 18 | |
mem16:16 (call gate, same priv.) | 41+m | 49+m | 31 |
mem16:16 (via TSS) | 178+m | 5+TS | 41+TS |
mem16:16 (via task gate) | 183+m | 5+TS | 42+TS |
ptr16:32 (far, 6 byte immed) | 12+m | 13 | |
ptr16:32 (far, PM 6 byte immed) | 27+m | 18 | |
ptr16:32 (call gate, same priv.) | 45+m | 31 | |
ptr16:32 (via TSS) | TS | 42+TS | |
ptr16:32 (via task state) | TS | 43+TS | |
m16:32 (far, address at dword) | 43+m | 13 | |
m16:32 (far, address at dword) | 31+m | 18 | |
m16:32 (call gate, same priv.) | 49+m | 31 | |
m16:32 (via TSS) | 5+TS | 41+TS | |
m16:32 (via task state) | 5+TS | 42+TS |
[ TOC | Previous | NeXt
| Winston's page ]