Esercizi su Assemblatori, Linker e Loader
Esercizio 1
(Anni Precedenti)
Si mostri la tabella dei simboli dopo l'analisi delle seguenti istruzioni dell'8088.
Si assuma che alla prima istruzione e' assegnato l'indirizzo 1000.
Everest: POP BX (1 byte)
K2: PUSH BP (1 byte)
Whitney: MOV BP,SP (2 byte)
McKinley: PUSH X (3 byte)
FUJI: PUSH SI (1 byte)
Kibo: SUB SI, 300 (3 byte)
Soluzione.
Esercizio 2
Si considerino le seguenti affermazioni relative al primo passo di un assemblatore
a due passi. Per ognuna di esse si dica se e' vera, falsa, o di discutano i contesti
in cui puo' essere vera o falsa.
- Quando si incontra una linea di commento, si incrementa il Location Counter
e si passa alla linea successiva.
- Quando si incontra un'istruzioni senza etichetta, si incrementa il Location Counter,
si traduce l'istruzione e si passa alla linea successiva.
- Quando si incontra un'istruzione con etichetta, si incrementa il Location Counter,
si memorizza l'etichetta con le relative informazioni nella symbol table e si passa alla
linea successiva.
- Quando si trova un codice operativo illegale, si segnala l'errore e si procede nell'analisi.
Soluzione.
Esercizio 3
Per quale motivo la traduzione in linguaggio macchina di una serie di procedure sorgente
scritte in assembler non e' eseguita direttamente, ma ciascuna procedura e' tradotta
singolarmente in un formato intermedio e i diversi moduli vengono in una seconda fase
collegati dal meccanismo di linking?
Soluzione.
Esercizio 4
Dire cosa deve fare un assemblatore a due passi quando durante il primo passo:
- incontra un'istruzione senza etichetta in cui sono presenti dei simboli.
- incontra un'istruzione senza etichetta in cui non sono presenti dei simboli.
- incontra un'istruzione con etichetta.
Soluzione.
Esercizio 5
Fare gli esercizi
del Capitolo 7 del Tanenbaum relativi al programma del corso.
Soluzione 1. (By Caponnetto, Calcagno, Pata, Tomasello and Zito; and Firrincieli; and Mongelli)
Soluzione 2. (By P. Morreale)
Soluzione 7. (By A. Zisa)
Soluzione 12. (By Caponnetto, Calcagno, Pata, Tomasello and Zito)
Soluzione 13. (By Caponnetto, Calcagno, Pata, Tomasello and Zito)
Soluzione 13. (By L. Di Odoardo)
Soluzione 22. (By P. Morreale)
LI> Soluzione 23. (By Tomasello, Zito and Calcagno)
Esercizio 6
Esercizio 7
Esercizio 9
(a)
Riguardo ai moduli oggetto ottenuti da un assemblatore,
-
Cos'e' l' external reference problem?
Chi risolve tale problema e come viene risolto?
Esiste tale problema nei moduli oggetto ottenuti
traducendo un eventuale programma in assembly IJVM scritto in vari file sorgente?
-
Cos'e' il relocation problem?
Chi risolve tale problema e come viene risolto?
Esiste tale problema nei moduli oggetto ottenuti
traducendo un eventuale programma in assembly IJVM scritto in vari file sorgente?
(b) Supponiamo di avere un programma assembly che contenga la seguente
istruzione (ovviamente supponiamo che il linguaggio assembly permetta istruzioni
del genere)
MOV R3,#A+4096
dove A e' un simbolo, # indica la modalita' di indirizzamento immediato
e R3 e' il nome di un registro.
Supponendo di avere un assemblatore a due passi,
dire brevemente tutto quello che fa' l'assemblatore durante il secondo passo
quando elabora questa particolare istruzione. In particolare per quello che
riguarda la traduzione vera e propria dell'istruzione.
Esercizio 10
Supponiate che un programma in assembler IJVM, tradotto e caricato
nella Method Area sia formato dal codice
corrispondente ad un .main e dal codice di due metodi A e B.
Supponiate inoltre che il codice dei due
metodi sia formato dallo stesso numero di byte.
Se volessimo "invertire" di posto
i codici di A e di B, quali istruzioni dovremmo modificare?
Cosa occorrerebbe modificare
nella Constant Pool?
Cosa occorrerebbe modificare nello Stack?
Soluzione.
Esercizio 11
Che cos'e' una direttiva all'assemblatore? Fornire esempi di direttive
all'assemblatore dell'assembly IJVM.
A cosa serve, nel processo di assemblaggio per l'assembly IJVM,
il calcolo della lunghezza delle istruzioni?
Esercizio 12
Durante il processo di assemblaggio, per esempio di programmi IJVM,
viene stabilita la lunghezza in byte di ogni istruzione. Perche?
In una istruzione come IFLQ label, come viene calcolato il valore corrispondente a
label nel codice oggetto?
Esercizio 13
Il linguaggio assembly IJVM possiede una direttiva per definire costanti
simboliche con la seguente sintassi
.constant
constant1 value1
constant2 value2
.end-constant
Qual e' l'effetto dell elaborazione di una tale direttiva nel processo
di assemblaggio di un metodo assembly IJVM che la contenga?
In che modo, in un metodo assembly IJVM, e' possibile far riferimento alle
costanti simboliche definite da questa direttiva? A cosa corrispondono i valori
numerici risultanti dalla traduzione di tali riferimenti simbolici?
Esercizio 14
Descrivere il comportamento del Linker in un Assemblatore, con particolare riferimento
all'esempio di assemblaggio per IJVM fornito nel materiale del corso.
Esercizio 15
Ci puo' essere qualche vantaggio nel programmare direttamente in linguaggio assembly?
In quale caso? Perche'?
Soluzione.
Esercizio 16
Nel contesto del processo di assemblaggio, cos'e', a cosa serve
e come viene utilizzata la Tabella dei Simboli?
Esercizio 17
Prendendo in considerazione l'esempio di assemblaggio per l'assembly IJVM proposto nel materiale
del corso, descrivere il comportamento del Linker.