Difference between revisions of "PM Opc JMP"

From SublabWiki
Jump to: navigation, search
m (Execute)
m (* slight correction.)
Line 4: Line 4:
 
!Hex
 
!Hex
 
!Mnemonic
 
!Mnemonic
 +
!Cycles
 
!Condition
 
!Condition
!Cycles
 
 
|-
 
|-
 
|E4 ss
 
|E4 ss

Revision as of 23:46, 24 April 2009

JMP = Jump to routine

Hex Mnemonic Cycles Condition
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

« Back to Instruction set