## JMP = Jump to routine

Hex | Mnemonic | Cycles | Condition
--- | --- | --- | ---
E4 ss | JCB #ss*1 | 8 | Carry=1
E5 ss | JNCB #ss*1 | 8 | Carry=0
E6 ss | JZB #ss*1 | 8 | Zero=1
E7 ss | JNZB #ss*1 | 8 | Zero=0
EC ss ss | JCW #ssss*1 | 12 | Carry=1
ED ss ss | JNCW #ssss*1 | 12 | Carry=0
EE ss ss | JZW #ssss*1 | 12 | Zero=1
EF ss ss | JNZW #ssss*1 | 12 | Zero=0
F1 ss | JMPB #ss*1 | 8 | None
F3 ss ss | JMPW #ssss*1 | 12 | None
F4 | JMP HL | 8 | None
F5 ss | JDBNZ #ss | 16 | B <> 0x00, decrement B before check
FD nn | JINT #nn | 8 | None
CE E0 ss | JL #ss | 12 | (Overflow=1) != (Sign=1)
CE E1 ss | JLE #ss | 12 | ((Overflow=0) != (Sign=0)) OR (Zero=1)
CE E2 ss | JG #ss | 12 | ((Overflow=1) == (Sign=1)) AND (Zero=0)
CE E3 ss | JGE #ss | 12 | (Overflow=0) == (Sign=0)
CE E4 ss | JO #ss | 12 | Overflow=1
CE E5 ss | JNO #ss | 12 | Overflow=0
CE E6 ss | JNS #ss | 12 | Sign=0
CE E7 ss | JS #ss | 12 | Sign=1
CE E8 ss | JNX0 #ss | 12 | ??
CE E9 ss | JNX1 #ss | 12 | ??
CE EA ss | JNX2 #ss | 12 | ??
CE EB ss | JNX3 #ss | 12 | ??
CE EC ss | JX0 #ss | 12 | ??
CE ED ss | JX1 #ss | 12 | ??
CE EE ss | JX2 #ss | 12 | ??
CE EF ss | JX3 #ss | 12 | ??

*1: JMP, JC, JNC, JZ and JNZ can be used in the assembler to auto-detect the appropriate range.

### Execute

    #nn      = Immediate unsigned 8-Bits
    #ss      = Immediate signed 8-Bits
    #ssss    = Immediate signed 16-Bits
    B        = Register B
    U/V      = Register U or V
    HL       = Register HL: (H shl 8) or L
    SP       = Register SP (Stack Pointer)
    PC       = Register PC (Program Counter)
    [#nnnn]  = Memory: (I shl 16) or #nnnn

    ; J*B #ss

    IF (Condition) THEN
      V = U
      PC = PC + #ss - 1
    ENDIF

    ; J*W #ssss

    IF (Condition) THEN
      V = U
      PC = PC + #ssss - 1
    ENDIF

    ; JMPB #ss

    V = U
    PC = PC + #ss - 1

    ; JMPW #ssss

    V = U
    PC = PC + #ssss - 1

    ; JMP HL

    V = U
    PC = HL

    ; JDBNZ #ss

    B = B - 1
    IF (B <> 0) THEN
      V = U
      PC = PC + #ss - 1
    ENDIF

    ; JINT #nn (not fully tested)

    V = U
    PC = Memory16[#nn SHL 1]

### Description

Jump into a new position of the program.

NOTE: All non-branch instructions does "U = V" causing U to be restored, any branch that require banking needs "MOV U, A" or "MOV U, #nn" before JMP/J*...

### Conditions

0xF5 - JDBNZ #ss

Zero: Set when result is 0

Carry, Overflow and Sign remain unchanged

All others:

None

### Examples

     ; A = 0x10
     CMP A, 0x10  ; Compare A with 0x10
     ; F = (Zero=1):(Carry=0):(Overflow=0):(Sign=0)
     JZ val_is_16
     MOV A, 0x00
    val_is_16:
     ; A = 0x10

    ; Jump into a label located at a different bank
    MOV U, $0F
    JMP function_at_bank_15

« Back to Instruction set

Retrieved from "http://wiki.sublab.net/index.php/PM_Opc_JMP"

© 2011-2015 by JustBurn - Hardware documentation copy from Sublab by Team-Pokémé