SOFTWARE
1. ASSEMBLY
1.0 Premessa
Le cose che ho scritto di seguito sono scritte molto meglio nel materiale del corso "Laboratorio di Architetture I", disponibile sul sito Twiki.
1.1 Il Liguaggio
L'assembly è IL linguaggio di programmazione a basso livello (più vicino alla macchina).
Viene "costruito" sull'architettura della macchina e per questo ne sfrutta tutte le caratteristiche.
In questo corso, ogni volta che si parla di "programmatore" si intende "programmatore assembly", ovvero che scrive in assembly i programmi.
È composto da:
-
istruzioni: sono istruzioni macchina espresse tramite codice mnemonico.
Esiste, infatti, una corrispondenza 1:1 fra istruzioni dell'assembly e istruzioni macchina. Il compito dell'assembly è pertanto quello di proporre le istruzioni macchina in modo
mnemonico.
Questa corrispondenza 1:1 si riflette anche sul fatto che l'assembly non viene compilato, ma soltanto tradotto da un programma detto assemblatore o assembler.
Ogni istruzione, sia essa dell'assembly o macchina, ha 4 campi (eventualmente vuoti): etichetta, istruzione, operandi, commento. Il campo "etichetta", in particolare, serve per semplificare
i salti relativi.
-
direttive: non sono istruzioni direttamente eseguite dalla macchina, ma informazioni che vengono fornite all'asseblatore perchè faccia cose che fanno comodo.
Ad es.: riserva un tot di celle consecutiva nella memeoria centrale.
1.2 Il Funzionamento
Quando un file o modulo sorgente scritto in assembly viene tradotto in modulo oggetto, l'assemblatore trasforma il codice mnemonico in stringhe binarie e risolve soltanto gli indirizzi interni al
modulo.
Il modulo oggetto sarebbe già perfettamente eseguibile se non ci fossero collegamenti irrisolti ad altri moduli oggetto.
Un programma di nome linker si occupa di fondere in modo corretto i moduli oggetto che servono. I moduli oggetto fusi, possono derivare anche da altri linguaggi di programmazione, oltre
all'assembly. Viene creato così il modulo eseguibile.
In particolare, nei moduli oggetto: gli indirizzi assoluti vengono fatti partire da zero; i salti a funzioni esterne e i riferimenti a variabili o funzioni esterne non sono risolti; i
riferimenti a variabili o etichette globali non sono risolti.
1.3 L'importanza delle interruzioni software
Se non esistessero, per far funzionare più programmi contemporaneamente bisognerebbe linkarli. Le istruzioni di trap, infondo, eseguono una specie di link tramite gli indirizzi assoluti
del vettore delle interruzioni: la stessa cosa che fa il linker quando cambia gli indirizzi assoluti dei moduli che unisce.
Se non esistessero, più programmi che usano una stessa libreria dovrebbero essere linkati ogniuno alla sua copia della libreria. Tramite trap, invece, viene caricata una sola copia della
librearia a cui i vari programmi accedono a turni.
Se non esistessero, non si potrebbe avere la struttura di sistema operativo che si ha attualmente: un nucleo gestisce il colloquio tra applicazioni e periferiche interne ed esterne. Questi
colloqui, infatti, nel caso nucleo-applicazioni vengono gestiti tramite trap.
2. Software di base
Il software che deve essere fornito dal produttore della macchina.
Senza questi programmi, la macchina sarebbe inutilizzabile.
-
Sistema operativo: si occupa di gestire la macchina a basso livello, al posto del programmatore di alto livello.
-
Librerie: moduli di codice già pronto.
Possono servire, ad esempio, per implementare via software funzioni che la macchina non sa fare direttamente via hardware.
-
Bootstrep: programma che avvia la macchina.
La memoria centrale è composta da flip-flop. I flip-flop, non essendo basati su prorpietà magnetiche, perdono i bit che memorizzano se non ricevono corrente. Dunque quando il
calcolatore viene spento, la RAM si azzera.
Quando si va ad accender il computer, il program counter caricherebbe solo stringhe nulle se non ci fosse un programma che carica in memoria le prime istruzioni.
Questo programma è il bootstrep. Esso risiede in una memoria ROM ed ha pochissime istruzioni: legge da una periferica una istruzione alla volta e la carica in memoria.
Si noti che se la RAM potesse conservare le informazioni anche a macchina spenta, non servirebbe il bootstrep e si avrebbe un avvio istantaneo. Esistono studi per l'implementazione di
memorie di questo tipo in futuro.
-
Assembly e assembler:
-
Compilatori:
-
File System: software per la gestione delle memorie di massa.
Per avere una macchina efficiente, sarebbe opportuno scrivere almeno il software di base in assembly.