Eroxl's Notes
Program Counter

The program counter is a special register that memory address of the next instruction to be executed, it is continually incremented after an instruction is fetched. Control transfers, like jumping or branching can change the program counter in ways other than the standard basic incrementation.

When a subroutine is called it branches as well as storing the preceding contents of the program counter somewhere, so that when it returns the saved contents of the program counter can be placed back into the program counter which can then resume sequential execution after the subroutine call.