* compiladores: Estos traducen el código fuente de alto nivel (escrito en idiomas como C, C ++, Java, Python, etc.) en el lenguaje de ensamblaje o directamente en el código de la máquina (código de objeto). El proceso generalmente involucra varias etapas, incluyendo análisis léxico, análisis, análisis semántico, optimización y generación de códigos. El código de objeto resultante es específico de la arquitectura de destino (por ejemplo, x86-64, brazo).
* ensambladores: Estos traducen el lenguaje de ensamblaje (una representación de bajo nivel y legible por humanos del código de la máquina) en el código de objeto. El lenguaje de ensamblaje utiliza mnemónicos para representar las instrucciones de la máquina, lo que facilita trabajar para los programadores que el código de máquina sin procesar.
Si bien los compiladores a menudo generan lenguaje de ensamblaje como un paso intermedio, finalmente producen código de objeto. Los ensambladores trabajan directamente con el lenguaje de ensamblaje para producir el código de objeto. Por lo tanto, ambos son cruciales en el proceso de transformación del código fuente en programas ejecutables. Luego, un enlazador combina estos archivos de objetos (y a menudo bibliotecas precompiladas) para crear el archivo ejecutable final.