beautypg.com

6 conditional returns, 3 .7 .6 conditional returns -14, Maxq610 user’s guide – Maxim Integrated MAXQ610 User Manual

Page 49

background image

3-14

MAXQ610 User’s Guide

When the supplied loop address is outside the relative jump range, the prefix register (PFX[0]) is used to supply the
high byte of the loop address as required .

move LC[1], #10h

; loop 16 times

LoopTop:

; loop addr not relative to djnz LC[n],src

call LoopSub
...
djnz LC[1], LoopTop ; decrement LC[1] and jump if nonzero

; assembles to: move PFX[0], #high(LoopTop)

; djnz LC[1], #low(LoopTop)

If loop execution speed is critical and a relative jump cannot be used, one might consider preloading an internal 16-bit
register with the src loop address for the “DJNZ LC[n], src” loop . This ensures that the prefix register does not need to
supply the loop address and always yields the fastest execution of the DJNZ instruction .

move LC[0], #LoopTop ; using LC[0] as address holding register

; assembles to: move PFX[0], #high(LoopTop)

; move LC[0], #low(LoopTop)

move LC[1], #10h

; loop 16 times

...

LoopTop:

; loop address not relative to djnz LC[n],src

call LoopSub
...
djnz LC[1], LC[0]

; decrement LC[1] and jump if nonzero

If opting to preload the loop address to an internal 16-bit register, the most time and code efficient means is by per-
forming the load in the instruction just prior to the top of the loop:

move LC[1], #10h

; Set loop counter to 16

move LC[0], IP

; Set loop address to the next address

LoopTop:

; loop addr not relative to djnz LC[n],src

...

3.7.6 Conditional Returns

Similar to the conditional jumps, the MAXQ610 microcontroller also supports a set of conditional return operations .
Based upon the value of one of the status flags, the CPU can conditionally pop the stack and begin execution at the
address popped from the stack . If the condition is not true, the conditional return instruction does not pop the stack
and does not change the instruction pointer . The following conditional return operations are supported:

RET C

; if C=1, a RET is executed

RET NC

; if C=0, a RET is executed

RET Z

; if Z=1 (Acc=00h), a RET is executed

RET NZ

; if Z=0 (Acc<>00h), a RET is executed

RET S

; if S=1, a RET is executed