Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate
Architettura degli elaboratori
Il livello Instruction Set Architecture
Marco Tarini
Dipartimento di Scienze Teoriche e Applicate [email protected]
Esecuzione diretta (hardware)
I livelli
Livello 0 Logica digitale Livello 2 Instruction Set
Interpretazione (microprogramma) o esecuzione diretta (hardware)
Livello 5 Linguaggi Applicativi
Traduzione (compilatore)
Livello 3 Sistema operativo
Interpretazione parziale
(sistema operativo)
Livello 4 Linguaggio Assembly
Traduzione (assemblatore)
Livello 1 Architettura
ISA: Instruction Set Architecture
Il livello visto dal programmatore assembly o dal compilatore.
Comprende:
Instruction Set
(quali operazioni possono essere eseguite?) Instruction Format
(come devono essere scritte queste istruzioni? cioè la loro sintassi) Data storage
(dove sono posizionati i dati?) Addressing Mode
(come si accede ai dati?) Exceptions
(come vengono gestiti i casi eccezionali?)
Una corretta comprensione dell’ISA è importante non solo per i progettisti di compilatori e di sistemi operativi, ma anche per i programmatori.
Il livello ISA
Architettura degli elaboratori - 5 -
Il set di istruzioni: un’interfaccia critica
Il livello ISA
Architettura degli elaboratori - 6 -
instruction set software
hardware
Il set di istruzioni: un’interfaccia critica
È un difficile compromesso fra:
massimizzare le prestazioni massimizzare la semplicità di uso minimizzare i costi di produzione minimizzare i tempi di progettazione
Definisce la sintassi e la semantica del linguaggio
Il livello ISA
Architettura degli elaboratori - 7 -
Criteri di definizione di un IS
filosofia CISC:
favorire questo filosofia RISC:
favorire questo
Esiste un’infinità di insiemi di istruzioni equivalenti
che permettono di scrivere codice per eseguire… qualsiasi cosa*
La scelta di un insieme delle istruzioni prende in considerazione:
la semplicità della realizzazione cioè dell’HW richiesto
l‘espressività e la semplicità di uso la potenza delle istruzioni la facile programmabilità l'efficienza
velocità di esecuzione cioè: (vel di ogni istruzione)
x (quante se ne rendono necessarie)
* …purché sia computabile, e non richieda troppe risorse. Vedi corsi di informatica teorica!
Criteri di definizione di un IS
Oltre a questi criteri obiettivi, molte altre forze più capricciose
hanno plasmato gli Istruction Sets oggi usati La loro storia
(soprattutto il bisogno di back compatibility) (non tutte le scelte sono logiche a posteriori) Fattori economici / legali
Considerazioni tecniche pertinenti al contesto del loro sviluppo
Il livello ISA
Architettura degli elaboratori - 9 -
Alcuni Instruction Set popolari oggi
MIPS ARM
X86 X64
Il livello ISA
Architettura degli elaboratori - 10 -
filosofia RISC
filosofia CISC
per i curiosi: cercare sulla Wikipedia…
Il codice da un livello all’altro
Il livello ISA
Architettura degli elaboratori - 12 -
lw R15, 0(R2) lw R16, 4(R2) sw R16, 0(R2) sw R15, 4(R2) High Level Language
Program
Assembly Language Program
Machine Language Program
Control Signal Specification
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
0000 1001 1100 0110 1010 1111 0101 1000 1010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111
ALUOP[0:3] <= InstReg[9:11] & MASK
… compiler
assembler
machine interpretation
Programmi in Linguaggio macchina (programmi binari)
Un programma(software) in linguaggio macchina
è scritto in uno specifico Instruction Set, e per uno specifico SO
Consiste in : DATI
tenuti in un blocco di memoria ISTRUZIONI
tenuti in un altro blocco di memoria
per convenzione, si usano due aree di memoria diverse, dedicate a ciascuna di queste due cose
Ogni istruzione è:
una dell’Instruction Set, oppure,
un’invocazione di funzione del Sistema Operativo («system calls») (funzioni nel «kernel» di quel SO, per es per aprire un file)
Programmi in Linguaggio macchina (programmi binari)
Quindi un Programma Binario è specificoper un Instruction Set e un Sist Op (cioè per una «platform»)
gira solo su una macchina con un architettura che implementa quell’Instruction Set e fornito di quel SO
Alcuni dettagli pratici dei binari più comuni:
Programmi per Win64:
Instruction Set x64, e SO Windows Programmi per Win32:
Instruction Set x86, e SO Windows
ma sono eseguibili anche da architetture x64, perché è back-compatible (seppur con una efficienza leggermente minore,
perché non si sfrutta la maggiore potenza dell’x64). Nota: non viceversa.
Programmi per MacOS:
possono contenere versioni del binario per due Instruction Set: x64 e x86 in modo da essere eseguiti in modo ottimale su entrambe le architetture Programmi per Linux
Il sorgente (in linguaggio ad alto livello) è indipendente dalla piattaforma (è
«cross-platform») perché può invece essere compilato per piattaforme diverse
Il livello ISA
Architettura degli elaboratori - 14 -
Eseguire programmi binari
Caricare il programma (DATI + ISTRUZIONI) in memoria Settare il PC alla prima istruzione
(quale sia, è determinato dal programma stesso) Start!
Sarebbe assurdamente difficile scrivere direttamente programmi binari Saliamo di due livelli,
e scriviamoli in Assembly
Il livello ISA
Architettura degli elaboratori - 15 -
Università degli Studi dell’Insubria Dipartimento di Scienze Teoriche e Applicate
Instruction Set MIPS:
piccolo prontuario
MIPS R3000 Instruction Set Architecture
Categorie di istruzioni:
Computazioni (per la ALU) Integer o Floating Point Logiche or matematiche Load / Store (memoria) Jump / Branch
Speciali
R0 - R31
PC HI LO
OP OP OP
rs rt rd sa funct
rs rt immediate
jump target Tre formati di istruzioni: tutti da 32 bit
Registri
tipo R tipo I tipo J
Architettura MIPS - Registri
32 x 32-bit registri utente interi
MIPS Instruction Set Architecture
Architettura degli elaboratori - 19 -
r0r1
°°
°r31
PCLO HI
f0f1
°°
°f31 32 x 32-bit registri utente floating point
Registri speciali
00000000 00000000 00000000 00000000
sempre 0
32 bit
Modello della memoria di MIPS
I programmi ipotizzano di avere (al max) 232byte di memoria La memoria è indirizzabile a livello di byte
Parole (word) di 32 bit = 4 byte
Le parole si trovano ad indirizzi multipli di 4
Ricordare sempre: la memoria include sia i dati che le istruzioni
MIPS Instruction Set Architecture
Architettura degli elaboratori - 20 -
00...0000 00...0100 00...1000
11...1000
32 bit
1 byte
I campi delle istruzioni MIPS
campo significato
op Codice dell’istruzione (opcode) rs Quale registro fa da primo operando
rt Quale registro fa da secondo operando (R-type) o da risultato (I-type) rd Quale registro fa da risultato (c’e’ solo nelle R-type)
shamt Shift amount: di quanto shiftare il risultato (in alcune op) funct Function code – variante dell’istruzione
imm Immediate value (16 bit): il valore del secondo operando
MIPS Instruction Set Architecture
Architettura degli elaboratori - 21 -
Tutte le istruzioni MIPS hanno lunghezza fissa (32 bit)
6 bits 5 bits
5 bits 5 bits
5 bits 6 bits
R-type
I-type
op rs rtop rs rt rd shamt funct
J-type
opimm address
Modi di indirizzamento MIPS / Formato delle istruzioni
Gli operandi sono tutti registri come in add $s1, $s2, $s3
Modalità di indirizzamento Register (direct) Op e funct indicano l’operazione da eseguire Shamt indica l’entità dello shift del risultato
R-type
op rs rt rd shamt functModi di indirizzamento MIPS / Formato delle istruzioni
Se Op indica una operazione matematica / logica
Gli operandi dell’operazione sono il registro rs e il valore immediato Il risultato viene memorizzato nel registro rt
Il valore immediato (16 bit) viene esteso a 32 bit
con modalità diverse a seconda dell’op, come sappiamo.
Se Op indica un salto condizionato (un «branch»):
I due registri rs e rt sono usati per decidere SE saltare (con criterio dipende da Op, es «se sono uguali fra loro») Se si salta, a PC viene sommato Imm (esteso in segno) x4 (quindi si salta di max 32K istruzioni in avanti o in indietro)
MIPS Instruction Set Architecture
Architettura degli elaboratori - 23 -
I-type
op rs rt immModi di indirizzamento MIPS / Formato delle istruzioni
Istruzioni di salto incondizionato (si salta sempre) Address (26 bit) indica dove saltare:
Vecchio PC:
Nuovo PC:
MIPS Instruction Set Architecture
Architettura degli elaboratori - 24 -
J-type
op addressX….X
XXXX 00
address
XXXX 00
primi 4 bit inalterati
MIPS: parole
(la struttura fondamentale!)
una parola (32 bit, 4 bytes, 1 word) può essere contenuta : in uno qualsiasi dei registri
in 4 byte consecutivi di memoria centrale
(spesso, allineati: il loro indirizzo base 2 termina con 00, 01, 10, 11) (in che ordine sono? Vedi endianness!)
e può rappresentare : un dato
(in virgola mobile, o in CP2, o naturale) una istruzione(MIPS!)
un indirizzodi memoria (fra i dato, o fra le istruzioni)
Il livello ISA
Architettura degli elaboratori - 25 -
NB: Una parola (in mem o un reg) non «sa» cosa rappresenta.
È il programmatore che lo deve sapere e la deve usare di conseguenza.
MIPS: mezze parole (assai meno usate)
Una mezza parola (half-word: 16 bit, 2 bytes) può essere contenuta In 2 byte consecutivi di memoria
(tipicamente …00e …01, cioè allineatamente) Nella seconda metà di un’istruzione
(di tipo I: è il suo campo imm16) In un registro
(la parola sta tutta nella seconda metà del registro.
Nella prima metà, si estende: tutti 0
o, nel caso di CP2: se numero negativo, tutti 1, se pos tutti 0) E può rappresentare
Un dato a 16 bit (CP2 o binario senza segno)
MIPS: i bytes
Un byte(8 bit) può essere contenuto In una sola casella di memoria
(indicizzata da 32 bit qualsiasi – «indirizzamento al byte») In un registro
(nei sui ultimi 8 bit. Nei primi 24, ci saranno tutti 0 o, nel caso di CP2 di un numero negativo, tutti 1) E può rappresentare
Un dato a 8 bit
(CP2: da -128 a +127; o binario: 0..255) Un carattere, per es di una stringa (attraverso tabella ASCII)
Etc (es il canale «rosso» di un pixel) Quindi un word può essere anche interpretato come 4 lettere consecutive in una stringa
Una stringa: una sequenza di bytes (spesso, terminata dal byte 0x00)
Il livello ISA
Architettura degli elaboratori - 27 -
Di nuovo:
l’interpretazione di un dato non sta da nessuna parte se non nella mente del programmatore Assembly umano o del compilatore
In MIPS le words sono di 32 bit
Scrivere su un registro attraverso computazioni:
Si scrivono tutti i 32 bits del registro (sovrascrivendo tutti i bit precedenti) Tutte le operazioni (logiche o matematiche)
sono sempre fra parole di 32 bit, con risultato a 32 bits (non ci sono op che scrivono solo su una parte di un registro) (ci sono op che scrivono due registri insieme: HI e LO) Scrivere su un registro attraverso letture da memoria:
Si scrivono tutti i 32 bits del registro (sovrascrivendo tutti i bit precedenti) Se si è letto meno di una parola (un half-word o un byte),
il dato letto viene esteso (con 0 o talvolta 1, come visto)
Scrivere su memoria
Di solito si scrivono 4 byte, ma è possibile scriverne anche solo 2 oppure 1 L’indirizzo dato si riferisce al primo byte scritto.
Se 4 (o 2), di solito allineati : questo indirizzo finisce per 00 (o per 0) (in molte implementazioni HW è molto più efficiente se lo sono)
Il livello ISA
Architettura degli elaboratori - 28 -
Registro 0: valore 0
Scelta (del MIPS):
il registro 0 contiene sempre 00000…0 (tutti zeri)
nota: la sequenza di 32 bit zero codifica il numero zero…
…sia come naturale senza segno,
…sia in CP2
…sia in virgola mobile (è uno dei valori speciali) come indirizzo di memoria,
codifica «indirizzo non valido» (anche detto NULL)
anche se tentiamo di scrivere sul registro 0, il suo valore non cambia
Il livello ISA
Architettura degli elaboratori - 29 -
Riassumendo: caratteristiche dell’ISA MIPS
Istruzioni di dimensione fissa a 32 bit (3 formati)
31 registri da 32 bit (R0 contiene zero) e 32 registri FP (e HI LO) Istruzioni aritmetiche: a due operandi (registri o immediate) Indirizzamento a 32 bit
Per leggere o scrivere in RAM
Tre tipi di salto:
Salto condizionato (branch):
Con «guardie» semplici: come confronto di un registro con zero, confronto di uguaglianza o disuguaglianza tra due registri.
Corto raggio (-/+ 32K istruzioni max) Salto non condizionato, a valore.
Lungo raggio (sostituisce tutti i bit del PC meno i primi 4) Salto non condizionato, a registro.
Ovunque in memoria (sostituisce l’intero PC con un registro dato)