Program Counter

What is Program Counter?

A program counter refers to the specific type of register in the processor that mainly holds the address of the subsequent instructions that are to be executed. When an instruction is fetched, it points to the following instruction in the cycle.

Technically, it is a register or a digital counter in a computer processor which increases the stored value by 1 after every instruction is fetched from it by the CPU. When the computer is reset or restarted, the counter returns to 0.

Understanding Program Counter

Understanding Program Counter

All the data used in a computer and its memory have a particular address.

This is the address that is stored in the program counter and the software updates this address when an instruction is executed.

This ensures that the address of the following instruction to be fetched is readily available.

The program counter actually passes the information to the memory address register.

This is a part of the standard fetch operation, execution cycle, or the instruction sequencer which indicates the program sequence.

The CPU then reads the stored address to find the particular instruction to be carried out from the counter and performs it in sequence.

The stored value of the program counter changes continuously. It is increased by 1 when an instruction is fetched and reverts to 0 when the system restarts.

A program counter is also known by different names such as:

From a technical point of view, a program counter is pretty much the same as the other process registers of a computer.

It acts as a store of binary latches wherein each of them is represented by one bit of value.

It usually works in tandem with other process registers that identify a page or a memory segment in order to make out the present instruction.

This allows the program counter to work with fewer bits and assume that the majority of the memory elements of interest are within the current environs.

It can be accessed, modified, or loaded by using access, branch or jump instructions.

Loading can also be done using the address with the help of data processing instructions.

Read Also:  What is APU (Accelerated Processing Unit)? (Explained)

When the processor fetches an instruction from memory, as it is supposed to, the sequence of the control transfer instructions is changed with the new value placed on the program counter. These include:

The program counter is modified at some point in the cycle just to ensure that the following instruction is carried out is a different one.

It is also done to ensure that this instruction is available at the beginning of the memory address and is the one that immediately follows the last memory address of the current instruction.

As a binary counter, the value increases when a pulse is applied to the COUNT UP input.

It may also change when the CPU computes a different value and loads it into the counter by applying a pulse to its LOAD input.

Typically, the program counter will specify a memory address as +n every time an instruction is carried out. For example:

However, it will store the jump destination address if it is an interrupt instruction.

Program Counter Functions

The primary function of the program counter is to receive each instruction and store it sequentially so that when these instructions are fetched by the CPU, it points at the next instruction when the current one is done fetching. This ensures efficient moving of instructions forward.

Typically, the functions of the program counter can be summarized as follows:

The program counter points to the next instruction to be used even when the previous instruction is being executed and then points to another when the next one is, and so on. This ensures a quick and logical progression of the instructions.

However, depending on the configuration of the counter, it may even point at more than one instruction that may be related to the current instruction under processing.

And, in some designs, the program counter may point to an instruction that is next in the sequence but also, along with it, point to the one that has been just released and is currently at the point of being implemented.

Whatever it is, the function of the program counter is essential for a proper and faster execution of instructions.

Without it, the chances of the sequence being disrupted will be higher, which will, in turn, reduce the chances of the task being completed, if at all.

The counter acts as the conduit that diminishes the anomalies that may prevent the sequence from moving forward in the right manner.

What is a Program Counter in OS?

The program counter in an operating system implements a specific mechanism which ensures that the operating system has the necessary structures so that it does not face any issues in keeping track of the status of all the processes.

One of the most significant values that the operating system needs for a specific process is available in the program counter value.

Read Also:  Why CPU is Brain of Computer?

Ideally, the structure of the current value of the program counter for the process indicates where exactly the process is running currently in the program code.

Most modern operating systems support multitasking which essentially means that they can run several programs at the same time.

However, the number of tasks that can be executed depends on the number of cores or processors. If there are only one or two, there is no way in which you can execute multiple tasks concurrently.

However, it can be achieved if only an illusion can be created that more than one instruction is being executed by only one processor at the same time.

This can be accomplished if the operating system switches between the running and the to-be-executed processes very quickly.

This is how they can do it:

However, all of these should be done in less than a fraction of a second. This is facilitated by the sequential logic progression technique followed by the program counter.

The operating system can also virtually create program counters for every process so that it can control the flow of the processes with the help of these counters working with other process registers.

This is called scheduling in terms of the operating system.

Where is the Program Counter Stored?

In simple words, it is quite difficult to answer this question. It all depends on the system design and architecture as well as the needs related to the execution of the instructions.

It can be stored in the CPU hardware, in the Reorder Buffer, in the instruction retirement unit or simply as a general purpose register.

Normally, a program counter, being a CPU register, is expected to be stored in the CPU hardware. Well, in most cases, a program counter is a register stored there.

However, for superscalar out-of-order execution and other similar executions that need more than one instruction to be executed at one time, storing the program counter in the CPU may not help.

Ideally, the program counters in the modern CPUs are not like other typical registers and therefore there is no one place where they are really stored. These are:

Instruction Retirement Unit:

Apart from the CPU hardware, another place where the program counter can be stored is in the instruction retirement unit.

It is decoupled from the instructions that are being fetched and carried out. The programs see it without any speculation.

Reorder Buffer:

This is the third place where the program counter may be stored. This is quite convenient to store the program counter in the reorder buffer for each instruction along with the instruction.

In this case, the whole program counter may not be needed to store. A part of it which is enough to reconstruct the program counter according to the need can be stored.

General Purpose Register:

The program counter may be stored as a general purpose register, especially those instructions and codes that are not position dependent and need the value of the program counter for addressing the memory.

Here, transient copies are stored in the reservation station entries which the instructions use.

Is There a Program Counter in the Control Unit?

Yes, if the system is a traditional von Neumann architecture, there will be a program counter in the control unit, along with an address register as well as a register that stores and decodes the operation codes.

Read Also:  What is 7th Generation Processor? Pros, Cons & More

The address register and the other in this case are collectively called the instruction register.

However, you cannot call a program counter a control unit because these two are two different things altogether. For example:

In short, it is not a piece of circuitry like the control unit that controls the other parts of the CPU and directs operations being performed within it depending on the input instruction.

It basically controls different multiplexors that help the program counter to choose the correct function and decide that the value is incremented, based on the available options and input branch instruction.

Stack Pointer vs Program Counter

What are Program Counter Operation Examples?

One example of program counter operation For example, when you switch on your computer, a decimal number F000 is placed into the CPU by a signal.

This signal tells the CPU to look for the first instruction on the flash memory chip on the motherboard.

And, an address stored as 0x8020 in the program counter signifies that the processor is executing the instruction at the address 0x8019, and so on.

What is the Use of Program Counter Register?

A program counter is used as a CPU register that holds the memory address of the instruction to be executed next.

It expedites the overall process and is also used to track the execution points of the instructions.

What is the Size of Program Counter?

The width or size of the program counter is measured by the number of bits or latches. This size however is dependent on the CPU architecture.

Typically, it is a CPU register measuring 16 bits. This provides 16 lines, which is enough to store any memory address.


The program counter stores the address of the next instruction of a program that needs to be executed.

Holding all the instructions in a proper sequence, it helps with logical progression.