Skip to content
pol edited this page Apr 3, 2021 · 2 revisions

Arquitectura de computadors

Compiladors

  1. Para obtener el código ensamblador a partir de ficheros fuente:

    gcc -S miprograma_parte1.c miprogram_parte2.c
  2. Para obtener el código objeto a partir del código ensamblador de los anteriores programas miprograma_parte1.s y miporgrama_parte2.s:

    gcc -c miprogram_parte1.s miprograma_parte2.s
    • O equivalentemente:
    as miprograma_parte1.s miprograma_parte2.s
  3. Finalmente hay que linkar el código de ambos programas y generar uno solo:

    gcc -o miprograma.x miprograma_parte1.o miprograma_parte2.o
    • Alternativamente:
    ld -o miprograma.x miprograma_parte1.o miprograma_parte2.o

Para ejecutar los tres pasos directamente:

gcc -o miprograma miprograma_parte1.c miprograma_parte2.c

Para activar las optimizaciones en el compilador añadimos -O0 -O1 -O2 -O3

  1. No optimizar

  2. Optimizaciones básicas (equivale a -O)

  3. Optimizaciones avanzadas (requieren más tiempo)

  4. Optimizaciones arriesgadas (pueden relentizar el programa)

Recuento de instrucciones

  • Cálculo directo: contar instrucciones, bucles...

  • Contadores Hardware: contadores internos, velocidad original, no todos los procesadores tienen, necesario recompilar kernel para acceder a ellos y no permite alterar el código original.

  • Instrumentar el código: Añadir instrucciones al código del programa para contar instrucciones (o lo que haga falta).

  • Simular el procesador: Complejo, lento, lee el código compilado y "ejecuta" el programa, permite saber si cambios en el procesador mejoran o empeoran la ejecución de un programa (multiplicador más lento pero que permite mas multiplicaciones en paralelo, mejora el tiempo de ejecución del programa?).

    Pide información al SO (y procesador) e instrumenta el código

    valgrind --tool=lackey ./miejecutable

Convert machine code (in binary) to assembly

objdump -d objecte.o

Here you'll find all things i've learnt from linux thus far, enjoy!

Clone this wiki locally