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.