SoC
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
  • Arm Cortex M3
  • Contact
Reading: Difference Between Program Counter and Link Register
SUBSCRIBE
SoCSoC
Font ResizerAa
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
Search
  • Home
  • Arm
  • Arm Cortex M0/M0+
  • Arm Cortex M4
Have an existing account? Sign In
Follow US
  • Looking for Something?
  • Privacy Policy
  • About Us
  • Sitemap
  • Contact Us
© S-O-C.ORG, All Rights Reserved.
Arm

Difference Between Program Counter and Link Register

Eileen David
Last updated: September 15, 2023 9:04 am
Eileen David 8 Min Read
Share
SHARE

The program counter and link register are two important registers used in ARM processors to handle program execution. While they serve complementary purposes, there are key differences between the two.

Contents
What is a Program Counter?What is a Link Register?Differences Between Program Counter and Link RegisterPurposeModificationUse in Jumps/BranchesPersistenceException HandlingConditional ExecutionIndex AddressingInitializationProgram Counter DetailsLink Register DetailsTypical Usage in CodeAdvantages of Using PC and LRConclusion

What is a Program Counter?

The program counter, commonly abbreviated as PC, is a processor register that contains the address of the next instruction to be executed. As each instruction finishes executing, the PC is automatically incremented to point to the next instruction. This allows the processor to sequentially step through the instructions that make up a program.

Some key facts about program counters:

  • Exists in almost all modern CPU architectures, including ARM
  • Points to the next instruction to be executed
  • Automatically incremented after each instruction execution
  • Allows sequential execution of program instructions
  • Can be manipulated directly or indirectly to implement branches and jumps
  • Resets to a starting value (e.g. 0) on processor reset

The program counter is central to program flow and execution. Without it, the processor would not inherently know which instruction to execute next. Modifying the PC allows for non-sequential program execution, including branches, subroutine calls/returns, and jumps.

What is a Link Register?

The link register, commonly abbreviated as LR, is used in ARM processors to facilitate subroutine calls and returns. When used, the LR holds the return address back to the instruction after the subroutine call.

Some key facts about link registers:

  • Exists in most ARM processor modes
  • Stores the return address when a Branch with Link (BL) instruction is executed
  • Used by the subroutine to return to the caller
  • Typically restored from the stack frame on function return
  • Special use in exception handling to return from interrupts
  • Can be optionally omitted or replaced depending on compiler

The link register is vital for nested subroutine calls to operate properly. It provides a way for subroutines to remember where to return to. The LR is especially important in interrupts, where the return address is saved/restored to seamlessly resume execution.

Differences Between Program Counter and Link Register

While the program counter and link register work together inARM processors, there are some key differences:

Purpose

The program counter indicates the next instruction to execute. It handles overall program flow.
The link register stores subroutine return addresses. It facilitates calling and returning from subroutines.

Modification

The program counter is incremented automatically after each instruction.
The link register is only updated manually when a subroutine call occurs.

Use in Jumps/Branches

The program counter is directly modified on jumps and branches.
The link register is typically preserved across jumps and branches.

Persistence

The program counter persists across subroutine calls.
The link register is often saved to the stack frame on subroutine entry.

Exception Handling

The program counter is saved in exception handling to later resume execution.
The link register is overwritten with the exception return address.

Conditional Execution

The program counter can be conditionally updated based on flags.
The link register is not directly involved in conditional instruction execution.

Index Addressing

The program counter value is rarely directly used to index memory.
The link register can be used as an index in some restricted addressing modes.

Initialization

The program counter resets at processor startup.
The link register does not have a fixed reset value.

Program Counter Details

Let’s explore some additional key details about program counters in ARM and other processor architectures:

  • The ARM program counter is typically 32 or 64 bits wide depending on architecture.
  • In ARM, it exists in many processor modes including User, FIQ, IRQ, Supervisor, Abort, Undefined, System.
  • The PC increment varies by architecture and processor mode. It may be 1, 2, 4 bytes after each instruction.
  • PC updates occur at different stages in the pipeline depending on the microarchitecture.
  • The PC can be set indirectly via the stack pointer on exception entry and return.
  • Some instructions directly allow PC reads and writes for jumps/calls.
  • Pipelined processors use delayed Branch instructions to avoid PC update issues.
  • Caching, pipelining, and speculation techniques optimize PC-directed instruction fetching.

Overall, the PC forms the backbone of the processor’s instruction sequencing and control flow capabilities. It is intrinsically tied to instruction pipelining and caching.

Link Register Details

Here are some additional details about link registers in ARM processors:

  • The LR is 32 bits wide in 32-bit ARM, 64 bits in 64-bit ARM.
  • The LR exists in User, FIQ, IRQ, Supervisor and System modes.
  • The BL instruction stores the return address in the LR on subroutine calls.
  • The LR can be saved to the stack or another register on function entry.
  • The LDM instruction is used on return to restore the LR from stack.
  • The BX instruction can switch execution to the LR to return.
  • Interrupt handling saves LR to allow return from handler.
  • Position independent code (PIC) uses PC-relative addressing if no LR.

The presence and use of the link register enables efficient function calls and returns in layered, nested software. It is especially useful for interrupt handling and operating system development.

Typical Usage in Code

Here is some example ARM assembly code using the program counter and link register: Main: MOV R0, #10 ; Set R0 to 10 BL Subroutine ; Call subroutine ; … Main continues executing Subroutine: PUSH {LR} ; Save LR to stack ; … Do subroutine work POP {LR} ; Restore saved LR BX LR ; Branch to LR to return

This shows:

  • The PC automatically stepping through the instructions in Main
  • The BL instruction storing PC+4 (next instruction) into LR
  • LR being saved/restored to enable return to Main
  • BX branching to the restored LR to return

The PC handles the overall flow while the LR facilitates the subroutine call/return.

Advantages of Using PC and LR

Some benefits of using the program counter and link register:

  • The PC enables sequential execution and automated branching.
  • The LR allows for efficient stacked subroutine calls.
  • Returns happen quickly by just restoring the LR.
  • No need to manually calculate return addresses.
  • Interrupt handlers can resume cleanly with LR.
  • Subroutines can be relocated in memory if needed.
  • Call optimization only requires updating LR.

Proper use of the PC and LR results in streamlined, optimized code flow and subroutine handling.

Conclusion

In summary, the program counter and link register serve complementary purposes in ARM processors. The program counter handles overall instruction sequencing while the link register enables stack-based subroutine calls and returns. While they interact, understanding the key differences between the PC and LR provides greater insight into how ARM processors efficiently execute programs and functions.

Newsletter Form (#3)

More ARM insights right in your inbox

 


Share This Article
Facebook Twitter Email Copy Link Print
Previous Article How to get started with ARM Cortex-M and Linux?
Next Article Is CMSIS a library?
Leave a comment Leave a comment

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

2k Followers Like
3k Followers Follow
10.1k Followers Pin
- Sponsored-
Ad image

You Might Also Like

What are the advantages of the ARM Cortex M3?

The ARM Cortex-M3 processor is a 32-bit processor core licensed…

11 Min Read

What is a Non-Maskable Interrupt (NMI) in ARM?

A non-maskable interrupt (NMI) in ARM is a hardware interrupt…

5 Min Read

How to Implement a Loop Position Independent in ARM Cortex-M0+?

Implementing a loop position independent in ARM Cortex-M0+ requires utilizing…

7 Min Read

ARM Neon Intrinsics

ARM Neon is a Single Instruction Multiple Data (SIMD) architecture…

7 Min Read
SoCSoC
  • Looking for Something?
  • Privacy Policy
  • About Us
  • Sitemap
  • Contact Us
Welcome Back!

Sign in to your account