Lenguaje de máquina, los códigos numéricos para las operaciones que un determinado ordenador puede ejecutar directamente. Los códigos son cadenas de 0s y 1s, o dígitos binarios («bits»), que con frecuencia se convierten tanto desde como a hexadecimal (base 16) para su visualización y modificación por parte de los humanos. Las instrucciones en lenguaje máquina suelen utilizar algunos bits para representar operaciones, como la suma, y otros para representar operandos, o quizás la ubicación de la siguiente instrucción. El lenguaje de máquina es difícil de leer y escribir, ya que no se parece a la notación matemática convencional o al lenguaje humano, y sus códigos varían de un ordenador a otro.
El lenguaje ensamblador está un nivel por encima del lenguaje máquina. Utiliza códigos mnemotécnicos cortos para las instrucciones y permite al programador introducir nombres para los bloques de memoria que contienen datos. Así, se puede escribir «add pay, total» en lugar de «0110101100101000» para una instrucción que sume dos números.
El lenguaje de ensamblaje está diseñado para ser fácilmente traducido al lenguaje máquina. Aunque se puede hacer referencia a los bloques de datos por su nombre en lugar de por sus direcciones de máquina, el lenguaje ensamblador no proporciona medios más sofisticados para organizar información compleja. Al igual que el lenguaje de máquina, el lenguaje ensamblador requiere un conocimiento detallado de la arquitectura interna del ordenador. Es útil cuando estos detalles son importantes, como en la programación de un ordenador para interactuar con dispositivos de entrada/salida (impresoras, escáneres, dispositivos de almacenamiento, etc.).