[fonti varie ma molto appunti exyss]
- La memoria può contenere sia istruzioni che dati.
- La memoria delle architetture MIPS è indicizzata al byte (ogni indice punta a un byte).
-
- Ad ogni byte è associato un indirizzo, rappresentato da 8 cifre esadecimali.
- Ogni word è composta da 4 byte, ovvero 32 bit, quindi le parole sono separate da 4 byte (se la prima è all’indirizzo 0x00000000, la seconda sarà a 0x00000004).
- Quindi, il k-esimo byte sarà all’indirizzo(k-1), mentre la j-esima word a 4 * (j-1)
Ci sono 2^30 parole di memoria (32 registri, ma 2^32/4 perché ogni word sono 4 byte), ovvero 4 Giga-byte.
La memoria può essere immaginata come una tabella da 4 colonne (un byte per colonna) e 2^30 righe (una word per riga).
Nel linguaggio MIPS, per leggere il contenuto di una word si usa la notazione offset($indirizzo)
, dove $indirizzo
è un registro contenente un valore interpretato come indirizzo di memoria da cui prendere la word, e offset
il numero di byte successivi all’indirizzo.
componenti
La memoria è divisa in:
- Stack - operazioni legate alle funzioni(/procedure), salva le chiamate ricorsive e le variabili locali. Non ha dimensione fissa. Al suo interno opera il registro
$sp
, Stack Pointer. - Heap o Dynamic Data - contiene i dati dinamici immagazzinati durante l’esecuzione.
- Static Data - contiene i dati statici definiti all’avvio del programma (etichette sotto
.data
). Il registro$gp
, Global Pointer, viene usato dall’assemblatore per gestire gli indicizzamenti all’interno di questa zona. - Program Instructions - contiene le istruzioni del programma (etichetta
.text
). Al suo interno opera il Program Counter, il registro che memorizza la posizione in memoria dell’istruzione successiva da eseguire. - Kernel-reserved memory - spazio di memoria inutilizzabile riservato al Kernel del sistema operativo.