Instruction Set Architecture
In questa pagina 6
L'insieme delle istruzioni (ISA, Instruction Set Architecture) è il confine tra hardware e software: è tutto ciò che un programma in linguaggio macchina può usare. Due processori con la stessa ISA eseguono lo stesso codice, anche se sono organizzati in modo diverso (vedi Architettura e organizzazione di un calcolatoreDifferenza tra architettura (ciò che vede il programmatore) e organizzazione (come è realizzata); struttura e funzione; le quattro funzioni e i quattro componenti; macchina di von Neumann e IAS; generazioni tecnologiche e legge di Moore.Architettura e organizzazione di un calcolatore →).
L'ISA fissa: le operazioni disponibili, i tipi e le dimensioni dei dati, i registri visibili, le modalità di indirizzamento e i formatiModalità 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 →, il modello di memoria (indirizzamento al byte, ordine dei byte), la gestione delle eccezioni.
Elementi di un'istruzione
- Codice operativo (opcode): l'operazione.
- Riferimenti agli operandi sorgente: in un registro, in memoria, dentro l'istruzione stessa (immediato), in una porta di I/O.
- Riferimento al risultato.
- Prossima istruzione: implicita (la successiva), esplicita nei salti.
In assembly ogni istruzione si scrive con un codice mnemonico: ADD r1, r2, r3, LDR r0, [r1].
Tipi di operandi
Indirizzi (interi senza segno), numeri (interi in complemento a 2, virgola mobile, a volte BCD), caratteri (ASCII, UTF-8), dati logici (singoli bit). Dimensioni tipiche in ARM: byte (8 bit), mezza parola (16), parola (32), doppia parola (64).
Tipi di operazioni
| Classe | Esempi |
|---|---|
| trasferimento dati | load, store, move, push, pop |
| aritmetiche | add, sub, mul, div, neg, incremento |
| logiche | and, or, xor, not, test |
| scorrimento e rotazione | shift logico, aritmetico, rotazione |
| conversione | da intero a virgola mobile, estensione del segno |
| I/O | in, out (solo con I/O isolato, vedi Moduli di input-output e input-output programmatoPerché servono i moduli di I/O; funzioni del modulo (controllo, comunicazione, buffer, errori) e registri di stato, controllo e dati; I/O mappato in memoria e isolato con esempi; I/O programmato con attesa attiva e suo costo; confronto delle tre tecniche.Moduli di input-output e input-output programmato →) |
| controllo di sistema | istruzioni privilegiate, chiamata al sistema operativo |
| trasferimento del controllo | salto incondizionato e condizionato, chiamata e ritorno da procedura |
Numero di indirizzi
Quanti operandi espliciti ha un'istruzione aritmetica. Esempio: , variabili in memoria.
3 indirizzi (OP dest, src1, src2):
SUB Y, A, B ; Y <- A - B
MUL T, D, E ; T <- D * E
ADD T, T, C ; T <- T + C
DIV Y, Y, T ; Y <- Y / T2 indirizzi (OP dest, src, la destinazione è anche il primo operando):
MOV Y, A ; Y <- A
SUB Y, B ; Y <- Y - B
MOV T, D
MUL T, E ; T <- D * E
ADD T, C
DIV Y, T1 indirizzo (accumulatore implicito):
LOAD D
MUL E
ADD C
STOR Y ; Y <- D*E + C (temporaneo)
LOAD A
SUB B
DIV Y
STOR Y0 indirizzi (macchina a pila: gli operandi sono in cima allo stack): PUSH A, PUSH B, SUB, PUSH C, PUSH D, PUSH E, MUL, ADD, DIV, POP Y.
Meno indirizzi → istruzioni più corte ma più numerose. Le architetture RISC usano 3 indirizzi di registro.
Architettura load/store
In ARM e MIPS solo le istruzioni di load e store accedono alla memoria; tutte le operazioni aritmetiche e logiche lavorano tra registri. Lo stesso calcolo in ARM (variabili già caricate in r1–r5):
SUB r0, r1, r2 @ r0 = A - B
MUL r6, r4, r5 @ r6 = D * E
ADD r6, r6, r3 @ r6 = C + D*E
SDIV r0, r0, r6 @ r0 = Y (SDIV esiste solo nelle versioni più recenti dell'ISA)Errori tipici
- Confondere ISA e microarchitettura: la pipeline o la cache non fanno parte dell'ISA.
- Nelle macchine a 2 indirizzi, dimenticare che il primo operando viene sovrascritto.
Versione ripasso
ISA: il confine tra hardware e software (Architettura e organizzazione di un calcolatoreDifferenza tra architettura (ciò che vede il programmatore) e organizzazione (come è realizzata); struttura e funzione; le quattro funzioni e i quattro componenti; macchina di von Neumann e IAS; generazioni tecnologiche e legge di Moore.Architettura e organizzazione di un calcolatore →); fissa operazioni, tipi di dati, registri, indirizzamento e formatiModalità 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 →, modello di memoria, eccezioni.
Istruzioni
- Elementi: codice operativo, operandi sorgente (registro, memoria, immediato, I/O), risultato, prossima istruzione.
- Operazioni: trasferimento dati, aritmetiche, logiche, scorrimento, conversione, I/O (Moduli di input-output e input-output programmatoPerché servono i moduli di I/O; funzioni del modulo (controllo, comunicazione, buffer, errori) e registri di stato, controllo e dati; I/O mappato in memoria e isolato con esempi; I/O programmato con attesa attiva e suo costo; confronto delle tre tecniche.Moduli di input-output e input-output programmato →), controllo di sistema, trasferimento del controllo. ARM: byte, mezza parola (16), parola (32), doppia (64).
Numero di indirizzi
:
- 3:
SUB Y,A,B;MUL T,D,E;ADD T,T,C;DIV Y,Y,T. - 2 (destinazione = primo operando):
MOV Y,A;SUB Y,B;MOV T,D;MUL T,E;ADD T,C;DIV Y,T. - 1 (accumulatore):
LOAD D;MUL E;ADD C;STOR Y;LOAD A;SUB B;DIV Y;STOR Y. - 0 (pila):
PUSH A, PUSH B, SUB, PUSH C, PUSH D, PUSH E, MUL, ADD, DIV, POP Y.
Meno indirizzi: istruzioni più corte ma più numerose. RISC: 3 indirizzi di registro, load/store: in ARM SUB r0,r1,r2; MUL r6,r4,r5; ADD r6,r6,r3; SDIV r0,r0,r6.
Errori tipici: pipeline e cache non fanno parte dell'ISA; a 2 indirizzi il primo operando è sovrascritto.