Un po' di chiarezza sull'Assembly:
Il microprocessore (uP) interpreta solo dati binari, uni e zeri raggruppati in byte o suoi multipli. Alcuni di questi valori rappresentano istruzioni del uP (es caricamento di una valore da/verso un registro o memoria, confronto tra valori, salti verso altri indirizzi di memoria etc) altri i dati delle istruzioni. Nell'insieme tali valori rappresentano il LINGUAGGIO MACCHINA (LM) del uP. L'essere umano difficilmente riesce ad interpretare dati puramente numerici.
L'Assembly è quanto di più vicino esiste al LM ma tale da essere compreso più facilmente dalle persone. In sostanza i valori che costituiscono le istruzioni sono sostituite con dei codici mnemonici, cioè nomi brevi che le descrivono. Per esempio JMP (JuMP) permette un salto incondizionato verso un certo indirizzo, MOVE permette il trasferimento di dati da/verso registri e memoria, CMP (CoMPare) esegue confronti tra valori etc...
L'assembly descrive esattamente il codice macchina ma semplicemente in una forma più umana. Si puo' dire che l'assembly è un modo di rappresentare il LM.
Detto questo è possibile attraverso programmi Disassemblatori vedere il codice macchina interpretato in assembly di un qualsiasi programma.
In linea teorica è quindi possibile la ricostruzione del suo funzionamento.
Questo però è decisamente scomodo, lungo, impegnativo e spesso inutile per l'argomento che stiamo trattando... l'assembly non è certo un linguaggio ad alto livello!!!! Per eseguire una normale istruzione ad alto livello sono spesso necessarie decine e decine di istruzioni assembly...
Tutti i linguaggi ad alto livello che sono compilati (C, C++, Pascal per esempio) vengono tradotti dal compilatore in LM per formare l'eseguibile. Ricorda che il linguaggio macchina è l'unico comprensibile al uP!!!!!