|
Forse è
un errore cominciare a parlare di questo argomento proprio
nella prima lezione, inquanto è di un livello abbastanza
alto. Ma io sono convinto che una infarinatura di
Assembler sia assolutamente necessaria. L'Assembler è uno
dei linguaggi di programmazione più usati da Hacker. Non
spaventatevi se non capite tutto, non è colpa vostra, ma
della difficoltà dell'argomento oppure del mio modo
freddo di spiegare.
Un
linguaggio assemblatatore puro è un linguaggio in cui
ogni istruzione produce esattamente un'istruzione
macchina. C'è quindi una corrispondenza uno ad uno fra
istruzioni macchina e istruzioni del linguaggio
assemblatore.
Si, lo so, non è semplice capire, ma cercherò di essere
il più chiaro possibile.
Dovete sapere, che la macchina è composta da tanti
microcircuiti, i quali grazie ad impulsi elettrici,
riescono a svolgere operazioni. (Ok, fin qui ci siamo,
dovete sapere che non è facile spiegare!!)
Insomma,
ci sono diverse istruzioni stampate su circuiti,
istruzioni che aspettano solo di essere eseguite, sono le
istruzioni a livello macchina. Quando noi scriviamo
un'istruzione in un linguaggio ad alto livello, (ad
esempio il C o il PASCAL!) noi attiviamo tanti circuiti,
in modo tale da far avvenire tante istruzioni a livello
macchina. Quindi ad un'istruzione di un linguaggio di alto
livello, corrispondono tante istruzioni di linguaggio
macchina. Invece, quando noi scriviamo un'istruzione con
un linguaggio Assembler, noi scriviamo e quindi azioniamo
una ed una sola istruzione a linguaggio macchina. Ecco
perché si dice che il linguaggio Assembler è il
linguaggio macchina. Beh, credo che di essere stato
alquanto chiaro!
Qualcuno potrebbe dirmi: "Ma allora perché non
scriviamo i nostri programmi in Esadecimale (Non vi
spaventate, poi vi parlerò di numeri esadecimali, binari,
ottali….(Forse J) che è il vero linguaggio
macchina?".
Il vero motivo è davvero molto semplice, infatti,
programmare in linguaggio esadecimale, sarebbe troppo
difficile!!! Pensate a programmare con istruzioni tipo:
35AE712, EAC452….
Sarebbe
davvero molto difficile ricordare le istruzioni, invece
tramite un traduttore, si associa ad ogni codice
esadecimale un nome simbolico. Infatti è facilissimo
ricordare i nomi delle quattro operazioni fondamentali:
addizione, sottrazione, moltiplicazione e divisione
associati a: ADD, SUB, MUL e DIV. Ma provate a ricordare i
codici esadecimali di queste istruzioni, diventereste
pazzi!!!
Cosa
sono quindi i traduttori?
I
traduttori sono programmi che convertono il linguaggio
scritto da un utente in un altro linguaggio. Nel caso
dell'Assembler, in linguaggio esadecimale. Il linguaggio
in cui è scritto il programma originale, si chiama
linguaggio sorgente e il linguaggio in cui è convertito
si chiama linguaggio oggetto.
Il linguaggio assemblatore, ha una caratteristica molto
importante che lo contraddistingue da un linguaggio ad
alto livello e cioè che ha accesso a tutte le istruzioni
e le funzioni presenti sulla macchina. (Proprio per
questo, la maggior parte dei virus sono fatti in
Assembler!)
Insomma, tutto quello che si può fare in linguaggio
macchina, lo si può fare in linguaggio assemblatore, ma
molte istruzioni, registri e caratteristiche di ogni tipo,
non sono disponibili ai programmatori di linguaggi di alto
livello.
È importante anche ricordare che i programmi scritti in
linguaggio assemblatore, funzionano solo su una famiglia
di macchine, mentre i linguaggi d'alto livello, funzionano
ovunque. Questo proprio perché andiamo a programmare in
un linguaggio che rispecchia l'architettura della macchina
e le architetture sono diverse a seconda del produttore
dell'hardware.
Infine, bisogna dire che programmare in linguaggio
assemblatore è molto più difficile (Ma davvero tanto!!)
di programmare in un linguaggio d'alto livello.
|