L'uso più ampio è come una fase intermedia durante il processo di compilazione, spesso nascosto dalla riga di comando del compilatore esterno o dal codice GUI. Il compilatore produce il codice di assemblaggio, quindi viene chiamato un assemblatore per trasformarlo in un qualche tipo di oggetto binario (oggetto o eseguibile). Non è raro che la riga di comando del compilatore o la shell gui chiamino il linker in modo che l'utente veda solo il codice sorgente e un file eseguibile.
Non tutti i compilatori lo fanno, per esempio tcc ha il codice "macchina" codificato nel compilatore.
Avere un passo intermedio del linguaggio degli assiemi ascii separa lo sviluppo del compilatore dallo sviluppo dell'assemblatore. I produttori di compilatori possono vedere direttamente l'output del loro lavoro, non devono essere disassemblati (cosa che su alcune piattaforme è problematica) per capire cosa ha prodotto il loro compilatore. il programma / strumento assemblatore deve essere lì comunque, quindi potrebbe anche sfruttarlo invece di re-inventarlo nel compilatore.
I bootloader e il codice di avvio e arresto che conduce e segue il codice compilato spesso devono essere scritti in linguaggio assembly perché l'assembly scritto a mano non deve conformarsi agli standard di chiamata, dove l'assembly generato dal compilatore spesso si conforma a uno standard chiamante. Qualcuno deve impostare lo stack e la memoria zero .bss e quei tipi di attività prima che il codice compilato possa operare usando la sua convenzione di chiamata.
A volte l'assembly viene usato per ottimizzare a mano qualcosa che il compilatore e / o il linguaggio non erano in grado di produrre codice abbastanza veloce per risolvere il problema.
Microcontrollori, sia perché alcuni usano cpus che non hanno abbastanza mercato per produrre un grande compilatore, sia perché sono molto limitati al punto da dover raddoppiare o triplicare la velocità di clock o la quantità di ram / rom per utilizzare il codice compilato non vale la pena. Troverete una percentuale maggiore di questo mercato utilizza asm rispetto alle normali applicazioni e sistemi operativi.
Speriamo che l'apprendimento a fini educativi sia un motivo per usare asm. Una volta che ne impari anche uno, specialmente se impari qualche set di istruzioni diverso, entrambi apprezzerai ciò che il compilatore e il linguaggio stanno facendo, e spesso come risultato di questa educazione scrivi meglio (prestazioni e affidabilità) codice linguistico di alto livello .