El término ensamblador (del inglés assembler) se refiere a un tipo de programa informático que se encarga de traducir un fichero fuente escrito en un lenguaje ensamblador, a un fichero objeto que contiene código máquina, ejecutable directamente por la máquina para la que se ha generado. El propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas, ya que escribir directamente en código binario, que es el único código entendible por la computadora, es en la práctica imposible. La evolución de los lenguajes de programación a partir del lenguaje ensamblador originó también la evolución de este programa ensamblador hacia lo que se conoce como programa compilador.
Funcionamiento
  El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los códigos mnemotécnicos que aparecen por su código de operación correspondiente en sistema binario.
Tipos de ensambladores
  Podemos distinguir entre tres tipos de ensambladores:
- Ensambladores      básicos. Son de muy bajo nivel, y      su tarea consiste básicamente en ofrecer nombres simbólicos a las      distintas instrucciones, parámetros y cosas tales      como los modos de direccionamiento. Además, reconoce una serie de directivas (o meta instrucciones) que indican      ciertos parámetros de funcionamiento del ensamblador.
 
- Ensambladores      modulares, o macro ensambladores. Descendientes de      los ensambladores básicos, fueron muy populares en las décadas de los 50      y los 60,      antes de la generalización de los lenguajes de alto nivel. Hacen todo      lo que puede hacer un ensamblador, y además proporcionan una serie de      directivas para definir e invocar macroinstrucciones (o simplemente, macros). 
 - Ensambladores      modulares 32-bits o de alto nivel. Son ensambladores      que aparecieron como respuesta a una nueva arquitectura de procesadores de      32 bits, muchos de ellos teniendo compatibilidad hacia atrás      pudiendo trabajar con programas con estructuras de 16 bits. Además de      realizar la misma tarea que los anteriores, permitiendo también el uso de      macros, permiten utilizar estructuras de programación más complejas      propias de los lenguajes de alto nivel.