Non sono esattamente gli stessi. I registri sono i luoghi in cui si trovano i valori su cui sta effettivamente lavorando la CPU. Il design della CPU è tale che è in grado di modificare o agire in altro modo su un valore solo quando si trova in un registro. Quindi i registri possono funzionare in logica, mentre la memoria (inclusa la cache) può contenere solo valori letti dalla CPU e da cui scrive.
Immagina un falegname al lavoro. Ha alcuni oggetti nelle sue mani (registri) e poi, molto vicino al suo workbench (cache) su cose su cui sta lavorando frequentemente, ma che non usa proprio in questo momento, e poi nelle cose del workshop (memoria principale) che riguardano il progetto a portata di mano, ma che non sono immediatamente importanti abbastanza da essere sul banco di lavoro.
EDIT: ecco una semplice spiegazione di come funziona la logica del registro.
Immaginiamo di avere quattro registri chiamati R1..R4. Se compili una dichiarazione che assomiglia a questa:
x = y + z * 3;
il compilatore produrrebbe un codice macchina che (una volta smontato) assomiglia a questo:
LOAD R1, ADDRESS_Z //move the value of Z into register 1
MUL R1, 3 //multiply the value of register 1 by 3
LOAD R2, ADDRESS_Y //move the value of Y into register 2
ADD R1, R2 //adds the value in R2 to the value in R1
STORE R1, ADDRESS_X //move the value of register 1 into X
Dal momento che la maggior parte delle moderne CPU dispone di registri con larghezza di 32 o 64 bit, possono eseguire calcoli matematici su qualsiasi valore fino alla dimensione che possono contenere. Non hanno bisogno di registri speciali per valori minori; usano solo istruzioni ASM speciali che dicono di usare solo parte del registro. E, proprio come il falegname con solo due mani, i registri possono contenere solo una piccola quantità di dati contemporaneamente, ma possono essere riutilizzati, passando i dati attivi dentro e fuori di essi, il che significa che "molti registri" non lo fanno finiscono per essere necessari. (Avere molto a disposizione non consente ai compilatori di generare codice più veloce, ovviamente, ma non è strettamente necessario.)