El proceso del código al archivo ejecutable

El proceso general se puede dividir en los siguientes 4 pasos:

Preprocesamiento-> Compilación-> Ensamblaje-> Enlace

1. Pretratamiento

Maneje las instrucciones precompiladas que comienzan con "#" en el archivo de código fuente.

1) Ampliar la definición de macro

2) Manejar todas las instrucciones de compilación condicional

3) Maneje #incluya instrucciones precompiladas e inserte recursivamente los archivos incluidos en él

4) Eliminar el comentario

5) Agregue el número de línea y la identificación del nombre del archivo, de modo que el número de línea se pueda mostrar cuando el compilador genere errores y advertencias

6) Conservar la directiva del compilador #pragma

Eventualmente genere un archivo .i (lenguaje c) o un archivo .ii (lenguaje C ++).

Segundo, compilar

1) Escanee, ingrese el código fuente al escáner.

1) Análisis léxico, la secuencia de caracteres del código fuente se divide en tokens: palabras clave, identificadores, literales, símbolos especiales, como "(" es un token, la variable i es un token. Herramienta de escaneo léxico: lex

2) Análisis de sintaxis, genere un árbol de sintaxis cuyos nodos sean expresiones y, al mismo tiempo, verifique si la expresión es legal, como paréntesis no coincidentes y operadores faltantes se pueden verificar en este paso. Herramienta de análisis gramatical: yacc

3) Análisis semántico, verifique si la expresión es significativa, como la coincidencia de tipos, la división por 0. Marque todos los nodos en el árbol de sintaxis con tipos.

4) La optimización del código fuente, como 2 * 5, se puede determinar durante este período, reemplazando directamente la expresión con 10. En este paso, el árbol de sintaxis generará código intermedio (excluyendo el tamaño de los datos, la dirección de la variable, el nombre del registro).

5) Generación de código de destino, generando código de máquina de destino a partir de código intermedio. El código intermedio no tiene nada que ver con la máquina, el código de la máquina de destino está relacionado con la máquina y se marcará la longitud de la palabra y el nombre del registro.

6) Optimización del código de objeto, reemplazando la multiplicación con desplazamiento, eliminando instrucciones redundantes, etc.

El archivo de código de ensamblaje finalmente se generará.

3. Asamblea

Convierta los códigos de tipo de cambio en instrucciones que la máquina puede ejecutar. Simplemente se traduce uno por uno de acuerdo con la tabla de comparación de instrucciones de ensamblaje e instrucciones de la máquina, sin optimización de instrucciones.

Herramienta ensambladora: como

Cuarto, el enlace

El enlace es principalmente para tratar con las partes de cada módulo que se refieren entre sí, para que puedan conectarse correctamente. Por ejemplo, el módulo A hace referencia a una función del módulo B y una variable global del módulo C.

1) Dirección y asignación de espacio

2) Resolución de símbolo (también llamada enlace de dirección)

3) Reubicación. Algunas variables o funciones globales se definen en otras bibliotecas y se reubican para encontrar sus direcciones.

181 artículos originales publicados · Me gusta 13 · Visitantes más de 10,000

Supongo que te gusta

Origin blog.csdn.net/qq_43461641/article/details/105074671
Recomendado
Clasificación