prof. Nunzio Brugaletta | PC inside |
Un programma scritto in un qualsiasi linguaggio, per esempio C/C++, per poter essere eseguibile da una CPU necessita di un processo di trasformazione (compilazione) effettuato da un compilatore. Il compilatore conosce le istruzioni del linguaggio ma conosce anche le istruzioni che la CPU, per la quale sta compilando, è in grado di eseguire e, quindi, conosce come far corrispondere le une alle altre.
Una istruzione eseguibile da una CPU è una stringa binaria composta da:
|
Il codice operativo è scelto dall'instruction set del processore che rappresenta l'insieme dei comandi implementati, dal costruttore, in quel processore. L'insieme degli op-code costituisce quello che viene chiamato linguaggio macchina di quel processore. La dimensione in bit dell'opcode dipende dalla word su cui lavora il processore, anche se con l'evolversi dell'hardware la dimensione della word è cambiata notevolmente: per esempio nei processori della famiglia x86 (processori inizialmente sviluppati da Intel, ora anche da altri produttori come AMD; la x iniziale sta ad indicare la prima parte degli identificativi della famiglia di processori: 8086, 80386, ...) il primo processore della famiglia, l'8086, prevedeva una word di 16 bit, i moderni processori della stessa famiglia vanno verso word di 64 bit. A questo punto si pongono problemi di retrocompatibilità: affinché i programmi scritti per un processore precedente possano funzionare con le nuove versioni, è necessario che la nuova word debba poter coesistere con dimensioni alternative. L'architettura dei moderni computer è basata su una famiglia di dimensioni di word collegate fra loro (32 è il doppio di 16 e 64 è il quadruplo di 16). Pertanto oggi il termine word viene considerato sinonimo di 16 bit. I codici operativi di un determinato set di istruzioni specificano operazioni molto semplici del tipo: somma, sottrai, sposta, salta all'istruzione, sposta in memoria.
Gli operandi specificano i dati cui si applica l'operazione espressa dall'op-code. Il modo con cui si accede ai dati viene chiamato metodo di indirizzamento. In sintesi esistono due tipologie di metodi di indirizzamento:
Metodi diretti. Viene specificata la posizione del dato sia esso in memoria centrale e, in questo caso, ne viene esplicitato l'indirizzo, sia esso in uno dei registri della CPU individuato da una sigla identificativa. L'accesso al dato, in questi casi, è veloce ma si obbliga il dato ad essere sempre, ad ogni esecuzione del programma, residente nelle stesse posizioni. Questi metodi vengono utilizzati solo in alcuni casi specifici.
Metodi indiretti. La posizione dei dati viene specificata come somma fra uno spiazzamento e un numero che identifica la posizione a partire dalla quale cominciano i conteggi, e che può essere variata. In questo modo, per esempio, si può inserire il programma in una zona qualsiasi di memoria, indicare l'indirizzo di inizio e il programma, sommando a questo lo spiazzamento, saprà dove trovare i dati da elaborare.
Il programma da eseguire, in linguaggio macchina, viene conservato, allo stesso modo dei dati, in una zona di memoria disponibile e può essere avviato.
http://ennebi.solira.org | ennebi@solira.org |