About
Register is a hardware device component that is used for two purposes:
- storage of value (at high speed). See storage
- passing argument and retrieving return value (to communicate between hardware devices). See interface
The term is often used to refer only to the group of registers that are directly encoded as part of an instruction, as defined by the instruction set. More properly, these are called the “architectural registers”.
Zoom of CPU register of the Z80 processor (Source)
Articles Related
Usage
Storage
In a CPU, most registers are used as high-speed storage for temporary data.
They are also memory location.
It is a small amount of storage available on the CPU whose contents can be accessed more quickly than storage available elsewhere.
Processor registers are at the top of the memory hierarchy, and provide the fastest way for a CPU to access data.
Allocating frequently used variables to registers can be critical to a program's performance. This action (register allocation) is performed by a compiler in the code generation phase.
Interface
A software can control a hardware device via its register by:
- writing to them
- or receiving information from them
Every devices controlled by the CPU have a set of registers for interfacing with the CPU. Processor registers are located inside the processor.
Each register typically holds a word of data (from 8-bit to 128 bit). CPU instructions instruct the arithmetic and logic unit (ALU) to perform various calculations or other operations on this data (or with the help of it).
The CPU can compute an addition by:
- placing the two numbers into two separate registers
- compute the sum and saved it in a third register.
Example of assembly code - Copy a block of memory from one location to another with the 16bit - general purpose register.
;
; Entry registers
; BC - Number of bytes to copy
; DE - Address of source data block
; HL - Address of target data block
;
; Return registers
; BC - Zero
org 1000h ;Origin at 1000h
memcpy public
mov a,b ;Test BC,
ora c ;If BC = 0,
rz ;Return
loop: ldax d ;Load A from (DE)
mov m,a ;Store A into (HL)
inx d ;Increment DE
inx h ;Increment HL
dcx b ;Decrement BC (does not affect Flags)
mov a,b ;Test for done
ora c ;B | C = 0 and done
jnz loop ;Repeat loop until BC = 0
ret