He aquí por qué:
* Arquitecturas diferentes: Cada familia del procesador tiene una arquitectura única con su propio conjunto de instrucciones, modos de direccionamiento y conjunto de registro. Esto conduce a distintos idiomas de ensamblaje para cada uno.
* Conjunto de instrucciones: Las instrucciones disponibles en el ensamblaje X86 (como MoV, Add, JMP) son específicas de la arquitectura X86 y son diferentes de las instrucciones utilizadas en el ensamblaje VAX o 68x00.
* Modos de direccionamiento: Las formas en que las instrucciones acceden a la memoria y los datos (como registrar indirecto, indexado por base, etc.) son exclusivos de cada familia de procesadores.
* Registros: El número y los tipos de registros utilizados por el procesador (como registros de uso general, registros de segmentos, etc.) también difieren significativamente entre las arquitecturas.
En términos más simples: Imagine el lenguaje de ensamblaje como un lenguaje para comunicarse con un tipo específico de computadora. Al igual que se necesitan diferentes idiomas para comunicarse con personas de diferentes culturas, se necesitan diferentes idiomas de ensamblaje para comunicarse con diferentes familias de procesadores.
Ejemplo:
* x86: `MOV EAX, [EBX]` (Mueva los datos de la ubicación de memoria señalada por el registro EBX en el registro EAX)
* Vax: `Movl @r1, r0` (mueva los datos de la ubicación de memoria señalada por registro R1 en el registro R0)
* Motorola 68x00: `Move.L (A0), D0` (Mover datos de la ubicación de memoria apuntada por la dirección Registro A0 en el registro de datos D0)
Como puede ver, la sintaxis y las instrucciones utilizadas son completamente diferentes.
Conclusión: Si bien el lenguaje de ensamblaje es un lenguaje de programación de bajo nivel, se adapta a la arquitectura específica del procesador. Cada familia de procesadores tiene su propio lenguaje de ensamblaje distinto.