PM Opc JMP
From SublabWiki
JMP = Jump to routine
Hex | Mnemonic | Condition | Cycles |
---|---|---|---|
E4 ss | JC short #ss | 8 | Carry=1 |
E5 ss | JNC short #ss | 8 | Carry=0 |
E6 ss | JZ short #ss | 8 | Zero=1 |
E7 ss | JNZ short #ss | 8 | Zero=0 |
EC ss ss | JC long #ssss | 12 | Carry=1 |
ED ss ss | JNC long #ssss | 12 | Carry=0 |
EE ss ss | JZ long #ssss | 12 | Zero=1 |
EF ss ss | JNZ long #ssss | 12 | Zero=0 |
F1 ss | JMP short #ss | 8 | None |
F3 ss ss | JMP long #ssss | 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 != Sign |
CE E1 ss | JLE #ss | 12 | (Overflow != Sign) OR (Zero=1) |
CE E2 ss | JG #ss | 12 | (Overflow == Sign) OR (Zero=0) |
CE E3 ss | JGE #ss | 12 | Overflow == Sign |
CE E4 ss | JO #ss | 12 | Overflow=1 |
CE E5 ss | JNO #ss | 12 | Overflow=0 |
CE E6 ss | JP #ss | 12 | Sign=0 |
CE E7 ss | JNP #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 | ?? |
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* #ss IF (Condition) THEN V = U PC = PC + #ss - 1 ENDIF
; J* #ssss IF (Condition) THEN V = U PC = PC + #ssss - 1 ENDIF
; JMP #ss V = U PC = PC + #ss - 1
; JMP #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 it...
Conditions
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_16