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