A no-op instruction is an instruction that has no effect.
A common no-op instruction is
Here is a sequence of instructions. The "load" and "add" represent typical instructions. The "jump" instruction shows the address we wish to put into the PC. (The actual MIPS instruction for this involves details that we are skipping for the moment.)
The last instruction, a no-op, fills the branch delay slot to give the PC time to change. Once started, the four instructions execute in an unending loop.
|PC just after this
instruction has executed
(at the bottom of the cycle)
effect of the jump
A loop structure is created with the jump instruction. The intent of the jump instruction is to put the address 0x00400000 into the PC. However, this effect is is not seen until after the instruction in the branch delay slot has executed.
(Thought question:) Is there anything in hardware that guarantees that the target of a jump instruction is an instruction (and not data)?