Load and Store

Leggere e scrivere la RAM

Un programma non potrebbe fare molto senza utilizzare la memoria RAM per tanti motivi:

  • le istruzioni sono nella RAM;
  • i dati sono nella RAM;
  • i risultati vengono scritti nella RAM;

Serve quindi un modo per poter leggere e scrivere dalla RAM. Le istruzioni assembly che fanno queste operazioni sono

  • LOAD (LD) legge dati dalla RAM e li scrivi nei registri
  • STORE (ST) scrive dati nella RAM prendendoli dai registri

Architetture Load-Store

Alcune architetture di processori vengono dette Load-Store perché non permettono solo questo tipo di operazioni con la RAM. In queste architetture, quindi, la ALU può fare operazioni solo sui registri. Di conseguenza prima di poter fare operazioni aritmetico-logiche (es. sommare due numeri) tutti gli operandi devono essere messi nei registri (se già non lo sono) utilizzando operazioni LOAD. Allo stesso modo il risultato dell’ALU viene messo in un registro, se il risultato va memorizzato nella RAM, serve un’operazione di STORE.

Somma in RISC-V (architettura load-store)

lw   a0, 0(x0)
lw   a1, 4(x0)
add  a0, a0, a1
sw   a0, 8(x0)

Somma in x86 (architettura non load-store)

mov  eax, dword ptr [0]
add  eax, dword ptr [4]
mov  dword ptr [8], eax

Indirizzamento della RAM

Quando si legge o scrive dalla RAM è necessario avere un modo per indicare l’indirizzo della cella di memoria da leggere o scrivere, il modo in cui si indica la cella di memoria viene detto indirizzamento della memoria (memory addressing).

Si potrebbe pensare di usare i numeri “fissi” delle celle, ma questa soluzione presenta molti problemi:

  • non è detto che istruzioni e dati vengano sempre messo nelle stesse celle della memoria;
  • il programmatore deve ricordarsi di tutti gli indirizzi in cui sono i dati;

L’indirizzamento che utilizza il numero della cella di memoria viene detto indirizzamento assoluto (absolute addressing) ed è usato molto raramente per i motivi spiegati sopra.

  • Indirizzamento immediato (immediate addressing)
  • Indirizzamento con registro (register addressing)
  • Indirizzamento indiretto (indirect addressing)
  • Indirizzamento con registro base (base register addressing)

I vari modi di indirizzamento non sono sempre possibili in tutte le architetture. Solitamente le architetture RISC hanno meno tipi di indirizzamento, mentre le architetture CISC ne hanno un numero elevato.

Esempi

Le slide sotto mostrano un esempio di esecuzione di un’istruzione di Load cioè di copia di valori dalla memoria ai registri. È importante notare che nell’esempio non viene descritta la fase di fetch dell’istruzione in quanto si parte dalla situazione in cui l’istruzione è già arrivata dall’IR al circuito di decode.

  • Michele Schimd © 2024
  • Ultimo aggiornamento: 17/02/2024
  • Materiale di studio e di esercizio per gli alunni dello Zuccante.

Creative Commons License