Salta al contenuto
Note per Studenti Esercizio 30 · accessi alla memoria e modi di indirizzamento

Esercizio 30accessi alla memoria e modi di indirizzamento

Esame
In questa pagina 4

Testo (quesito 1 a risposta multipla degli esempi di compitino di Architettura degli Elaboratori, UniPD, a.a. 2010-11, 2011-12, 2014-15 e 2015-16; le quattro varianti sono qui riunite). Quante volte la CPU deve accedere alla memoria quando preleva ed esegue un'istruzione che ha:

  • A. due operandi, uno con modo di indirizzamento immediato e uno con modo diretto (2014-15; opzioni a) 2, b) 3, c) 1, d) 4, e) nessuna);
  • B. due operandi, uno immediato e uno indiretto (2015-16; opzioni a) 3, b) 2, c) 1, d) 4, e) nessuna);
  • C. un solo operando, con modo di indirizzamento indiretto (2010-11; opzioni a) 2, b) 3, c) 1, d) 4, f) nessuna);
  • D. due operandi, uno con modo diretto e uno con modo indiretto (2011-12; opzioni a) 2, b) 3, c) 1, d) 4, f) nessuna).

Si assume che l'istruzione stia in una parola di memoria (un solo prelievo) e che i risultati vengano scritti in un registro (nessun accesso per la scrittura).

Teoria: Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →, Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →.


Metodo

Gli accessi alla memoria sono quelli del prelievo dell'istruzione (1) più, per ciascun operando in memoria, quelli per ottenere il valore:

modo dove sta l'operando accessi alla memoria per l'operando
immediato nell'istruzione stessa 0
a registro in un registro 0
diretto M[A]M[A] 1
indiretto M[M[A]]M[M[A]]: prima si legge l'indirizzo in M[A]M[A], poi il dato 2
indiretto a registro M[R]M[R] 1
con spiazzamento (base + offset) M[R+A]M[R + A] 1

Totale: 1+∑1 + \sum (accessi per ogni operando).

Se l'istruzione dovesse anche scrivere il risultato in memoria (operando destinazione in memoria) si aggiungerebbe un accesso; nei quesiti non è richiesto.

Risposte

variante prelievo operando 1 operando 2 totale risposta
A immediato + diretto 1 0 1 2 a
B immediato + indiretto 1 0 2 3 a
C solo indiretto 1 2 - 3 b
D diretto + indiretto 1 1 2 4 d

In C: 1 prelievo + 2 per l'indiretto (leggere il puntatore M[A]M[A], poi il dato) = 3.

Riprova sull'esempio del testo di teoria

Con M[200]=500M[200] = 500, M[500]=800M[500] = 800 e A=200A = 200: nel modo diretto si legge M[200]=500M[200] = 500 (un accesso); nell'indiretto si legge M[200]=500M[200] = 500 e poi M[500]=800M[500] = 800 (due accessi).

python
def accessi(modi):
    """Accessi alla memoria per prelevare ed eseguire un'istruzione con gli operandi nei modi indicati."""
    per_modo = {"immediato": 0, "registro": 0, "diretto": 1, "indiretto": 2,
                "indiretto a registro": 1, "spiazzamento": 1}
    return 1 + sum(per_modo[m] for m in modi)

print(accessi(["immediato", "diretto"]))      # 2   (A)
print(accessi(["immediato", "indiretto"]))    # 3   (B)
print(accessi(["indiretto"]))                 # 3   (C)
print(accessi(["diretto", "indiretto"]))      # 4   (D)

Errori comuni

  • Dimenticare il prelievo dell'istruzione (1 accesso).
  • Contare un accesso per l'operando immediato: il valore è già nell'istruzione.
  • Contare un solo accesso per l'indirizzamento indiretto: ne servono due (puntatore e dato).
  • Scambiare l'indiretto con l'indiretto a registro: quest'ultimo costa un solo accesso perché l'indirizzo è già nel registro.

Versione ripasso

Quesito 1 degli esempi di compitino (a.a. 2010-11, 2011-12, 2014-15, 2015-16). Teoria: Formato delle istruzioni e modalità di indirizzamentoModalità di indirizzamento (immediato, diretto, indiretto, a registro, indiretto a registro, con spiazzamento, relativo al PC, indicizzato e scalato, a pila) con indirizzo effettivo ed esempi; formati fissi e variabili; i formati R, I e J di MIPS e il formato a 32 bit di ARM con il calcolo dei campi.Formato delle istruzioni e modalità di indirizzamento →, Ciclo fetch-executeRegistri PC, IR, MAR e MBR; ciclo dell'istruzione diviso in fetch ed execute; i quattro tipi di operazioni; diagramma degli stati del ciclo con calcolo degli indirizzi degli operandi e controllo delle interruzioni; esempio su una macchina ad accumulatore.Ciclo fetch-execute →.

Accessi alla memoria =1= 1 (prelievo) +∑+ \sum accessi per ciascun operando: immediato 0, a registro 0, diretto 1, indiretto 2 (puntatore + dato), indiretto a registro 1, con spiazzamento 1.

variante operandi totale risposta
A immediato + diretto 1+0+1=21 + 0 + 1 = 2 a
B immediato + indiretto 1+0+2=31 + 0 + 2 = 3 a
C indiretto (un operando) 1+2=31 + 2 = 3 b
D diretto + indiretto 1+1+2=41 + 1 + 2 = 4 d

Errori comuni: prelievo dimenticato; accesso contato per l'immediato; un solo accesso per l'indiretto; indiretto confuso con indiretto a registro.

Teoria collegata