a register and the general-purpose registers
When you do arithmetic in your head, you hold a couple of numbers in mind at once — you do not run to a filing cabinet for every digit. A register is the CPU's equivalent of holding a number in mind: a tiny, named storage slot built right into the processor, the fastest place a value can live. There are only a few dozen of them, and on a 64-bit machine each holds exactly 64 bits — one machine word.
The CPU can only do arithmetic and logic on values that are sitting in registers. To add two numbers in memory, it must first load them into registers, add register-to-register, then store the result back to memory — memory is much slower, so the CPU keeps the values it is working with in registers. The general-purpose registers are the handful of registers a program is free to use for whatever it likes: holding a loop counter, an address, an intermediate result. On x86-64 they have names like rax, rbx, rcx, rdx, rsi, rdi, and r8 through r15; on ARM/AArch64 they are x0 through x30. A few registers are special-purpose instead — the program counter, the stack pointer, and the flags register each have a fixed job.
Registers explain a lot of what compiled code looks like. A compiler spends much of its effort deciding which variables to keep in which registers (called register allocation), because a value in a register is far faster to reach than one in memory. When there are more live values than registers, the compiler 'spills' some to the stack. This is why the disassembly of a simple C function is full of mov instructions shuffling values between registers and memory.
mov rax, 5 puts the value 5 into register rax; add rax, rbx adds rbx into rax, leaving the sum in rax.
Registers are named, fixed-width slots inside the CPU; arithmetic happens here, not in memory.
A register is not a memory location: it has a name (rax), not an address, so you cannot take its address with &. The number of registers is tiny and fixed by the hardware — this scarcity, not laziness, is why compilers work so hard at register allocation.