DEV Community

Cover image for What are CPU registers
Abdelhadi-Amhamdi
Abdelhadi-Amhamdi

Posted on • Updated on

What are CPU registers

Introduction

Computer registers are small, high-speed storage units within a computer's central processing unit (CPU) used to temporarily hold data and instructions for quick access during processing. They are essential components that directly impact the speed and efficiency of CPU operations.

Types of CPU Registers

  • General-purpose registers (GPRs)

    They can be used for wide varity of tasks including for example holding operands for arithmetic or logic operations, temporarily storing data, and holding addresses

  • Special-purpose register

    These registers are used for specific tasks, such as:

    • Program Counter (PC): Stores the address of the next instruction to be executed.
    • Stack Pointer (SP): Points to the top of the current stack in memory.
    • Status Registers : Holds status information about the result of operations, such as zero, carry, or overflow flags
  • Floating-point registers (FPRs)

    They are specialized registers used to handle floating point operations , they are known as as a math coprocessor , which processes floating-point arithmetic efficiently

How CPU Registers Work

To understand how registers work, we'll discuss two key concepts. The first is the Fetch-Decode-Execute Cycle, also known as the instruction cycle. This fundamental process is how a computer's CPU (central processing unit) executes instructions from a program. It consists of three main stages:

  • Fetch

    The CPU retrieves an instruction from memory. The memory address of the next instruction to be executed is stored in a special register called the Program Counter (PC)

  • Decode

    The fetched instruction is passed to the Instruction Decoder within the CPU

  • Execute

    The CPU carries out the decoded instruction

The second key concept is Register Addressing Modes. This refers to how the CPU specifies the location of data in its registers, allowing for quick data access. Here are some common modes:

  • Register Direct Addressing

    For this type the data is in the register

MOV R1, R2  ; Copy the contents of register R2 to register R1
Enter fullscreen mode Exit fullscreen mode
  • Register Indrect Addressing

    For this one the register holds the memory addresse of the data

MOV R1, [R2]  ; Copy the data from the memory address pointed to by R2 into register R1

Enter fullscreen mode Exit fullscreen mode
  • Register Offset Addressing

    For this type, an offset is added to the register value to obtain the address of the data.

MOV R1, [R2 + 4]  ; Copy data from the memory location (R2 + 4) into register R1
Enter fullscreen mode Exit fullscreen mode

Register Organization and Architecture

In this section, we will discuss several important concepts. The first is Register Files which is a collection of registers in the cpu orgnized for fast access and often used to store temporary data during the execution of instructions, Each register in the file has a unique identifier, often referred to as its "address." Instructions can access specific registers using this identifier.

The secend is Register Banks which are a method of organizing registers in a CPU into separate groups or "banks," allowing the processor to access multiple registers simultaneously, allows for parallel instruction execution and reduces conflicts over register usage , this is an example to understand the power of register banks.

Consider a CPU where the register file is divided into two banks:

  • Bank A: Contains registers R0 to R15.
  • Bank B: Contains registers R16 to R31.

When the CPU is executing two instructions simultaneously:

  1. Instruction 1 might need to operate on registers in Bank A.
  2. Instruction 2 might need to operate on registers in Bank B.

Both instructions can be executed in parallel, as the CPU can access registers from both banks at the same time, without contention for the same registers.

Conclusion

Understanding CPU registers is crucial for anyone involved in low-level programming, system design, and computer architecture because registers are fundamental to how a processor performs operations. They serve as the fastest accessible memory in a CPU, holding data that the processor actively works with.

Top comments (3)

Collapse
 
pauljlucas profile image
Paul J. Lucas

Your post is conflating CPU registers with the register keyword. It's fine to explain what registers are, but the register keyword hasn't been necessary in either C or C++ programs for decades and you should emphasize that there's no reason to use it — which means there's really no reason to list the rules for using it.

Collapse
 
aamhamdi profile image
Abdelhadi-Amhamdi

Thank you for your comment. I see your point regarding the use of the register keyword, which has been deprecated. I will address and correct it.

Collapse
 
pauljlucas profile image
Paul J. Lucas

That's not correct.

register has only ever been deprecated in C++. As of C++17, it's been made unused and reserved.

register is still allowed (and is not deprecated) in C, though it's pretty much useless since, as you correctly noted, the compiler will basically do as it pleases with respect to what to put into registers. The ANSI/ISO C Committee is much more conservative than their counterpart C++ committee. I expect the C committee will eventually get around to officially deprecating and ultimately removing register.