ZiLOG
DJNZ
DECREMENT AND JUMP IF NON-ZERO
DJNZ
Decrement and Jump if Non-zero
DJNZ r, dst
Instruction Format:
Operation:
r <— r - 1;
If r <> 0, PC <— PC + dst
The specified Working Register being used as a counter is decremented. If the contents of the specified Working
Register are not zero after decrementing, then the relative address is added to the Program Counter (PC) and control
passes to the statement whose address is now in the PC. The range of the relative address is +127 to –128. The
original value of the PC is the address of the instruction byte following the DJNZ statement. When the specified
Working Register counter reaches zero, control falls through to the statement following the DJNZ instruction.
Flags:
C:
Z:
S:
V:
D:
H:
Note:
The Working Register being used as a counter must be one of the Registers from 04H to EFH. Use of one of the
I/O ports, control or peripheral registers will have undefined results.
Example:
DJNZ is typically used to control a "loop" of instructions. In this example, 12 bytes are moved from one buffer area
in the register file to another. The steps involved are:
•
Load 12 into the counter (Working Register R6).
•
Set up the loop to perform the moves.
•
End the loop with DJNZ.
The assembly listing required for this routine is as follows:
LOOP
:
UM001601-0803
Unaffected
Unaffected
Unaffected
Unaffected
Unaffected
Unaffected
LD R6, 12
;Load Counter
LD R9, @R6
;Move one byte to
LD @R6, R9
;new location
DJNZ R6, LOOP
;Decrement and Loop until
counter = 0
Z8 Microcontrollers
Instruction Descriptions and Formats
12-29
Need help?
Do you have a question about the Z8 and is the answer not in the manual?