Red de conocimiento informático - Espacio del host - ¿Qué sucede cuando ejecutas el programa?

¿Qué sucede cuando ejecutas el programa?

Cuando escribes un programa helloworld y estás entusiasmado con él, lo compilas con gcc en un ejecutable de código de máquina y luego escribes ./hello y ves la línea "Hola, mundo". Esto se ve genial y quizás te preguntes qué está pasando aquí.

- Lenguaje de alto nivel->Ensamblador->Código máquina

Cuando escribimos un programa en un lenguaje de alto nivel (como el lenguaje C) y lo compilamos usando gcc - o comando hello helloworld.c Cuando es un archivo ejecutable, ocurrirán la siguiente serie de situaciones.

1. Preprocesamiento. El preprocesador procesa las directivas del preprocesador que comienzan con # en el archivo fuente, obtiene el contenido requerido de los archivos del sistema apropiados y modifica el archivo fuente. Este paso se puede realizar usando gcc-E helloworld.c-o hello.i y generar un archivo .i.

2. Recopilación. En pocas palabras, el compilador traduce el archivo obtenido en el primer paso a un archivo ensamblador que termina en .s o .asm.

3. Montaje. El ensamblador traduce el archivo de ensamblaje en un archivo de instrucciones de máquina y lo empaqueta en un programa de objeto reubicable (Programa de objeto reubicable), un archivo que termina en .s (o .asm).

4. Vinculación. Fusione el archivo .o y sus archivos objeto en la biblioteca utilizada para crear el ejecutable hello.

- La CPU procesa instrucciones de código de máquina

Después de obtener exitosamente el archivo ejecutable, escriba la línea de comando.

- La CPU procesa instrucciones de código de máquina

Después de recuperar con éxito el archivo ejecutable, escriba la línea de comando.

El contador del programa registra la dirección de la instrucción actual (un fragmento de código de máquina) y, después de recuperar una instrucción, cambia su valor. al siguiente salto Transfiera la dirección de la instrucción a ejecutar y obtenga cada instrucción por turno. Cada instrucción recuperada se coloca en el registro de instrucciones.

¡Echemos un vistazo más de cerca!

Al buscar y decodificar instrucciones, la CPU aprende el contenido del código de máquina que se va a ejecutar. A continuación, se utiliza la Unidad Aritmético Lógica (ALU) para realizar las operaciones en la instrucción. A continuación, la CPU lee/escribe la memoria a través de la memoria y escribe registros mediante escritura recíproca. Luego, la PC se actualizará y estará lista para leer la siguiente instrucción.

-Abstracción de direcciones

Al transferir datos entre la CPU y la memoria principal, los datos interactúan a través de dos líneas: la línea de dirección (bus de direcciones), la línea de datos (bus de datos) y Líneas de control (bus de control). Las líneas de datos son fáciles de entender. Transfiere los datos en la dirección/registro correspondiente entre sí, pero si miramos la línea de dirección, encontraremos que aquí se usa una capa de abstracción La dirección en la línea de dirección convierte la información de la dirección en el almacenamiento específico. Se puede acceder a través de la unidad decodificadora, por lo que parece que cada unidad de almacenamiento tiene su propia dirección.

Si la longitud de nuestra dirección es A0, A1, entonces las direcciones 00, 01, 10 y 11 representan D0, D1, D2 y D3 respectivamente, por lo que parece que cada unidad de almacenamiento tiene su propia dirección.