Sei sulla pagina 1di 25

Calcolatori Elettronici

Parte VIII: linguaggi assemblativi


Prof. Riccardo Torlone
Universita di Roma Tre
Anno Accademico 2011/2012
Linguaggi di Programmazione
Linguaggi ad alto livello
Maggiore espressivit
Maggiore produttivit
Migliore leggibilit
Facilit di documentazione
Minore controllo dellefficienza
Linguaggi a basso livello
Minore espressivit
Minore produttivit
Peggiore leggibilit
Difficolt di documentazione
Pieno controllo dellefficienza
Costi di Sviluppo ed Efficienza del Software
Approccio Misto: isolare le parti critiche del programma e
codificare solo quelle in linguaggio assemblativo
Il 10% del codice responsabile del 90% del tempo di
esecuzione
I tempi di esecuzione vengono abbattuti nella fase di
tuning, che riguarda ora solo una piccola parte del codice
Vantaggi del linguaggio assemblativo
Pu servire per ottimizzare una applicazione (ma solo
seguendo lapproccio misto)
E a volte necessario se le risorse sono limitate
(microcontrollori - applicazioni embedded)
E utile alla comprensione dei compilatori
E molto utile alla comprensione dellarchitettura di un
calcolatore
Traduzione
Condotta una tantum in modo statico in un tempo precedente
allesecuzione
Il Programma sorgente scritto in un linguaggio simbolico,
orientato allutente
Il Programma Oggetto:
Esegue le operazioni specificate dal programma sorgente
scritto in linguaggio macchina e quindi direttamente
eseguibile
Il programma sorgente costituisce i dati del programma
traduttore, il programma oggetto ne il risultato
dellesecuzione
PROGRAMMA
SORGENTE
TRADUTTORE
Compilatore
Assemblatore
PROGRAMMA
OGGETTO
Interpretazione
Linterpretazione viene effettuata ogni volta che il programma
viene eseguito
Non viene generato nessun programma oggetto
Linterprete esegue direttamente le istruzioni del programma
sorgente
Soluzione pi semplice da realizzare potenzialmente inefficiente
Esempi: BASIC, PROLOG, SQL,...
PROGRAMMA SORGENTE
INTERPRETE
SISTEMA DI ELABORAZIONE
(Livello del Sistema Operativo)
Linguaggi Assemblativi (es. Pentium)
Corrispondenza uno ad uno con le istruzioni macchina
Codici simbolici ed etichette associate ad indirizzi
Pseudoistruzioni dichiarative per la definizione di etichette
e per lallocazione di spazio di memoria
Il traduttore detto assemblatore e la traduzione
assemblaggio
Lo stesso programma (N=I+J ) in altri assembler
Pseudoistruzioni
Utilizzate nella parte dichiarativa di un programma in assembler
Dichiarano etichette, costrutti, o esprimono direttive di assemblaggio
Ad esse non corrispondono istruzioni nel programma oggetto
Macro Definizioni
Associano un nome ad un segmento di codice (macro
definizione)
Il nome cos definito pu essere usato (pi volte) nel corso del
programma
Servono a rendere il programma pi compatto (e pi leggibile)
La sostituzione della macro avviene staticamente in fase di
assemblaggio
Macro con Parametri
possibile definire ed utilizzare anche macro con parametri
La sostituzione dei parametri formali con gli argomenti attuali
viene effettuata staticamente in fase di assemblaggio
A valle dellassemblaggio, a sostituzione avvenuta, nel
programma oggetto non resta nessuna traccia delle macro, con
o senza parametri
Differenze tra Macro e Procedure
Il Processo di Assemblaggio
Lassemblatore traduce da linguaggio assemblativo a linguaggio
macchina
Processo molto semplice salvo per le istruzioni con riferimenti
(salti) a etichette non ancora dichiarate (riferimenti in avanti)
Assemblatori ad una passata
Traducono in un formato intermedio compatto
Mettono la forma intermedia in una tabella
Alla fine traduce il contenuto della tabella
Assemblatori a due passate
Prima passata:
Calcola la lunghezza e la posizione delle istruzioni
Genera una tavola dei simboli
Seconda passata:
Tutti i riferimenti sono noti nella tavola dei simboli
Genera il codice usando i valori della tavola
La Prima Passata
Valuta la lunghezza di ciascuna istruzione
Calcola il valore dellILC (Instruction Location Counter)
Inserisce tutte le etichette nella Tavola dei Simboli, con i
corrispondenti valori di ILC
Alla fine della passata i riferimenti in avanti sono noti
Tabella dei codici operativi
Viene mostrata una porzione
Un elemento per ciascun codice simbolico del linguaggio
La classe individua le combinazioni che seguono le stesse
regole
La Seconda Passata
Sfrutta il prodotto della prima passata
La Tavola dei Simboli fornisce lindirizzo di tutte le
etichette
Genera il codice, istruzione per istruzione, utilizzando la
tavola dei codici operativi che fornisce:
La lunghezza delle istruzioni
I codici operativi
La classe delle istruzioni (che dipende dal tipo di
operandi e dalle modalit di indirizzamento)
Possibili organizzazioni delle tabelle dei simboli
Collegamento e Caricamento
Procedure assemblate o compilate separatamente
Il Collegatore (Linker) produce un unico modulo assoluto
pronto ad essere caricato
Il Caricatore (Loader) definisce gli indirizzi finali e carica il
modulo assoluto in memoria centrale
Collegamento (Linking)
Ciascun modulo ha il suo spazio degli indirizzi
Quando i moduli vengono collegati occorre:
traslare i loro spazi degli indirizzi
risolvere tutti i riferimenti esterni (le chiamate tra moduli)
Aggiornamento degli Indirizzi
Struttura del Modulo Oggetto
Identification: nome, data, lunghezza delle varie parti
Entry point table: simboli definiti nel modulo e riferibili
dallesterno
External reference table: simboli definiti in altri moduli e
riferiti dal modulo
Relocation dictionary: indirizzi che devono essere rilocati
Collegamento statico e rilocazione dinamica
Diversi approcci possibili
Uso di un registro di rilocazione
Uso della tavola delle pagine
Collegamento Dinamico
spesso troppo costoso collegare staticamente tutte le
procedure
Alcune sono chiamate solo in circostanze inusuali (gestione di
eccezioni)
Il collegamento pu essere effettuato a tempo di chiamata (e
solo se necessario)
In Multics ogni procedura ha a disposizione un Linkage Segment
La prima invocazione di una procedura provoca una trap
Collegamento Dinamico (2)
La trap attiva il Dynamic Linker che alloca in memoria
virtuale la procedura chiamata e scrive lindirizzo nel
linkage segment
Alla ripresa la chiamata viene eseguita regolarmente
Tutte le successive chiamate si svolgono normalmente
DLL (Dynamic Link Library)
Soluzione adottata in ambiente Windows
Una DLL pu contenere sia procedure che dati (es. librerie grafiche)
Pi programmi condividono una DLL
Risparmio di memoria centrale e di massa
Semplicit di aggiornamento delle librerie
Implicit linking: il programma collegato alla DLL tramite una tabella
(import library), le DLL necessarie sono caricate in memoria
Explicit linking: la DLL viene richiesta e caricata dinamicamente allatto
della chiamata