Вони не зовсім однакові. Регістри - це місця, де знаходяться значення, над якими насправді працює ЦП. Дизайн процесора такий, що він може фактично змінювати або іншим чином діяти на значення, коли воно знаходиться в реєстрі. Отже, регістри можуть працювати логічно, тоді як пам'ять (включаючи кеш) може утримувати лише значення, з яких читає та записує процесор.
Уявіть столяра на роботі. У нього є кілька предметів у руках (реєстри), а потім, дуже близько від його робочого столу (кеша), над якими часто працює, але не використовує цей момент, а потім у майстерні (основна пам'ять) речі, які стосуються проект під рукою, але це не одразу досить важливо, щоб бути на верстаті.
EDIT: Ось просте пояснення того, як працює логіка реєстрації.
Уявімо, у нас є чотири регістри з назвою R1..R4. Якщо ви складаєте заяву, яка виглядає приблизно так:
x = y + z * 3;
компілятор виводить машинний код, який (коли він розбирається) виглядає приблизно так:
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
Оскільки більшість сучасних процесорів мають регістри, що мають ширину або 32, або 64 біти, вони можуть робити математику на будь-якому значенні до розміру, який вони можуть містити. Їм не потрібні спеціальні регістри для менших значень; вони просто використовують спеціальні інструкції ASM, які дозволяють використовувати лише частину реєстру. І, як тесляр лише двома руками, регістри можуть зберігати лише невеликий обсяг даних одночасно, але вони можуть бути використані повторно, передаючи активні дані в них і поза ними, а це означає, що "багато регістрів" не мають врешті-решт потрібні. (Наявність великої кількості доступних дій дозволяє компіляторам генерувати швидший код, звичайно, але це не обов'язково.)