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 ]