Difference between revisions of "PM Opc JMP"

From SublabWiki
Jump to: navigation, search
m (* slight correction.)
(Inside JMP page)
 
(4 intermediate revisions by the same user not shown)
Line 8: Line 8:
 
|-
 
|-
 
|E4 ss
 
|E4 ss
|JC short #ss
+
|JCB #ss<SUP>*1</SUP>
 
|8
 
|8
 
|Carry=1
 
|Carry=1
 
|-
 
|-
 
|E5 ss
 
|E5 ss
|JNC short #ss
+
|JNCB #ss<SUP>*1</SUP>
 
|8
 
|8
 
|Carry=0
 
|Carry=0
 
|-
 
|-
 
|E6 ss
 
|E6 ss
|JZ short #ss
+
|JZB #ss<SUP>*1</SUP>
 
|8
 
|8
 
|Zero=1
 
|Zero=1
 
|-
 
|-
 
|E7 ss
 
|E7 ss
|JNZ short #ss
+
|JNZB #ss<SUP>*1</SUP>
 
|8
 
|8
 
|Zero=0
 
|Zero=0
 
|-
 
|-
 
|EC ss ss
 
|EC ss ss
|JC long #ssss
+
|JCW #ssss<SUP>*1</SUP>
 
|12
 
|12
 
|Carry=1
 
|Carry=1
 
|-
 
|-
 
|ED ss ss
 
|ED ss ss
|JNC long #ssss
+
|JNCW #ssss<SUP>*1</SUP>
 
|12
 
|12
 
|Carry=0
 
|Carry=0
 
|-
 
|-
 
|EE ss ss
 
|EE ss ss
|JZ long #ssss
+
|JZW #ssss<SUP>*1</SUP>
 
|12
 
|12
 
|Zero=1
 
|Zero=1
 
|-
 
|-
 
|EF ss ss
 
|EF ss ss
|JNZ long #ssss
+
|JNZW #ssss<SUP>*1</SUP>
 
|12
 
|12
 
|Zero=0
 
|Zero=0
 
|-
 
|-
 
|F1 ss
 
|F1 ss
|JMP short #ss
+
|JMPB #ss<SUP>*1</SUP>
 
|8
 
|8
 
|None
 
|None
 
|-
 
|-
 
|F3 ss ss
 
|F3 ss ss
|JMP long #ssss
+
|JMPW #ssss<SUP>*1</SUP>
 
|12
 
|12
 
|None
 
|None
Line 75: Line 75:
 
|JL #ss
 
|JL #ss
 
|12
 
|12
|Overflow != Sign
+
|(Overflow=1) != (Sign=1)
 
|-
 
|-
 
|CE E1 ss
 
|CE E1 ss
 
|JLE #ss
 
|JLE #ss
 
|12
 
|12
|(Overflow != Sign) OR (Zero=1)
+
|((Overflow=0) != (Sign=0)) OR (Zero=1)
 
|-
 
|-
 
|CE E2 ss
 
|CE E2 ss
 
|JG #ss
 
|JG #ss
 
|12
 
|12
|(Overflow == Sign) OR (Zero=0)
+
|((Overflow=1) == (Sign=1)) AND (Zero=0)
 
|-
 
|-
 
|CE E3 ss
 
|CE E3 ss
 
|JGE #ss
 
|JGE #ss
 
|12
 
|12
|Overflow == Sign
+
|(Overflow=0) == (Sign=0)
 
|-
 
|-
 
|CE E4 ss
 
|CE E4 ss
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
 
|??
 
|??
Line 152: Line 152:
 
|??
 
|??
 
|}
 
|}
 +
 +
'''*1''': JMP, JC, JNC, JZ and JNZ can be used in the assembler to auto-detect the appropriate range.
  
 
=== Execute ===
 
=== Execute ===
Line 165: Line 167:
 
  [#nnnn]  = Memory: (I shl 16) or #nnnn
 
  [#nnnn]  = Memory: (I shl 16) or #nnnn
  
  ; J* #ss
+
  ; J*B #ss
 
   
 
   
 
  IF (Condition) THEN
 
  IF (Condition) THEN
Line 172: Line 174:
 
  ENDIF
 
  ENDIF
  
  ; J* #ssss
+
  ; J*W #ssss
 
   
 
   
 
  IF (Condition) THEN
 
  IF (Condition) THEN
Line 179: Line 181:
 
  ENDIF
 
  ENDIF
  
  ; JMP #ss
+
  ; JMPB #ss
 
   
 
   
 
  V = U
 
  V = U
 
  PC = PC + #ss - 1
 
  PC = PC + #ss - 1
  
  ; JMP #ssss
+
  ; JMPW #ssss
 
   
 
   
 
  V = U
 
  V = U
Line 211: Line 213:
 
Jump into a new position of the program.
 
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...
+
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 ===
 
=== Conditions ===
  
None  
+
'''0xF5 - JDBNZ #ss '''
 +
 
 +
Zero: Set when result is 0
 +
 
 +
Carry, Overflow and Sign remain unchanged
 +
 
 +
'''All others:'''
 +
 
 +
None
  
 
=== Examples ===
 
=== Examples ===
Line 229: Line 239:
 
  ; Jump into a label located at a different bank
 
  ; Jump into a label located at a different bank
 
  [[PM_Opc_MOV8|MOV U, $0F]]
 
  [[PM_Opc_MOV8|MOV U, $0F]]
  '''JMP function_at_bank_16'''
+
  '''JMP function_at_bank_15'''
  
 
[[PM_InstructionList|'''« Back to Instruction set''']]
 
[[PM_InstructionList|'''« Back to Instruction set''']]

Latest revision as of 13:52, 17 October 2010

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