Registros vs. Memoria
Parte de la sección Fundamentos del Journey de Assembly de Coddy. Lección 3 de 45.
Ahora has aprendido sobre dos lugares donde los datos pueden almacenarse dentro de una computadora:
- Registros: pequeñas cajas de almacenamiento dentro de la CPU
- Memoria (RAM): una enorme cuadrícula de espacios numerados fuera de la CPU
Pero ¿por qué hay dos lugares? ¿Por qué la CPU no mantiene todo en la memoria?
La respuesta es la velocidad. Los registros son extremadamente rápidos porque están dentro de la CPU. La memoria es más lenta porque está fuera. La CPU puede acceder a un registro en un solo ciclo, pero acceder a la memoria lleva mucho más tiempo.
Comparación lado a lado:
| Característica | Registros | Memoria (RAM) |
|---|---|---|
| Ubicación | Dentro de la CPU | Fuera de la CPU |
| Velocidad | Extremadamente rápida (1 ciclo) | Más lenta (muchos ciclos) |
| Número de espacios de almacenamiento | Muy pocos (16-32 en x86-64) | Millones o miles de millones |
| Tamaño de cada espacio | 8 bytes (64 bits) | 1 byte |
| Cómo acceder a ellos | Por nombre (rax, rbx, rcx...) | Por dirección (1000, msg, buffer) |
| ¿Volátiles? | Sí (desaparecen cuando se apaga la alimentación) | Sí (desaparece cuando se apaga la alimentación) |
La regla más importante en ensamblador:
Una instrucción puede usar como máximo un operando de memoria. Para combinar dos valores que están ambos en memoria, primero carga uno de ellos en un registro.
Los registros también son donde guardas los valores con los que trabajas, porque cada acceso a la memoria es lento.
El patrón de tres pasos que usarás constantemente:
| Paso | Qué sucede | Ejemplo |
|---|---|---|
| 1. LOAD | Copia datos de la memoria a un registro | mov rax, [count] |
| 2. WORK | Haz algo con el registro | add rax, 5 |
| 3. STORE | Copia el resultado de vuelta a la memoria (si es necesario) | mov [result], rax |
¿Qué ocurre si olvidas esta regla?
Si intentas sumar dos números que están ambos en la memoria, el ensamblador te dará un error. La CPU no puede hacerlo. Primero debes cargar uno de ellos en un registro.
Pruébalo tú mismo
Esta lección no incluye un desafío de código.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Fundamentos
1La máquina
¿Qué es la CPU?MemoriaRegistros vs. MemoriaCómo funcionan las instruccionesPatrón de dos archivosLa arquitectura x86-64Practica por tu cuenta: Playground de Assembly