Esercizio 30accessi alla memoria e modi di indirizzamento
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 | 1 | |
| indiretto | : prima si legge l'indirizzo in , poi il dato | 2 |
| indiretto a registro | 1 | |
| con spiazzamento (base + offset) | 1 |
Totale: (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 , poi il dato) = 3.
Riprova sull'esempio del testo di teoria
Con , e : nel modo diretto si legge (un accesso); nell'indiretto si legge e poi (due accessi).
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 (prelievo) 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 | a | |
| B | immediato + indiretto | a | |
| C | indiretto (un operando) | b | |
| D | diretto + indiretto | d |
Errori comuni: prelievo dimenticato; accesso contato per l'immediato; un solo accesso per l'indiretto; indiretto confuso con indiretto a registro.