Primero, los registros no son memoria. Son su propia cosa. Vamos a comparar un disco y los registros a la memoria.
Cuando las cosas se almacenan en el disco, en realidad no se puede hacer mucho con ellas (normalmente se cargarían en la memoria primero). Comparado con la memoria, el disco es terriblemente lento. Sin embargo, generalmente hay un poco más de espacio de almacenamiento en el disco del que está disponible en la memoria, y las cosas que almacena permanecen allí hasta que se borran.
Los registros están en la otra dirección. Son más rápidos que la memoria, pero normalmente hay mucho menos espacio. De hecho, no lo pensamos en términos de espacio, sino en términos de número de registros, donde algunos registros contienen valores de coma flotante y otros contienen valores o direcciones de tipo entero. La mayoría de las cosas que usted piensa que suceden en la memoria realmente no lo hacen, ocurren en el nivel de registro.
Digamos que tiene variables primero y segundo, y desea agregarlas, almacenando el nuevo valor en suma.
- ¿Cómo es exactamente la fuerza nuclear fuerte mediada por piones que surgen virtualmente?
- ¿Qué tan cerca puedo llegar a entender el universo cuando no puedo superar el cálculo multivariable?
- ¿Qué hace una buena teoría?
- ¿La ciencia contradice alguna de las religiones?
- ¿Cuánto tiempo tomaría obtener una sonda espacial en posición para tomar una foto de toda nuestra galaxia?
sum = first + second;
Puede pensar en esto como tomar el valor que está donde “primero” apunta a la memoria y agregar lo que “segundo” apunta a la memoria. Y, conceptualmente, eso es normalmente lo suficientemente cerca. Pero probablemente lo que realmente está sucediendo es que estamos cargando el valor de una de esas ubicaciones de memoria en un registro, agregando lo que hay en la otra ubicación a ese valor, y luego almacenando el valor del registro en la ubicación del resultado.
Si está utilizando gcc, puede usar -S para compilar sin ensamblar (terminará con un archivo .s, que tiene el código del ensamblador para el archivo c que estaba compilando).