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: = campo indirizzo dell'istruzione, = registro indicato, = contenuto di .
| Modalità | Operando | Pro | Contro |
|---|---|---|---|
| immediato | stesso | nessun accesso alla memoria | valore limitato dai bit del campo |
| diretto | , EA = | semplice | spazio di indirizzamento limitato dal campo |
| indiretto | , EA = | spazio ampio | due accessi alla memoria |
| a registro | veloce, pochi bit | pochi registri | |
| indiretto a registro | , EA = | spazio ampio, un solo accesso | serve caricare prima il registro |
| con spiazzamento (base + offset) | EA = | flessibile | somma in più |
| relativo al PC | EA = | codice rilocabile, salti corti | portata limitata |
| indicizzato e scalato | EA = | accesso ad array con elementi di byte | più complesso |
| a pila | operando in cima allo stack, implicito | istruzioni corte | accesso solo alla cima |
Esempio: memoria con , , , registro ; istruzione con .
| Modalità | Valore dell'operando |
|---|---|
| immediato | 200 |
| diretto | |
| indiretto | |
| a registro () | 500 |
| indiretto a registro () | |
| spiazzamento () |
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 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.
- Formato fisso (RISC: tutte le istruzioni di 32 bit): decodifica semplice e veloce, 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 →.
- Formato variabile (x86: da 1 a 15 byte): codice compatto, decodifica complessa.
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 . 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) |
|---|
- cond: condizione di esecuzione (tutte le istruzioni ARM a 32 bit possono essere condizionate, vedi Strutture di controllo in assembly ARMSalti B e condizionati, codici di condizione con e senza segno; traduzione di if, if-else, while, for e do-while da C ad ARM; esecuzione condizionata per eliminare salti brevi; switch con tabella di salto.Strutture di controllo in assembly ARM →).
- S: se 1 l'istruzione aggiorna i flag.
- Rn, Rd: 4 bit perché i registri sono 16.
- operando 2: un registro eventualmente scalato, oppure (I = 1) una costante di 8 bit ruotata a destra di un numero pari di posizioni (4 bit di rotazione × 2). Per questo
MOV r0, #0xFF000000è codificabile (0xFF ruotato) maMOV r0, #0x101no.
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; = campo indirizzo, = registro, = contenuto.
- Immediato: operando . Diretto: EA . Indiretto: EA (due accessi).
- A registro: ; indiretto a registro: EA .
- Spiazzamento: EA (offset 0: indiretto a registro; base 0: assoluto). Relativo al PC: .
- Indicizzato scalato: ; in ARM
LDR r0,[r1,r2,LSL #2]. A pila: cima dello stack, implicito.
Esempio (, , , , ): immediato 200; diretto 500; indiretto 800; registro 500; indiretto a registro 800; spiazzamento .
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.
- MIPS: R op (6), rs (5), rt (5), rd (5), shamt (5), funct (6); I op (6), rs (5), rt (5), immediato (16) esteso con il segno; J op (6), indirizzo (26) di parola (per 4). 5 bit per registro ().
- ARM (elaborazione dati): cond (4), 00, I (1), opcode (4), S (1), Rn (4), Rd (4), operando 2 (12). cond: esecuzione condizionata (Strutture di controllo in assembly ARMSalti B e condizionati, codici di condizione con e senza segno; traduzione di if, if-else, while, for e do-while da C ad ARM; esecuzione condizionata per eliminare salti brevi; switch con tabella di salto.Strutture di controllo in assembly ARM →); S: aggiorna i flag; operando 2: registro scalato o (I = 1) costante di 8 bit ruotata di un numero pari di posizioni (
MOV r0,#0xFF000000sì,#0x101no). Dettagli: 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 →, 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: nel diretto il campo è un indirizzo, nell'immediato il valore; dimenticare l'estensione del segno per spiazzamenti negativi.