En resumen

Una instrucción de lenguaje de máquina es una operación que se procesa en la ejecución del programa. Las instrucciones se definen por la arquitectura del procesador.

Un mnemónico es un símbolo que representa a una instrucción de lenguaje de máquina. Los mnemónicos se definen por el lenguaje ensamblador.

Una directiva es una operación que se procesa en el ensamblado del programa, no en su ejecución. Las directivas se definen por el programa ensamblador.

En un programa escrito en lenguaje ensamblador se mezclan en realidad dos lenguajes diferentes.

Primero que nada hay que entender que la computadora no ejecuta directamente un programa en ensamblador, sino que ejecuta un programa en lenguaje de máquina. Este programa se compone de instrucciones, las cuales están definidas por la arquitectura del procesador. Las instrucciones tienen la función de modificar el estado del programa durante su ejecución. Por ejemplo, en un procesador Arm de 32 bits, la instrucción para sumar los contenidos de los registros R1 y R2, para luego colocar el resultado en el registro R4 se hace por medio de la siguiente instrucción representada en binario:

111000000100100010010000000000100

El primer lenguaje que se utiliza en un programa en lenguaje ensamblador es precisamente el lenguaje ensamblador, el cual está compuesto por mnemónicos, que son una representación simbólica de las instrucciones en lenguaje de máquina. Este lenguaje es el que se va a transformar en lenguaje de máquina. Utilizando el ejemplo anterior, se tiene el siguiente código en lenguaje ensamblador para un procesador Arm de 32 bits:

adds R4, R1, R2

El segundo lenguaje se compone de directivas. Éstas no se van transformar a lenguaje de máquina, sino que modifican el comportamiento del ensamblador mientras procesa los mnemónicos a lenguaje de máquina. Las directivas permiten extender el lenguaje ensamblador para manejar conceptos como variables, constantes, etc. A las directivas también se les conoce como seudoinstrucciones. Las directivas varían dependiendo del programa ensamblador utilizado. Las directivas utilizadas por el ensamblador Arm no son las mismas que las del ensamblador GNU. Un ejemplo de directiva para este último ensamblador sería la definición de una constante TEST con el valor 1:

.equ TEST, 1

Finalmente, los lenguajes de programación también pueden tener directivas. Un caso específico es C, que tiene directivas de preprocesador. En este caso las directivas se procesan antes del compilado o durante la compilación.