uni
Qui vengono caricati i dati che servono per eseguire un programma, variabili ecc.
La memoria è un insieme di celle, ed ogni cella è in genere delle dimensioni di un byte (8 bit).
Un oggetto è un gruppo di celle consecutive che vengono considerate dal programmatore come un’unica cella informativa.
Ogni oggetto ha due attributi:
- Indirizzo ovvero l’indirizzo della prima cella.
- Valore ovvero il contenuto di tutte le celle.
Ogni oggetto ha un tipo, dal quale si rileva automaticamente il range di valori consentiti e le operazioni consentite.
Un oggetto può essere dichiarato e definito, una dichiarazione noon associa locazioni di memoria o azioni eseguibili, una definizione invece associa una locazione di memoria o un’azione eseguibile.
da qui in poi trattiamo della materia Calcolatori elettronici del secondo anno.
La CPU intel x86 può accedere a singoli byte, word, long (double word) e qadruple word.
Immaginiamo la memoria come una colonna di righe da 8 byte.
movq 8byte
sposta l’intera riga di 8 byte.
La memoria può essere costruita tale che il MSB finisca all’indirizzo più grande (BIG ENDIAN), oppure in modo che sia il LSB a finire nell’indirizzo più grande (LITTLE ENDIAN). Questa differenza non ci interessa, al massimo riguarda il Compilatore.
L’architettura intel è Little Endian, come la maggior parte delle altre architetture.
L’offset
L’offset è la distanza tra due indirizzi, ovvero la differenza tra i due: conta quanti byte devo saltare per arrivare al secondo. L’offset da 1 a 7 è 6.
Ha anche senso parlare di offset negativi: l’offset da 1 a -2 è -3.
Gli indirizzi sono pensati in maniera circolare, poiché è così che la CPU opera somma e differenza: se all’estremo superiore sommo 1 torno all’estremo inferiore.
Posso quindi chiedermi quale sia la differenza tra e , con , posso scriverla come e quindi viene negativa, oppure posso fare .
Posso scrivere l’insieme degli indirizzi come:
Allineamenti
Dire che un oggetto è allineato a vuol dire che è multiplo di , ovvero ha bit megno significativi resettati.
Dire che un oggetto è allineato ad un oggetto vuol dire che è allineato a .
Dire che un oggetto è allineato naturalmente vuol dire che è allineato a se stesso.
Limitazioni dell’architettura
Il formato delle istruzioni Intel consente un solo operando in memoria, tuttavia ci possono essere istruzioni con operandi impliciti, ad esempio l’istruzione POP (%RDI)
ha due operandi in memoria poiché la pila è in memoria.
Il massimo numero di celle di memoria centrale nell’architettura Intel è .
Comunicazione CPU-Memoria
- : byte enabler
La CPU emette il numero di riga e il numero dei byte delle celle interessate.
È possibile mettere una stessa informazione su due righe diverse (solo nell’architettura Intel) anche se il compilatore cerca in tutti i modi di evitarlo.
Pensiamo alla RAM come composta da 8 chip “larghi” un byte e lunghi tanto quanto la RAM che vogliamo ottenere, uniti uno accanto all’altro, cosicché ognuno formi una colonna. Come possiamo collegarli alla CPU?
- è l’indirizzo della riga e va collegato in parallelo in quanti è a comune con tutti i chip
- va scomposto e connesso in serie poichè ogni chip corrisponde ad un diverso bit
- va collegato come
- infine e vanno collegati in parallelo
Ultimo particolare: i chip di RAM devono capire che il processore stia effettivamente chiamando loro, ciò viene implementato tramite una maschera di select , come abbiamo visto a Reti Logiche. Inoltre ai chip interessa solo l’offset relativo a loro stessi, dividiamo quindi in e , e colleghiamo la dei chip ad e la dei chip all
omonima.
Accesso a celle su righe diverse
Come abbiamo detto è possibile depositare o prelevare una stessa informazione su righe diverse:
L’offset di questa locazione è: , in questo caso sarebbe e una possibile istruzione che utilizzi questa locazione è:MOVQ 13, %RAX
.
Una domanda che sorge spontanea è: chi si occupa del fare implicitamente i due accessi in memoria che richiede tale offset? Qualcuno potrebbe pensare che è il software, invece è l’hardware, nel microcodice del processore è prevista questa istruzione, questo spiega per quale motivo per esempio nell’architettura ARM questo accesso non è disponibile.