Difference between revisions of "PM Opc JMP"

From SublabWiki
Jump to: navigation, search
m (Conditions)
(Same modifications)
Line 8: Line 8:
 
|-
 
|-
 
|E4 ss
 
|E4 ss
|JC short #ss
+
|JC #ss
 
|8
 
|8
 
|Carry=1
 
|Carry=1
 
|-
 
|-
 
|E5 ss
 
|E5 ss
|JNC short #ss
+
|JNC #ss
 
|8
 
|8
 
|Carry=0
 
|Carry=0
 
|-
 
|-
 
|E6 ss
 
|E6 ss
|JZ short #ss
+
|JZ #ss
 
|8
 
|8
 
|Zero=1
 
|Zero=1
 
|-
 
|-
 
|E7 ss
 
|E7 ss
|JNZ short #ss
+
|JNZ #ss
 
|8
 
|8
 
|Zero=0
 
|Zero=0
 
|-
 
|-
 
|EC ss ss
 
|EC ss ss
|JC long #ssss
+
|JCW #ssss
 
|12
 
|12
 
|Carry=1
 
|Carry=1
 
|-
 
|-
 
|ED ss ss
 
|ED ss ss
|JNC long #ssss
+
|JNCW #ssss
 
|12
 
|12
 
|Carry=0
 
|Carry=0
 
|-
 
|-
 
|EE ss ss
 
|EE ss ss
|JZ long #ssss
+
|JZW #ssss
 
|12
 
|12
 
|Zero=1
 
|Zero=1
 
|-
 
|-
 
|EF ss ss
 
|EF ss ss
|JNZ long #ssss
+
|JNZW #ssss
 
|12
 
|12
 
|Zero=0
 
|Zero=0
 
|-
 
|-
 
|F1 ss
 
|F1 ss
|JMP short #ss
+
|JMP #ss
 
|8
 
|8
 
|None
 
|None
 
|-
 
|-
 
|F3 ss ss
 
|F3 ss ss
|JMP long #ssss
+
|JMPW #ssss
 
|12
 
|12
 
|None
 
|None
Line 103: Line 103:
 
|-
 
|-
 
|CE E6 ss
 
|CE E6 ss
|JP #ss
+
|JNS #ss
 
|12
 
|12
 
|Sign=0
 
|Sign=0
 
|-
 
|-
 
|CE E7 ss
 
|CE E7 ss
|JNP #ss
+
|JS #ss
 
|12
 
|12
 
|Sign=1
 
|Sign=1
Line 133: Line 133:
 
|-
 
|-
 
|CE EC ss
 
|CE EC ss
|[JX0 #ss
+
|JX0 #ss
 
|12
 
|12
 
|??
 
|??

Revision as of 17:13, 24 May 2009

JMP = Jump to routine

Hex Mnemonic Cycles Condition
E4 ss JC #ss 8 Carry=1
E5 ss JNC #ss 8 Carry=0
E6 ss JZ #ss 8 Zero=1
E7 ss JNZ #ss 8 Zero=0
EC ss ss JCW #ssss 12 Carry=1
ED ss ss JNCW #ssss 12 Carry=0
EE ss ss JZW #ssss 12 Zero=1
EF ss ss JNZW #ssss 12 Zero=0
F1 ss JMP #ss 8 None
F3 ss ss JMPW #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 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 ??

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

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_16

« Back to Instruction set