Salta al contenuto
Note per Studenti Formato delle istruzioni e modalità di indirizzamento

Formato delle istruzioni e modalità di indirizzamento

In questa pagina 5

Modalità di indirizzamento

L'indirizzo effettivo (EA) è l'indirizzo in memoria dell'operando. Notazione: AA = campo indirizzo dell'istruzione, RR = registro indicato, (X)(X) = contenuto di XX.

Modalità Operando Pro Contro
immediato AA stesso nessun accesso alla memoria valore limitato dai bit del campo
diretto (A)(A), EA = AA semplice spazio di indirizzamento limitato dal campo
indiretto ((A))((A)), EA = (A)(A) spazio ampio due accessi alla memoria
a registro (R)(R) veloce, pochi bit pochi registri
indiretto a registro ((R))((R)), EA = (R)(R) spazio ampio, un solo accesso serve caricare prima il registro
con spiazzamento (base + offset) EA = (R)+A(R) + A flessibile somma in più
relativo al PC EA = (PC)+A(\text{PC}) + A codice rilocabile, salti corti portata limitata
indicizzato e scalato EA = (Rb)+(Ri)⋅s+A(R_b) + (R_i) \cdot s + A accesso ad array con elementi di ss byte più complesso
a pila operando in cima allo stack, implicito istruzioni corte accesso solo alla cima

Esempio: memoria con M[200]=500M[200] = 500, M[500]=800M[500] = 800, M[700]=900M[700] = 900, registro R1=500R1 = 500; istruzione con A=200A = 200.

Modalità Valore dell'operando
immediato 200
diretto M[200]=500M[200] = 500
indiretto M[M[200]]=M[500]=800M[M[200]] = M[500] = 800
a registro (R1R1) 500
indiretto a registro (R1R1) M[500]=800M[500] = 800
spiazzamento (R1+200R1 + 200) M[700]=900M[700] = 900

Casi particolari dello spiazzamento: con offset 0 è l'indiretto a registro; con un registro base che vale sempre 0 ($0 in MIPS) diventa un indirizzamento assoluto.

Indice scalato (es. Pentium): il fattore s∈{1,2,4,8}s \in \{1, 2, 4, 8\} permette di scorrere in modo uniforme array di byte, mezze parole, parole, doppie parole. In ARM: LDR r0, [r1, r2, LSL #2] legge l'elemento r2 di un array di parole che inizia a r1.

Progetto del formato

Scelte da bilanciare: lunghezza dell'istruzione (più lunga = più operazioni, operandi e modalità, ma più memoria e banda), numero di codici operativi, numero di registri, ampiezza dei campi immediati e degli spiazzamenti.

Formati MIPS (32 bit)

Formato Campi (bit) Uso
R op (6) · rs (5) · rt (5) · rd (5) · shamt (5) · funct (6) operazioni tra registri: add $1, $2, $3
I op (6) · rs (5) · rt (5) · immediato (16) immediati, load/store, salti condizionati: lw $8, 0x1200($9)
J op (6) · indirizzo (26) salto incondizionato

5 bit per registro perché i registri sono 25=322^5 = 32. Nel formato J l'indirizzo è di parola: si moltiplica per 4 (scorrimento di 2 a sinistra) perché le istruzioni sono allineate a 4 byte. Nel formato I l'immediato a 16 bit viene esteso con il segno a 32 bit.

Formato ARM (32 bit, istruzioni di elaborazione dati)

cond (4) 00 I (1) opcode (4) S (1) Rn (4) Rd (4) operando 2 (12)

I dettagli delle istruzioni sono in L'architettura ARMARM a 32 bit come caso di studio: registri r0-r15 con SP, LR e PC, registro di stato CPSR con flag NZCV, modi del processore, architettura load/store, istruzioni condizionate, secondo operando flessibile, Thumb; differenze principali con ARMv8 a 64 bit.L'architettura ARM → e Istruzioni ARM di elaborazione datiIstruzioni aritmetiche (ADD, SUB, RSB, ADC), logiche (AND, ORR, EOR, BIC, MVN), di spostamento (MOV), moltiplicazione (MUL, MLA); secondo operando immediato o registro scalato con LSL, LSR, ASR, ROR; aggiornamento dei flag con S, CMP e TST; esempi di traduzione di espressioni C.Istruzioni ARM di elaborazione dati →.

Errori tipici

  • Confondere indirizzamento diretto e immediato: nel diretto il campo è un indirizzo, nell'immediato è il valore.
  • Dimenticare l'estensione del segno dell'immediato negli spiazzamenti negativi.

Versione ripasso

Indirizzamento

Indirizzo effettivo (EA) dell'operando; AA = campo indirizzo, RR = registro, (X)(X) = contenuto.

  • Immediato: operando AA. Diretto: EA =A= A. Indiretto: EA =(A)= (A) (due accessi).
  • A registro: (R)(R); indiretto a registro: EA =(R)= (R).
  • Spiazzamento: EA =(R)+A= (R) + A (offset 0: indiretto a registro; base 0: assoluto). Relativo al PC: (PC)+A(\text{PC}) + A.
  • Indicizzato scalato: (Rb)+(Ri)⋅s+A(R_b) + (R_i)\cdot s + A; in ARM LDR r0,[r1,r2,LSL #2]. A pila: cima dello stack, implicito.

Esempio (M[200]=500M[200] = 500, M[500]=800M[500] = 800, M[700]=900M[700] = 900, R1=500R1 = 500, A=200A = 200): immediato 200; diretto 500; indiretto 800; registro 500; indiretto a registro 800; spiazzamento M[700]=900M[700] = 900.

Formati

Fisso (RISC, 32 bit): decodifica semplice, adatto alla PipelineIdea della catena di montaggio; pipeline a 5 stadi IF, ID, EX, MEM, WB; tempo di ciclo, tempo per n istruzioni in una pipeline a k stadi e speedup con esempi svolti; registri di pipeline; scrittura e lettura dei registri nello stesso ciclo; limiti (stadi sbilanciati, hazard).Pipeline →; variabile (x86, 1-15 byte): compatto, decodifica complessa.

Errori tipici: nel diretto il campo è un indirizzo, nell'immediato il valore; dimenticare l'estensione del segno per spiazzamenti negativi.

Esercizi su questo argomento

Lezioni in cui compare

Teoria collegata