Program control instructions can change the program counter to alter the flow of code execution. Conditional branch instructions and subroutine calls change the program counter based on status bit conditions or function needs. When an interrupt occurs internally or externally, the CPU handles it through fetch, decode and execute operations to switch to supervisor mode and service the interrupt.