May I please get help from you regarding a confusion that if DJNZ mnemonic is used then only the label that's given with it will be executed or all the labels from that specific label to DJNZ mnemonic will be executed?
i.e.
DELAY: MOV R5,#100
BACK: MOV R2,#200
AGAIN: MOV R3,#250
HERE: NOP
NOP
NOP
DJNZ R3,HERE
DJNZ R2,AGAIN
DJNZ R5,BACK
So when DJNZ R2 is executed will it execute only AGAIN Label statement (MOV R3,#250) or it'll also execute HERE label as well with each execution of AGAIN label? Like in other programming languages we always have return or break statements while there's nothing like that in this program so I do suppose that HERE should always be executed in each cycle of AGAIN but not totally sure about this.
DJNZ decrements the specified register and then jumps to the specified address if the register is not zero. In your example the address is specified by a label.
Jumping to an adress means the program counter (PC) is set to the resp. address. Then the execution continues from that address. First execute the code in the first adress, increment the PC, execute the code at the new address, increment ... until it reaches the next branch (jump command). Then the PC is set to the jump address and so on.
Knowing this, you will understand DJNZ does not execute a label or the command beside the label. It sets the Program Counter to a new value. The processor or controller continues execution from this address. So if you jump to AGAIN, it's clear that you also execute HERE and the NOPs below it.