Instructions Language of the computer Flashcards
Come il LEGv8 supporta le chiamate a procedura?
Il software LEGv8 segue la seguente convenzione per la chiamata di procedura nell’assegnazione dei suoi 32 registri:
* X0 – X7: otto registri di parametri in cui passare parametri o valori di ritorno.
* LR (X30): un registro degli indirizzi di ritorno per tornare al punto di origine.
* La lingua di assemblaggio LEGv8 include un’istruzione solo per le procedure: istruzione branch-and-link (BL)
Quali operazioni vengono fatte nelle chiamate a procedure?
- Mette i parametri in un luogo in cui la procedura può accedervi.
- Trasferisce il controllo alla procedura.
- Acquisisce le risorse di archiviazione necessarie per la procedura.
- Esegue l’attività desiderata.
- Inserisce il valore del risultato in un luogo in cui il programma chiamante può accedervi.
- Restituirsce il controllo al punto di origine, poiché una procedura può essere chiamata da diversi punti in a programma.
Come in LEGv8 possiamo implementare una operazione di “lock”?
Load-Exclusive (LDXR): Legge un valore da una locazione di memoria e stabilisce una “riserva” per quella locazione.
Store-Conditional (STXR): Scrive un valore nella stessa locazione di memoria solo se la “riserva” è ancora valida. Se un altro processo ha modificato la memoria nel frattempo, l’operazione fallisce.
Loop di ritentativo: In caso di fallimento dello STXR, si ripete il processo.
Processo di traduzione di un programma C in un eseguibile
Compiler: Traduce il codice C in un linguaggio assembly specifico (es. LEGv8). Si occupa di ottimizzazioni di alto livello e gestione della sintassi del linguaggio.
Assembler: Converte il codice assembly in linguaggio macchina, generando un file oggetto (.o) contenente codice binario e simboli.
Linker: Combina i file oggetto e le librerie necessarie in un unico eseguibile, risolvendo riferimenti a funzioni e variabili.
Loader: Carica l’eseguibile in memoria, inizializza il processo e trasferisce il controllo al punto di ingresso del programma.
Cosa sono e come vengono gestite le Dynamic Link Libraries (DLL)?
Le Dynamic Link Libraries (DLL) sono librerie che contengono codice e dati condivisibili tra più programmi durante l’esecuzione.
Esse:
Consentono di risparmiare spazio poiché i moduli comuni vengono caricati una sola volta.
Permettono l’aggiornamento delle librerie senza ricompilare i programmi che le usano.
Gestione delle DLL:
Durante il linking: Il linker genera riferimenti simbolici ai moduli delle DLL.
Durante il caricamento: Il loader risolve i riferimenti simbolici, caricando la DLL in memoria e associandola al programma in esecuzione.
Tipologie di formati dati del LEGv8 e il loro uso
Word (32-bit) e Doubleword (64-bit): Utilizzati per numeri interi e operazioni di calcolo generale.
Byte (8-bit) e Halfword (16-bit): Usati per dati più piccoli o per gestire array e stringhe.
Floating-point (32-bit e 64-bit): Utilizzati per calcoli in virgola mobile.
Simboli e indirizzi: Usati per riferimenti a memoria o funzioni.
Interpretazione degli indirizzi dei Branch o dei Branch condizionali
Gli indirizzi dei branch in LEGv8 sono indirizzi relativi al Program Counter (PC). Il valore specificato nell’istruzione rappresenta un offset (positivo o negativo) rispetto al valore corrente del PC. Questo approccio rende il codice più compatto e indipendente dalla posizione.