Introducción de código objeto en el diseño del compilador

Supongamos que tiene un programa ac, luego le da el programa C al compilador y el compilador producirá la salida en código ensamblador. Ahora, ese código de lenguaje ensamblador le dará al ensamblador y el ensamblador le producirá algo de código. Eso se conoce como código objeto .

compilation

Pero, cuando compila un programa, entonces no va a usar tanto el compilador como el ensamblador. Simplemente toma el programa y se lo das al compilador y el compilador te dará el código directamente ejecutable. El compilador en realidad se combina dentro del ensamblador junto con el cargador y el enlazador. Por lo tanto, todo el módulo se mantiene unido en el propio software del compilador. Entonces, cuando llama a gcc, en realidad no solo está llamando al compilador, está llamando al compilador, luego al ensamblador, luego al enlazador y al cargador.

Una vez que llame al compilador, su código de objeto se presentará en el disco duro. Este código objeto contiene varias partes:

compilation2

  • Encabezado:
    el encabezado dirá cuáles son las diversas partes presentes en este código de objeto y luego señalará esas partes. Entonces, el encabezado dirá dónde comenzará el segmento de texto y un puntero hacia él y dónde comenzará el segmento de datos y dirá dónde está la información de reubicación y la información del símbolo.

    No es más que un índice, como si tuviera un libro de texto, allí una página de índice contendrá en qué número de página se presenta cada tema. Del mismo modo, el encabezado le dirá cuáles son los palacios en los que está presente cada información. De modo que más adelante, para otro software, será útil ir directamente a ese segmento.

  • Segmento de texto:
    no es más que el conjunto de instrucciones.
  • Segmento de datos:
    el segmento de datos contendrá los datos que haya utilizado. Por ejemplo, es posible que haya utilizado alguna restricción, entonces eso estará presente en el segmento de datos.
  • Información de reubicación:
    cada vez que intenta escribir un programa, generalmente usamos símbolos para especificar cualquier cosa. Supongamos que tiene la instrucción 1, la instrucción 2, la instrucción 3, la instrucción 4,….
    compilation3

    Ahora, si dice en alguna parte Goto L4 (incluso si no escribe la declaración Goto en el lenguaje de alto nivel, la salida del compilador la escribirá), entonces ese código se convertirá en código objeto y L4 será reemplazado por Goto 4. Ahora Ir a 4 para el nivel L4 funcionará bien, siempre que el programa se cargue comenzando en la dirección 0. Pero en la mayoría de los casos, la parte inicial de la RAM se dedicará a la operación. sistema. Incluso si no está dedicado al sistema operativo, entonces podría haber algún otro proceso que ya se esté ejecutando en la dirección número 0. Entonces, cuando vaya a cargar el programa en la memoria, significa que si el programa debe cargarse en el memoria principal, podría cargarse en cualquier lugar. Digamos que 1000 es la nueva dirección de inicio, luego todas las direcciones deben cambiarse, eso se conoce comoReasignación .
    compilation4

    La dirección original se conoce como dirección reubicable y la dirección final que obtenemos después de cargar el programa en la memoria principal se conoce como dirección absoluta .

    Tabla de símbolos –

    Contiene todos los símbolos que tiene en su programa. por ejemplo, int a, b, c entonces, a, b, c son el símbolo. Mostrará cuáles son las variables que contiene su programa.

    Información de depuración –

    Ayudará a encontrar cómo una variable sigue cambiando.

    Preguntas de GATE CS Corner

    Practicar las siguientes preguntas te ayudará a poner a prueba tus conocimientos. Todas las preguntas se han hecho en GATE en años anteriores o en pruebas simuladas de GATE. Es muy recomendable que los practiques.

    1. PUERTA-CS-2001 | Pregunta 17

    Este artículo es una contribución de Samit Mandal . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.

    Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *