Formato delle istruzioni e modalità di indirizzamento
In questa pagina 5
Modalità di indirizzamento
Definizione (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. Con , e : immediato , diretto , indiretto .
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.
Formula (indice scalato). 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'elementor2di un array di parole che inizia ar1.
Esempio. Con r1=0x2000 e r2=3, LDR r0, [r1, r2, LSL #2] legge la parola all'indirizzo .
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.
Definizione (formato fisso e variabile)
- 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.
Esempio. ARM e MIPS usano istruzioni fisse di bit (una ogni byte), x86 istruzioni da a byte.
Formati MIPS (32 bit)
Definizione (formati MIPS R, I e J)
Formato Campi (bit) Uso R op (6) · rs (5) · rt (5) · rd (5) · shamt (5) · funct (6) operazioni tra registri: add $1, $2, $3I op (6) · rs (5) · rt (5) · immediato (16) immediati, load/store, salti condizionati: lw $8, 0x1200($9)J op (6) · indirizzo (26) salto incondizionato
Esempio. Nel formato R bit; ogni registro usa bit perché i registri sono .
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)
Definizione (formato ARM delle 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.
Esempio. MOV r0, #0xFF000000 è codificabile: 0xFF ruotato a destra di posizioni (campo di rotazione , ) e dà r0=0xFF000000.
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.