Il linguaggio assembly è un linguaggio di basso livello molto vicino al linguaggio macchina (il linguaggio utilizzato dai calcolatori e composto solo dai simboli 0 e 1). Il linguaggio assembly concede al programmatore il pieno controllo dell’architettura permettendoli di sfruttare a pieno le risorse del calcolatore senza la necessità di utilizzare il linguaggio binario (o esadecimale). Il linguaggio assembly, diversamente dai linguaggi ad alto livello, non deve essere compilato ma semplicemente assemblato, questa operazione viene svolta dall’assemblatore, esso sostituisce le istruzioni assembly con del codice scritto in linguaggio macchina.

Al mondo non esiste un’unica versione di assembly, anzi ne esistono diverse, in particolare possiamo affermare che ogni architettura implementa un proprio linguaggio assembly, le cui istruzioni possono anche essere uniche. Questo fatto ci permette subito di capire il principale svantaggio dell’assembly: non permette la portabilità. Questo significa che se scriviamo un programma assembly su una architettura e poi lo trasferisco su un’altra, il programma potrebbe non funzionare, perché la seconda CPU non sarà potenzialmente in grado di riconoscere le istruzioni contenute nel programma.

Di contro l’assembly offre al programmatore il totale controllo del sistema, quindi un programma assembly (se scritto correttamente) sarà un programma molto performante.