Dalla scrittura
all’esecuzione
di un programma Assembler
L’assemblatore
Definizione
• Un assembler (assemblatore in italiano) è un software
che trasforma le istruzioni mnemoniche dell'assembly in
linguaggio macchina.
• Si tratta dunque di un compilatore per un particolare
linguaggio assembly.
• Il termine assembler deriva dal fatto che le istruzioni
vengono convertite e montate una accanto all'altra
come se fossero in fila.
• Ci sono molti tipi di linguaggi assembly e di conseguenza
diversi assemblatori: esistono gli assembler per
programmare i microchip, per creare programmi sul
Personal Computer, per telefoni cellulari, ecc. Questo
perché un assemblatore produce codice assembly per
una specifica famiglia di processori (intel 8086, 80386,
Motorola 68000, ecc.).
Le fasi dell’assemblatore
Determinazione
degli indirizzi
dei simboli
Generazione
codice
Prima passata
• Il programma viene analizzato e il Location Counter
viene aggiornato di volta in volta in base alla
lunghezza di ogni singola istruzione (utilizzando una
tabella con i codici delle istruzioni e la loro
lunghezza).
• Viene generata la Tabella dei simboli e delle
costanti. (ad ogni simbolo o costante viene
associato il relativo indirizzo)
Seconda passata
• Utilizzando le tabelle costruite al passo precedente
viene generato il programma oggetto
Linker
Caricatore (linker)
• Il linking (letteralmente "collegamento”) è il
procedimento di integrazione dei vari moduli a cui
un programma fa riferimento (i quali possono essere
sottoprogrammi o librerie), per creare una singola
unità eseguibile.
• Il linker (o link editor) è un programma che effettua
il collegamento tra il programma oggetto, cioè la
traduzione del codice sorgente in linguaggio
macchina, e le librerie del linguaggio necessarie
per l'esecuzione del programma.
Loader
Caricatore (loader)
• Viene individuata una zona di memoria in cui
caricare il programma.
• Il programma viene caricato in questa zona di
memoria e vengono risolti gli indirizzamenti
• A questo punto il programma può essere esguito
Le fasi di esecuzione di un
programma
fetch
store
decode
execute
Le fasi in dettaglio
• Fetch
o l’Unità di Controllo pone sull’Bus degli Indirizzi il valore del Program
Counter, e legge dalla Memoria e il codice operativo dell’istruzione
• Decode
o L’Unità di Controllo , in base al codice di controllo, determina la
lunghezza dell’istruzione, legge dalla memoria gli operandi (Operand
Fetch) che si trovano agli indirizzi adiacenti a quello dell’Op.Code. e li
carica nei registri.
• Execute
o viene avviato il microprogramma relativo all’Op.Code attuale, che usa i
propri parametri correttamente memorizzati nei registri. La frequenza in
base alla quale vengono eseguiti i microprogrammi è regolata dal clock
di CPU (frequenza del Microprocessore).
• Store
o al termine della fase di Execute gli eventuali risultati, posti nei Registri,
vengono scritti sul Bus dall’UC, o verso la Memoria, o verso l’I/O.
Scarica

ppt - Alberto Ferrari