Sie sind nicht ganz dasselbe. Die Register sind die Stellen, an denen sich die Werte befinden, an denen die CPU tatsächlich arbeitet. Das CPU-Design ist so ausgelegt, dass es einen Wert nur dann tatsächlich ändern oder anderweitig bearbeiten kann, wenn er sich in einem Register befindet. Register können also logisch arbeiten, während der Speicher (einschließlich Cache) nur Werte enthalten kann, aus denen die CPU liest und in die sie schreibt.
Stellen Sie sich einen Tischler bei der Arbeit vor. Er hat ein paar Gegenstände in den Händen (Register) und dann ganz in der Nähe auf seiner Werkbank (Cache) Dinge, an denen er häufig arbeitet, die er aber gerade nicht nutzt, und dann in der Werkstatt (Hauptspeicher) Dinge, die sich beziehen das Projekt zur Hand, aber das sind nicht sofort wichtig genug, um auf der Werkbank zu sein.
EDIT: Hier ist eine einfache Erklärung, wie die Registerlogik funktioniert.
Stellen wir uns vor, wir haben vier Register mit dem Namen R1..R4. Wenn Sie eine Anweisung kompilieren, die so aussieht:
x = y + z * 3;
Der Compiler würde Maschinencode ausgeben, der (im zerlegten Zustand) ungefähr so aussieht:
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
Da die meisten modernen CPUs Register mit einer Breite von 32 oder 64 Bit haben, können sie mit jedem Wert bis zu der Größe rechnen, die sie aufnehmen können. Sie benötigen keine speziellen Register für kleinere Werte. Sie verwenden lediglich spezielle ASM-Anweisungen, die festlegen, dass nur ein Teil des Registers verwendet werden soll. Und genau wie beim Tischler mit nur zwei Händen können Register nur eine kleine Datenmenge auf einmal speichern, aber sie können wiederverwendet werden, indem aktive Daten ein- und ausgelesen werden, was bedeutet, dass "viele Register" dies nicht tun am Ende gebraucht werden. (Wenn eine Menge verfügbar ist, können Compiler natürlich schnelleren Code generieren, dies ist jedoch nicht unbedingt erforderlich.)