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:

  1. Indirizzo ovvero l’indirizzo della prima cella.
  2. 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.