Rappresentazione dell’informazione
•
•
•
•
•
•
•
•
Codifica dei numeri
Rappresentazioni in base 2, 8, 10 e 16
Rappresentazioni M+S, C1 e C2
Algoritmi di conversione di base
Algoritmi di somma, moltiplicazione e divisione
Overflow
Numeri in virgola fissa e mobile, standard IEEE754
Codifica ASCII
Istruzioni e linguaggio macchina
•
I linguaggi macchina sono composti da istruzioni macchina,
codificate in binario, con formato ben definito
• processori diversi hanno linguaggi macchina simili
• scopo: massimizzare le prestazioni
• veloce interpretazione da parte del processore
• efficace traduzione/compilazione di programmi ad alto
livello
•
Linguaggi molto più primitivi dei linguaggi ad alto livello
• controllo del flusso poco sofisticato (non ci sono for, while, if)
Linguaggi molto restrittivi
• istruzioni aritmetiche con numero fisso di operandi
•
Linguaggio macchina e astrazioni
Istruzioni macchina e codifica binaria
Le istruzioni macchina, ovvero il linguaggio che la
macchina (processore) comprende, hanno bisogno
anch’esse di essere codificate in binario
• Devono essere rappresentate in binario in accordo ad
un formato ben definito
Il linguaggio macchina è molto restrittivo
• il processore che studieremo sarà il MIPS, usato da
Nintendo, Silicon Graphics, Sony...
• l’ISA del MIPS è simile ad altre architetture di CPU
sviluppate dal 1980
• le istruzioni MIPS operano su particolari supporti di
memoria denominati registri, la cui lunghezza è di 32 bit
= 4 Byte
Informazione e memoria
L’informazione, opportunamente codificata, ha bisogno di essere
memorizzata nel calcolatore per essere utilizzata.
In particolare i programmi (e i dati) devono essere trasferiti nella
memoria principale del computer per l’esecuzione.
Organizzazione della memoria:
• sequenza di celle (o locazioni) di lunghezza prefissata
• ogni cella è associata con un numero (chiamato indirizzo)
• se un indirizzo è espresso come numero binario di m bit
• sono indirizzabili 2m celle diverse (da 0 a 2m -1)
• indirizzi consecutivi → celle contigue
• nelle memorie attuali, ogni cella di memoria è lunga
23= 8 bit = 1 Byte
(memoria indirizzabile al Byte)
Stored Program
•
•
•
•
•
•
Istruzioni sono stringhe di bit
Programmi: sequenze di istruzioni
Programmi (come i dati) memorizzati in memoria
La CPU legge le istruzioni dalla memoria (come i dati)
Ciclo macchina (ciclo Fetch – Decode – Execute)
• La CPU legge (fetch) l’istruzione corrente (indirizzata da un
registro Program Counter = PC), e la pone in un registro
speciale interno
• La CPU usa i bit dell’istruzione per "controllare" le azioni da
svolgere, e su questa base esegue l’istruzione
CPU determina la “prossima” istruzione e ripete il ciclo
Istruzioni Aritmetico/Logiche
•
•
•
•
•
•
Le istruzioni aritmetiche del MIPS permettono solo
operazioni elementari (add, sub, mult, div) tra coppie di
operandi a 32 bit
Le istruzioni logiche (and, or) sono bit a bit
Tutte le istruzioni hanno 3 operandi
L’ordine degli operandi è fisso
L’operando destinazione in prima posizione
Esempio
• Codice C: A = B + C
• Codice Assembler: add $9, $17, $18
• Il compilatore associa le variabili ai registri
Codifica in formato R-Type
esempio
add $9, $17, $18
semantica
$9 = $17 + $18
codifica
000000 10001 10010 01001 00000 100000
op
op:
rs
rt
rd
shamt
funct
operazione base dell’istruzione
rs: registro del primo operando
rt: registro del secondo operando
rd: registro destinazione, che contiene il risultato dell’operazione
shamt: utilizzato per istruzioni di shift; posto a zero per le altre istruzioni
funct: seleziona la specifica variante dell’operazione base definita nel campo op
Informazione e memoria
I Byte consecutivi sono organizzati in gruppi
• ogni gruppo è una Word (parola di memoria)
• processori a 64 bit (Word di 8 Byte) e a 32 bit (Word di 4
Byte)
• le istruzioni aritmetiche operano su Word
• la dimensione della Word stabilisce qual è il massimo
intero rappresentabile
Istruzioni di trasferimento dati
•
•
•
•
•
•
Leggere dalla memoria su registro: lw (load word)
Scrivere da registro alla memoria: sw (store word)
Esempio:
A è un array di
numeri interi
• Codice C: A[8] += h
• Codice Assembler: lw $15, 32($4)
add $15, $5, $15
sw $15, 32($4)
displacement
Indirizzo di memoria &A[8] → $4 + 32
Nota: sw ha la destinazione come ultimo operando
Nota: le istruzioni aritmetiche operano su registri, non su
celle di memoria.
Codifica in formato I-Type
esempio
lw $9, 32($18)
semantica
$9 = memory[$18] + 32
codifica
000000 10010 01001 0000000000100000
op
rs:
rs
rt
16-bit constant
registro della locazione di memoria
rt: registro destinazione
16-bit constant: operando immediato (displacement)
Questo formato codifica anche operazioni aritmetico-logiche
con valori immediati, i.e., costanti: add $15, $5, #66
Istruzioni di controllo del flusso
•
•
•
Il flusso di esecuzione è normalmente sequenziale
Le istruzioni di controllo cambiano la prossima istruzione
da eseguire
Istruzioni di salto condizionato
branch if equal
beq $4, $5, LABEL
•
Esempio
if (i == j)
h = i + j;
...
•
branch if not equal
bne $6, $5, LABEL
Formato I-Type
bne $4, $5, LABEL
add $19, $4, $5
LABEL: ...
Istruzioni di controllo del flusso
•
Salto non condizionato
j LABEL
•
Esempio
if (i != j)
h = i + j;
else
h = i – j;
...
•
LAB1:
LAB2:
beq $4, $5, LAB1
add $3, $4, $5
j LAB2
sub $3, $4, $5
...
Formato J-Type
op
26-bit constant
Istruzioni di controllo del flusso
•
•
Come facciamo a esprimere “Salta se minore o uguale di”?
In MIPS c’è un’istruzione aritmetica, set-if-less-than
Istruzione
slt $10, $4, $5
•
Formato R-Type
Significato
if ($4 < $5)
$10 = 1;
else
$10 = 0;
Riassunto
add $4, $5, $6
sub $4, $5, $6
lw $4, 100($5)
sw $4, 100($5)
bne $4, $5, LABEL
beq $4, $5, LABEL
j LABEL
slt $4, $5, $6
$4 = $5 + $6
$4 = $5 – $6
$4 = Memory[$5+100] Memory[$5+100] = $4
Se $4 ≠ $5, prossima istr. caricata dall’indirizzo LABEL
Se $4 = $5, prossima istr. caricata dall’indirizzo LABEL
Prossima istr. caricata dall’indirizzo LABEL
$4 = ($5 < $6) ? 1 : 0
Algebra e circuiti elettronici
•
•
•
I computer operano con segnali elettrici con valori di
potenziale discreti
Sono considerati significativi soltanto due potenziali (high/
low); i potenziali intermedi, che si verificano durante le
transizioni di potenziale, non vengono considerati
L’aritmetica binaria è stata adottata proprio perché i bit
sono rappresentabili naturalmente tramite elementi
elettronici in cui siamo in grado di distinguere i 2 stati del
potenziale elettrico (high/low)
Segnale binario
Algebra e circuiti elettronici
Il funzionamento dei circuiti elettronici può essere
modellato tramite l’Algebra di Boole
• solo 2 valori:
•
•
valore logico True (1 o asserted) → livello di
potenziale alto
•
valore logico Falso (0 o deasserted) → livello
di potenziale basso
operazioni logiche Booleane: somma (OR), prodotto (AND) e inversione
(NOT) logica
• OR (A+B): risultato uguale ad 1 (true) se almeno un input è 1 (true)
• AND (A∙B): risultato uguale ad 1 (true) solo se tutti gli input sono 1 (true)
•
NOT (~A): risultato uguale all’inverso dell’input (0 → 1 oppure 1 → 0)
Blocco logico
•
circuito elettronico con linee (fili) in input e output
•
possiamo associare variabili logiche con le varie linee in input/output
• i valori che le variabili possono assumere sono quelli dell’Algebra di Boole
I0
O0
blocco logico
I1
O1
•
il circuito calcola una o più funzioni logiche, ciascuna esprimibile tramite una
combinazione di operazioni dell’Algebra di Boole sulle variabili in input
•
Circuito combinatorio
•
•
senza elementi di memoria - produce output che dipende funzionalmente solo
dall’input
Circuito sequenziale
•
con elementi di memoria - produce output che dipende non solo dall’input ma
anche dallo stato della memoria
Tabelle di verità
•
•
•
Una funzione logica è completamente specificata tramite
la sua tabella di verità
Dati n input bit, il numero di configurazioni possibili degli
input, ovvero il numero di righe della tabella di verità, è 2n
per ogni bit in output, la tabella contiene una colonna,
con un valore definito per ognuna delle combinazioni dei
bit in input
A
0
0
0
0
1
1
1
1
B
0
0
1
1
0
0
1
1
C
0
1
0
1
0
1
0
1
D
1
0
1
0
0
0
1
0
E
0
1
0
0
0
0
1
0
Equazioni logiche
•
•
•
Una funzione logica completamente specificata tramite una equazione logica
dell’algebra di Boole
Esempio: E = ~A~BC + AB~C
• bit in input e output rappresentati tramite variabili logiche (con valori 0 o 1)
• input combinati tramite le operazioni di somma (OR), prodotto (AND) e
complementazione (NOT) logica dell’algebra di Boole
Proprietà
• Identità:
A+0=A
A∙1=A
• Nullo:
A+1=1
A∙0=0
• Idempotente:
A+A=A
A∙A=A
• Inverso:
A+(~A)=1
A∙(~A)=0
• Commutativa:
A+B=B+A
A∙B=B∙A
• Associativa:
A+(B+C)=(A+B)+C
A∙(B∙C)=(A∙B)∙C
• Distributiva:
A∙(B+C)=(A∙B)+(A∙C)
A+(B∙C)=(A+B)∙(A+C)
• DeMorgan:
~(A+B)=(~A)∙(~B)
~(A∙B)=(~A)+(~B)
Funzioni e tabelle AND, OR, NOT
•
•
•
OR (A+B): risultato uguale ad 1 (true) se almeno un
input è 1 (true)
AND (A∙B): risultato uguale ad 1 (true) solo se tutti gli
input sono 1 (true)
NOT (~A): risultato uguale all’inverso dell’input (0→1
oppure 1→0)
Scarica

slides