Incomincerò con un bel "C'era una volta...un computer il cui
tempo era molto più importante del tempo di un programmatore...ed allora
-ma non c'erano ancora molte scelte!- si preferiva scrivere nel
linguaggio che fosse il più possibile vicino a lui che non all'uomo...".
Così il computer era contento, capiva, ed eseguiva alla massima
velocità, diciamo anche qualche centinaio di volte più in fretta che con
qualsiasi altro linguaggio di livello superiore al livello macchina,
mentre il povero programmatore scriveva milioni di righe di codice in
ostrogoto, consolandosi solamente pensando che prima ancora, i veri
pionieri, non usavano neppure codici operativi scritti in lettere e
cifre, ma buttavano direttamente nel computer tutti gli "zeri" e "uni"
che servivano!
Questo il motivo per cui all'inizio e fino agli anni '60, in molte
circostanze si programmava con linguaggi di macchina. E siccome le
macchine avevano grosso modo un paio di registri in cui far ballare i
dati, le istruzioni servivano appunto a prendere il dato da un registro
e spostarlo nel secondo, da qui tornare al primo e via dicendo. Questo
poteva servire a fare una semplice somma o altre cose anche più
sofisticate.
Nei linguaggi assembler il rapporto tra istruzione sorgente (quella
scritta dal programmatore) e istruzione in linguaggio eseguibile di
macchina, era di 1 : 1.
Se pensiamo che per fare una semplice operazione un computer deve
eseguire una lunga fila di istruzioni...avete capito bene perchè era
pesante programmare a quel modo e quanto fosse faticoso, stressante e
pieno di possibilità di sbagliare.
I linguaggi Assembly sono dunque linguaggi di basso livello destinati
ognuno solamente ad uno specifico processore.
Sono raramente usati al giorno d'oggi, salvo per gestire compiti di
macchina veramente di basso livello, visto che altri linguaggi, come il
"C" ad esempio, possono soddisfare la maggior parte delle esigenze,
anche sul basso-livello.
Un altro uso di linguaggi low-level è quello occorrente per fare
dialogare tra loro linguaggi diversi all'interno di uno stesso
programma.
E' comunque utile apprendere uno di questi linguaggi per capire meglio
come avvengono i comandi rivolti al processore e come si presenta la
generazione del codice di un compilatore.