Ce ne sont pas tout à fait les mêmes. Les registres sont les endroits où se trouvent les valeurs sur lesquelles la CPU travaille réellement. La conception du processeur est telle qu'elle ne peut réellement modifier ou agir sur une valeur que lorsqu'elle se trouve dans un registre. Les registres peuvent donc fonctionner en logique, tandis que la mémoire (y compris le cache) ne peut contenir que des valeurs à partir desquelles le CPU lit et écrit.
Imaginez un charpentier au travail. Il a quelques éléments en main (registres) puis, tout près de son établi (cache), des choses sur lesquelles il travaille fréquemment, mais qu'il n'utilise pas en ce moment, puis dans l'atelier (mémoire principale) des choses qui se rapportent à le projet en cours, mais qui ne sont pas immédiatement suffisamment importants pour être sur l'établi.
EDIT: Voici une explication simple du fonctionnement de la logique de registre.
Imaginons que nous ayons quatre registres nommés R1..R4. Si vous compilez une instruction qui ressemble à ceci:
x = y + z * 3;
le compilateur afficherait du code machine qui (une fois démonté) ressemble à ceci:
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
Étant donné que la plupart des processeurs modernes ont des registres d'une largeur de 32 ou 64 bits, ils peuvent faire des calculs sur n'importe quelle valeur jusqu'à la taille qu'ils peuvent contenir. Ils n'ont pas besoin de registres spéciaux pour les petites valeurs; ils utilisent simplement des instructions ASM spéciales qui leur indiquent de n'utiliser qu'une partie du registre. Et, tout comme le menuisier avec seulement deux mains, les registres ne peuvent contenir qu'une petite quantité de données à la fois, mais ils peuvent être réutilisés, en passant et en sortant des données actives, ce qui signifie que "beaucoup de registres" ne le font pas finissent par être nécessaires. (Avoir beaucoup de données disponibles permet aux compilateurs de générer du code plus rapidement, bien sûr, mais ce n'est pas strictement nécessaire.)