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.


  • 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:

  • 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, (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.