Tu pregunta es un poco confusa, pero quizás esto ayude a aclararla.
Hay dos áreas a considerar:
- si el núcleo de ejecución puede operar directamente en elementos en la memoria
- la velocidad de las operaciones en la memoria
Pequeños microcontroladores integrados
Estos pequeños microcontroladores no tienen RAM externa. Toda la RAM es interna, pero parte de ella se usa para cosas específicas como registros.
Por ejemplo, los PIC de Microchip que mencionas tienen un registro "W". Esto es solo en la RAM normal como en todo lo demás, pero las instrucciones con dos operandos generalmente requieren que uno de ellos esté en el registro W.
Esto simplifica enormemente el diseño del microcontrolador en el nivel de la electrónica y mantiene bajos los costos / la energía. También tiene otros beneficios, como el tiempo predecible (en ciclos) para las instrucciones.
Es por esto que verá instrucciones que cargan W con un valor, lo operan y luego lo vuelven a copiar de W a otra parte en la memoria. El compilador usa el registro porque tiene que hacerlo.
Procesadores más grandes
Otros procesadores (CPU) como x86 / 64 tienen RAM externa, lo cual es una gran diferencia. Observe que ahora un "registro" significa algo muy diferente porque tenemos diferentes tipos de memoria.
Externo a la CPU es una gran cantidad de RAM, interna a la CPU es un número de bloques de memoria más pequeños. Algunos de estos son registros de almacenamiento que contienen una cantidad de datos, generalmente igual al ancho de datos de la arquitectura. Por lo tanto, para un procesador Intel de 32 bits, los registros (como EAX, EBX, etc.) tienen un ancho de 32 bits.
Estos procesadores tienen instrucciones más complicadas que a menudo pueden operar en registros o en RAM externa. Los datos para una instrucción no siempre tienen que estar en un registro. Por lo tanto, ¿por qué nos molestaríamos? La respuesta es la velocidad. Cuando hay una opción, el compilador utilizará registros para reducir el tiempo de ejecución.
Estos complicados procesadores tienen diferentes tiempos de acceso para diferentes tipos de memoria. Los registros que están en el dado de la CPU son muy rápidos de acceder. Por lo tanto, si tiene una variable que está en uso constante en algún código, tiene sentido cargarla en un registro, operarla repetidamente y luego volver a copiarla en la RAM externa cuando termine.