Il linguaggio macchina
Il linguaggio macchina è il codice in cui sono scritti i programmi eseguibili del computer. E' anche detto codice macchina.
Il linguaggio macchina si basa sull'alfabeto binario. E' composto da sequenze di bit ( zero e uno ) che permettono al processore (CPU) di eseguire le istruzioni e i comandi operativi del computer.
La compatibilità del linguaggio macchina
Il linguaggio macchina dipende dall'architettura hardware del computer. Varia a seconda del processore ( CPU ).
Pertanto, non esiste un unico linguaggio macchina.
Esempio. Il linguaggio macchina di un processore Intel x86 è completamente diverso dal linguaggio macchina usato nei processori Sparc o nei vecchi MC68000 ( Motorola 68000 ).
Un programma scritto in linguaggio macchina per un'architettura, non funziona in un'altra architettura.
Per funzionare il programma deve essere riscritto ex novo.
Pro e contro del codice macchina
Uno dei punto di forza del linguaggio macchina è sicuramente la velocità di esecuzione del programma.
Il processore legge ed esegue i comandi. Non deve perdere tempo a interpretarli.
D'altra parte, essendo scritto in linguaggio binario, il codice macchina è decisamente poco comprensibile per l'uomo.
Ecco un esempio pratico di codice macchina:
10011100 00101100 10010110 10101101
10110101 11010101 01001001 11011001
01100010 01001011 10010011 10010110
Per programmare in linguaggio macchina bisogna conoscere i registri del processore, il funzionamento dei comandi di basso livello, l'hardware del processore, ecc.
Soltanto i programmatori più esperti hanno le conoscenze per farlo.
In alternativa al linguaggio macchina si può utilizzare un linguaggio assembly.
Il linguaggio assembly
L'assembly è un linguaggio di programmazione di basso livello.
Ecco un esempio pratico di assembly:
MOV AL,61h
MOV CL,3h
MOV DL,7h
E' più comprensibile per un essere umano rispetto al linguaggio macchina ma abbastanza veloce da eseguire per il computer.
La differenza tra linguaggio macchina e assembly. A volte l'assembly viene confuso con il linguaggio macchina. E' sbagliato. L'assembly è un linguaggio di programmazione, composto da istruzioni mnemoniche. Il linguaggio macchina è invece composto da stringhe di bit.
E' comunque difficile da utilizzare e ancora poco intuitivo per i programmatori junior.
Per questa ragione, spesso si ricorre ai linguaggi di programmazione di alto livello per sviluppare i programmi.
Tuttavia l'assembly resta di fondamentale importanza nello sviluppo degli hack.
I linguaggi di programmazione di alto livello
I linguaggi di programmazione sono molto più intuitivi dell'assembly.
Perlomeno, sono più leggibili agli occhi di un programmatore.
Esempio. Sono linguaggi di programmazione di alto livello il linguaggio C, il Fortran, il Pascal, il linguaggio Java, e molti altri ancora.
Per gli utenti possono comunque apparire incomprensibili, perché sono diversi dal linguaggio naturale delle persone.
Ogni linguaggio di programmazione ha una propria sintassi e regole da rispettare.
Qual è il principale vantaggio dei linguaggi di alto livello?
Il codice sorgente di un programma scritto in un linguaggio di alto livello può essere compilato su più architetture.
E' sufficiente usare il compilatore dell'architettura del processore in questione per ottenere il file eseguibile in linguaggio macchina di quella architettura.
Quindi, non c'è bisogno di riscrivere il programma.
E lo svantaggio?
Un programma scritto in un linguaggio di alto livello non è direttamente eseguibile dal computer.
Per essere eseguito deve essere trasformato in linguaggio macchina.
Come trasformare un programma in codice macchina? Esistono principalmente due strade. Alcuni linguaggi usano dei software compilatori per creare un file oggetto eseguibile dal codice sorgente. Altri linguaggi di programmazione, invece, utilizzano dei software interprete che trasformano le istruzioni in codice macchina durante l'esecuzione del programma. I programmi interpretati sono decisamente più lenti e meno efficienti rispetto a quelli compilati.