1. One of a small number of high-speed memory locations in a computer's CPU. Registers differ from ordinary random-access memory in several respects: There are only a small number of registers (the "register set"), typically 32 in a modern processor though some, e.g. SPARC, have as many as 144. A register may be directly addressed with a few bits. In contrast, there are usually millions of words of main memory (RAM), requiring at least twenty bits to specify a memory location. Main memory locations are often specified indirectly, using an indirect addressing mode where the actual memory address is held in a register. Registers are fast; typically, two registers can be read and a third written -- all in a single cycle. Memory is slower; a single access can require several cycles. The limited size and high speed of the register set makes it one of the critical resources in most computer architectures. Register allocation, typically one phase of the back-end, controls the use of registers by a compiled program. See also accumulator, FUBAR, orthogonal, register dancing, register allocation, register spilling. 2. An addressable location in a memory-mapped peripheral device. E.g. the transmit data register in a UART.