Processor Register - Wikipedia
Processor Register - Wikipedia
Almost all computers, whether load/store architecture or not, load items of data from a larger memory
into registers where they are used for arithmetic operations, bitwise operations, and other operations,
and are manipulated or tested by machine instructions. Manipulated items are then often stored back to
main memory, either by the same instruction or by a subsequent one. Modern processors use either
static or dynamic random-access memory (RAM) as main memory, with the latter usually accessed via
one or more cache levels.
Processor registers are normally at the top of the memory hierarchy, and provide the fastest way to
access data. The term normally refers only to the group of registers that are directly encoded as part of an
instruction, as defined by the instruction set. However, modern high-performance CPUs often have
duplicates of these "architectural registers" in order to improve performance via register renaming,
allowing parallel and speculative execution. Modern x86 design acquired these techniques around 1995
with the releases of Pentium Pro, Cyrix 6x86, Nx586, and AMD K5.
When a computer program accesses the same data repeatedly, this is called locality of reference. Holding
frequently used values in registers can be critical to a program's performance. Register allocation is
performed either by a compiler in the code generation phase, or manually by an assembly language
programmer.
Size
Registers are normally measured by the number of bits they can hold, for example, an 8-bit register, 32-
bit register, 64-bit register, 128-bit register, or more. In some instruction sets, the registers can operate
in various modes, breaking down their storage memory into smaller parts (32-bit into four 8-bit ones, for
instance) to which multiple data (vector, or one-dimensional array of data) can be loaded and operated
upon at the same time. Typically it is implemented by adding extra registers that map their memory into
a larger register. Processors that have the ability to execute single instructions on multiple data are called
vector processors.
Types
A processor often contains several kinds of registers, which can be classified according to the types of
values they can store or the instructions that operate on them:
User-accessible registers can be read or written by machine instructions. The most common
division of user-accessible registers is a division into data registers and address registers.
Control registers are used to set the behaviour of system components such as the CPU.
Data registers can hold numeric data values such as integers and, in some architectures,
floating-point numbers, as well as characters, small bit arrays and other data. In some older
architectures, such as the IBM 704, the IBM 709 and successors, the PDP-1, the PDP-4/PDP-
7/PDP-9/PDP-15, the PDP-5/PDP-8, and the HP 2100, a special data register known as the
accumulator is used implicitly for many operations.
Address registers hold addresses and are used by instructions that indirectly access primary
memory.
Some processors contain registers that may only be used to hold an address or only to hold
numeric values (in some cases used as an index register whose value is added as an offset
from some address); others allow registers to hold either kind of quantity. A wide variety of
possible addressing modes, used to specify the effective address of an operand, exist.
The stack and frame pointers are used to manage the run-time stack. Rarely, other data
stacks are addressed by dedicated address registers (see stack machine).
General-purpose registers (GPRs) can store both data and addresses, i.e., they are combined
data/address registers; in some architectures, the register file is unified so that the GPRs can
store floating-point numbers as well.
Status registers hold truth values often used to determine whether some instruction should or
should not be executed.
Floating-point registers (FPRs) store floating-point numbers in many architectures.
Constant registers hold read-only values such as zero, one, or pi.
Vector registers hold data for vector processing done by SIMD instructions (Single Instruction,
Multiple Data).
Special-purpose registers (SPRs) hold some elements of the program state; they usually
include the program counter, also called the instruction pointer, and the status register; the
program counter and status register might be combined in a program status word (PSW) register.
The aforementioned stack pointer is sometimes also included in this group. Embedded
microprocessors, such as microcontrollers, can also have special function registers
corresponding to specialized hardware elements.
Model-specific registers (also called machine-specific registers) store data and settings related
to the processor itself. Because their meanings are attached to the design of a specific processor,
they are not expected to remain standard between processor generations.
Memory type range registers (MTRRs)
Internal registers are not accessible by instructions and are used internally for processor
operations.
The instruction register holds the instruction currently being executed.
Registers related to fetching information from RAM, a collection of storage registers located on
separate chips from the CPU:
Memory buffer register (MBR), also known as memory data register (MDR)
Memory address register (MAR)
Architectural registers are the registers visible to software and are defined by an architecture. They
may not correspond to the physical hardware if register renaming is being performed by the
underlying hardware.
Hardware registers are similar, but occur outside CPUs.
In some architectures (such as SPARC and MIPS), the first or last register in the integer register file is a
pseudo-register in that it is hardwired to always return zero when read (mostly to simplify indexing
modes), and it cannot be overwritten. In Alpha, this is also done for the floating-point register file. As a
result of this, register files are commonly quoted as having one register more than how many of them are
actually usable; for example, 32 registers are quoted when only 31 of them fit within the above definition
of a register.
Examples
The following table shows the number of registers in several mainstream CPU architectures. Note that in
x86-compatible processors, the stack pointer (ESP) is counted as an integer register, even though there
are a limited number of instructions that may be used to operate on its contents. Similar caveats apply to
most architectures.
Although all of the below-listed architectures are different, almost all are in a basic arrangement known
as the von Neumann architecture, first proposed by the Hungarian-American mathematician John von
Neumann. It is also noteworthy that the number of registers on GPUs is much higher than that on CPUs.
Architecture GPRs/data+address registers FP registers Notes
All data manipulation instructions
work solely within registers, and data
AT&T Hobbit 0 stack of 7
must be moved into a register before
processing.
Motorola
2 data, 1 index, 1 stack 0
6800[15]
SH 16-bit 16 6
Architecture GPRs/data+address registers FP registers Notes
8
NS320xx[26] 8 (if FP present)
AVR
32 0
microcontroller
Usage
The number of registers available on a processor and the operations that can be performed using those
registers has a significant impact on the efficiency of code generated by optimizing compilers. The
Strahler number of an expression tree gives the minimum number of registers required to evaluate that
expression tree.
See also
CPU cache
Quantum register
Register allocation
Register file
Shift register
References
1. "What is a processor register?" ([Link]
Educative: Interactive Courses for Software Developers. Retrieved 2022-08-12.
2. "A Survey of Techniques for Designing and Managing CPU Register File" ([Link]
net/publication/303802254).
3. "Cray-1 Computer System Hardware Reference Manual" ([Link]
240004C_CRAY-1_Hardware_Reference_Nov77.pdf) (PDF). Cray Research. November 1977.
Archived ([Link]
40004C_CRAY-1_Hardware_Reference_Nov77.pdf) (PDF) from the original on 2021-11-07.
Retrieved 2022-12-23.
4. "MCS-4 Micro Computer Set Users Manual" ([Link]
MCS4/MCS-4_UsersManual_Feb73.pdf) (PDF). Intel. February 1973. Archived ([Link]
rg/web/20050224073529/[Link] (PDF)
from the original on 2005-02-24.
5. "8008 8 Bit Parallel Central Processor Unit Users Manual" ([Link]
components/intel/MCS8/Intel_8008_8-Bit_Parallel_Central_Processing_Unit_Rev4_Nov73.pdf)
(PDF). Intel. November 1973. Archived ([Link]
[Link]/pdf/intel/MCS8/8008usersManualRev4_Nov73.pdf) (PDF) from the original on 2007-10-04.
Retrieved January 23, 2014.
6. "Intel 8080 Microcomputer Systems User's Manual" ([Link]
ntel/MCS80/98-153B_Intel_8080_Microcomputer_Systems_Users_Manual_197509.pdf) (PDF). Intel.
September 1975. Archived ([Link]
l/MCS80/98-153B_Intel_8080_Microcomputer_Systems_Users_Manual_197509.pdf) (PDF) from the
original on 2010-12-06. Retrieved January 23, 2014.
7. "80286 and 80287 Programmer's Reference Manual" ([Link]
s/intel/80286/210498-005_80286_and_80287_Programmers_Reference_Manual_1987.pdf) (PDF).
Intel. 1987. Archived ([Link]
s/pdf/intel/80286/210498-005_80286_and_80287_Programmers_Reference_Manual_1987.pdf)
(PDF) from the original on 2015-07-23.
8. "Intel 64 and IA-32 Architectures Software Developer Manuals" ([Link]
s/en/processors/[Link]). Intel. 4 December 2019.
9. "AMD64 Architecture Programmer's Manual Volume 1: Application Programming" ([Link]
om/content/dam/amd/en/documents/processor-tech-docs/programmer-references/[Link]) (PDF).
AMD. October 2013.
10. "Intel Architecture Instruction Set Extensions and Future Features Programming Reference" ([Link]
[Link]/sites/default/files/managed/c5/15/architecture-instruction-set-extensions-programmi
[Link]) (PDF). Intel. January 2018.
11. F8, Preliminary Microprocessor User's Manual ([Link]
UM_Jan75.pdf) (PDF). Fairchild. January 1975.
12. F8 Guide to Programming ([Link]
ming_1977.pdf) (PDF). Fairchild MOS Microcomputer Division. 1977.
13. "Nios II Classic Processor Reference Guide" ([Link]
n2cpu_nii5v1.pdf) (PDF). Altera. April 2, 2015.
14. "Nios II Gen2 Processor Reference Guide" ([Link]
n_US/pdfs/literature/hb/nios2/[Link]) (PDF). Altera. April 2, 2015.
15. "M6800 Programming Reference Manual" ([Link]
rola_M6800_Programming_Reference_Manual_M68PRM(D)_Nov76.pdf) (PDF). Motorola.
November 1976. Archived ([Link]
orola/6800/Motorola_M6800_Programming_Reference_Manual_M68PRM(D)_Nov76.pdf) (PDF)
from the original on 2011-10-14. Retrieved May 18, 2015.
16. "Motorola M68000 Family Programmer's Reference Manual" ([Link]
-manual/[Link]) (PDF). Motorola. 1992. Retrieved November 10, 2024.
17. "CUDA C Programming Guide" ([Link]
compute-capabilities). Nvidia. 2019. Retrieved Jan 9, 2020.
18. Jia, Zhe; Maggioni, Marco; Staiger, Benjamin; Scarpazza, Daniele P. (2018). "Dissecting the NVIDIA
Volta GPU Architecture via Microbenchmarking". arXiv:1804.06826 ([Link]
[[Link] ([Link]
19. Control Data 6000 Series Computer Systems, Reference Manual ([Link]
[Link]/pdf/cdc/Tom_Hunter_Scans/6000_Series_Computer_Systems_RefMan_Jul65.pdf) (PDF).
Control Data Corporation. July 1965.
20. IBM System/360 Principles of Operation ([Link]
2-6821-0_360PrincOps.pdf) (PDF). IBM.
21. IBM System/370, Principles of Operation ([Link]
Ops/GA22-7000-4_370_Principles_Of_Operation_Sep75.pdf) (PDF). IBM. September 1, 1975.
22. z/Architecture, Principles of Operation ([Link]
[Link]/[Link]) (PDF) (Seventh ed.). IBM. 2008.
23. "IBM Enterprise Systems Architecture/370 and System/370 - Vector Operations" ([Link]
pdf/ibm/370/vectorFacility/SA22-7125-3_Vector_Operations_Aug88.pdf) (PDF). IBM. SA22-7125-3.
Retrieved May 11, 2020.
24. "IBM S/390 G5 Microprocessor" ([Link]
n/HC10.S5/[Link]) (PDF).
25. "MMIX Home Page" ([Link]
26. "Series 32000 Databook" ([Link]
2000_Databook.pdf) (PDF). National Semiconductor. Archived ([Link]
5004028/[Link]
df) (PDF) from the original on 2017-11-25.
27. Intel Itanium Architecture, Software Developer's Manual, Volume 3: Intel Itanium Instruction Set
Reference ([Link]
[Link]) (PDF). Intel. May 2010.
28. Weaver, David L.; Germond, Tom (eds.). The SPARC Architecture Manual, Version 9 ([Link]
[Link]/~novak/[Link]) (PDF). Santa Clara, California: SPARC International, Inc.
29. Power ISA Version 3.1B ([Link] (PDF).
OpenPOWER Foundation. September 14, 2021.
30. Blackfin Processor, Programming Reference, Revision 2.2 ([Link]
cumentation/processor-manuals/Blackfin_pgr_rev2.[Link]) (PDF). Analog Devices. February 2013.
31. "Synergistic Processor Unit Instruction Set Architecture Version 1.2" ([Link]
echlib/[Link]/techdocs/76CA6C7304210F3987257060006F2C44/$file/SPU_ISA_v1.2_27Jan200
7_pub.pdf) (PDF). IBM. January 27, 2007.
32. Leonard, Timothy E., ed. (1987). VAX Architecture, Reference Manual ([Link]
com/pdf/dec/vax/archSpec/EY-3459E-DP_VAX_Architecture_Reference_Manual_1987.pdf) (PDF).
DEC books.
33. Alpha Architecture Reference Manual ([Link] (PDF)
(Fourth ed.). Compaq Computer Corporation. January 2002.
34. "Learning 65816 Assembly" ([Link] Super
Famicom Development Wiki. Retrieved 14 November 2019.
35. "Procedure Call Standard for the ARM Architecture" ([Link]
c.ihi0042d/IHI0042D_aapcs.pdf) (PDF). ARM Holdings. 30 November 2013. Retrieved 27 May 2013.
36. "2.6.2. The Thumb-state register set" ([Link]
odel/registers/the-thumb-state-register-set). ARM7TDMI Technical Reference Manual. ARM
Holdings.
37. Arm A64 Instruction Set Architecture, Armv8, for Armv8-A architecture profile ([Link]
[Link]/~cs452/docs/rpi4b/ISA_A64_xml_v88A-2021-12_OPT.pdf) (PDF). Arm. 2021.
38. MIPS64 Architecture For Programmers, Volume II: The MIPS64 Instruction Set ([Link]
du/ee4720/[Link]) (PDF). RISC-V Foundation. March 12, 2001. Retrieved October 6, 2024.
39. Waterman, Andrew; Asanovi, Krste, eds. (May 2017). The RISC-V, Instruction Set Manual, Volume I:
User-Level ISA, Document Version 2.2 ([Link]
pdf) (PDF). RISC-V Foundation.
40. "Epiphany Architecture Reference" ([Link] (PDF).