Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1.1 - GENERALITA’
Il corso si occupa di calcolatori elettronici digitali, ossia di macchine in grado di eseguire
operazioni aritmetiche e logiche su dati rappresentati in forma discreta, costruite utilizzando
“prevalentemente” componenti elettronici. La definizione fa trasparire l’esistenza di
calcolatori non elettronici (per es. meccanici) e non digitali (i cosiddetti calcolatori analogici,
che operano su dati rappresentati in forma non discreta ma continua).
Quando si fa riferimento al loro uso in specifiche applicazioni i calcolatori elettronici digitali
sono anche denominati sistemi per l’elaborazione dell’informazione. Nel corso si usera’
per brevita’ il termine calcolatori.
L’architettura dei calcolatori a sua volta si occupa delle relazioni che intercorrono tra le
varie parti di un calcolatore.
I blocchi sono interconnessi per mezzo di opportuni collegamenti fisici. La figura illustra i
percorsi seguiti dai dati (che comprendono sia le istruzioni dei programmi sia i dati in senso
stretto richiesti dalla loro esecuzione) ed i collegamenti lungo i quali “viaggiano” i segnali di
controllo che gestiscono il corretto funzionamento del calcolatore.
Nei calcolatori attuali, al fine di ottenere una maggiore flessibilità del sistema, i collegamenti
fra i vari blocchi sono attuati tramite un BUS, il quale permette una maggiore modularità
(fig. 1-2).
Capitolo 1 1.1
Appunti di CALCOLATORI ELETTRONICI 1
UNITA’ CENTRALE
UNITA’ DI
CONTROLLO
SEGNALI DI
INDIRIZZI DATI CONTROLLO
DISPOSITIVI DISPOSITIVI
DI MEMORIA DI
INGRESSO USCITA
DATI DATI
Unità centrale
Dati, Controlli,
Indirizzi
BUS
Dispositivi Dispositivi
di Memoria di
ingresso uscita
Sono calcolatori molto specializzati, per lo piu’ con poca dotazione di software e progettati
per svolgere operazioni matematiche molto velocemente.
• Mainframe
Sono calcolatori molto potenti utilizzati per collegare molti utenti dotati di terminali con
interfaccia grafica semplice. Attualmente si tende ad utilizzarli prevalentemente per
gestire grosse basi di dati.
• Minicalcolatori
Sono calcolatori che gestiscono un certo numero di utenti (10 -100). Sono per lo piu’
utilizzati come server e gli utenti collegati hanno una interfaccia grafica di tipo più
raffinato che nel caso dei mainframe.
• Workstation
Sono minicalcolatori dedicati ad un solo utente e dotati di un’interfaccia grafica ad alte
prestazioni.
• Personal computer
Sono calcolatori simili alle workstation ma con prestazioni ridotte.
T e m p o d i r isp o sta
TA TB TC
U1 U2 U3 U1 U2 U3 U1 U2 U3
T em po
In iz io o p e r a z io n e F in e o p e r a z io n e
r ic h ie sta d a ll’u te n te 1 r ic h ie sta d a ll’u te n te 1
T A + T B + T C = T em p o d i esecu z io n e
Capitolo 1 1.3
Appunti di CALCOLATORI ELETTRONICI 1
L’ordine di esecuzioni delle funzioni richieste dagli utenti è gestito da un programma che è
eseguito dal sistema di elaborazione e che viene chiamato sistema operativo (fig. 1- 4).
Il sistema operativo interviene alla fine dell’intervallo di tempo dedicato ad un utente per
predisporre l’esecuzione delle funzioni richieste dal successivo utente nell’intervallo di tempo
a lui dedicato. Il sistema operativo, inoltre, interviene anche all’interno dell’intervallo
dedicato ad un utente, ed in particolare viene richiamato dal programma utilizzato
dall’utente per svolgere funzioni particolari, per es. trasferimento dati con la memoria,
gestione di situazioni di errore.
Nel passaggio da un utente al successivo il sistema operativo deve “salvare” tutte le
informazioni che occorrono per poter far riprendere l’elaborazione interrotta dal punto al
quale era arrivata, senza cioe’ ripartire da capo, e ricuperare tutte le informazioni che
servono per far ripartire l’elaborazione successiva. Questa operazione viene denominata
context switching (cambio di contesto).
Si noti che quando “gira” il sistema operativo l’esecuzione del programma utente è sospesa
e viceversa (non girano contemporaneamente).
U1 U2 U3 U1 U2 U3
T em po
UTENTE 2
U 3
T e m p o u tiliz z a to d a l
siste m a o p e r a tiv o
Dati due calcolatori, A dotato di prestazione PA (e tempo di esecuzione TA per uno specifico
programma) e B dotato di prestazione PB (e tempo di esecuzione TB per lo stesso
programma), se PA >PB (=> TA < TB ) è possibile definire la percentuale di miglioramento
Capitolo 1 1.4
Appunti di CALCOLATORI ELETTRONICI 1
Risulta anche
Sul tema della prestazione e’ molto importante e utile la legge di Amdahl che afferma che il
miglioramento della prestazione che si ottiene in un calcolatore accelerando un qualsiasi
sottoinsieme delle operazioni che esso deve compiere è proporzionale alla percentuale di
tempo in cui tale sottoinsieme è utilizzato. In formula, se Tes.iniziale e’ il tempo di esecuzione
prima della accelerazione e Tes.finale e’ il tempo di esecuzione ottenuto grazie alla
accelerazione, si ha :
dove:
• Tclock = periodo di clock della macchina
E’ definito dal dispositivo (clock) che genera segnali periodici usati per la
sincronizzazione del funzionamento e dipende dalla tecnologia e
dall’organizzazione del sistema; ovviamente e’ l’inverso della frequenza del clock.
Attualmente ha valori espressi in nanosecondi (ns).
• M = numero di tipi di istruzioni disponibili sul calcolatore (aritmetiche, salti, ecc.); esse
costituiscono il set di istruzioni
• CPIi = numero di periodi di clock richiesti per l’esecuzione delle istruzioni di tipo i
Capitolo 1 1.5
Appunti di CALCOLATORI ELETTRONICI 1
Ogni modifica al set di istruzioni di un calcolatore al fine di farle diventare più complesse
porta generalmente alla necessità di aumentare i CPIi, e viceversa. Tenendo invece fisso il set
di istruzioni, ogni intervento che porta ad aumentare i CPIi generalmente diminuisce il Tclock
.
E’ chiaro come agire sulla tecnologia e sulla qualità dei compilatori per migliorare Tesecuzione
ma sui restanti aspetti bisogna trovare i compromessi migliori. La filosofia progettuale alla
base dei calcolatori RISC (= Reduced Instruction Set Computer) è quella di avere un set di
istruzioni molto semplici che mantengono basso il CPIi a scapito del valore di Ni, mentre
quella dei calcolatori CISC (=Complex Instruction Set Computer) è l’opposta. Attualmente vi
e’ una forte tendenza a progettare calcolatori RISC.
Il MIPS è una unita’ di misura che è talvolta usata per valutare le prestazioni di un sistema.
Esso corrisponde ad un milione di istruzioni eseguite al secondo ed il suo valore si puó
quindi calcolare utilizzzando un valore medio di CPI con la formula:
___
MIPS = (frequenza del clock in Hz)/(106·CPI)
Il valore ottenuto con questa formula e’ peraltro generico, ossia non applicabile a nessun
caso specifico. Infatti non considera parecchi elementi: non tiene conto per es. delle
possibilità offerte dal set di istruzioni (quanto più il set di istruzioni di una certa macchina è
potente tanto più è possibile accorciare i programmi che vengono eseguiti su di essa), e delle
percentuali delle diverse istruzioni all’interno di programmi reali (una macchina più veloce
in un programma può essere più lenta in un altro).
___
Se avessimo, per es., un calcolatore con frequenza di clock di 800 MHz e CPI=2, i MIPS
corrispondenti sarebbero
Per caratterizzare i supercalcolatori si usa spesso un’altra unita’ di misura, il megaflop, che
rappresenta i milioni di operazioni in virgola mobile eseguite al secondo. E’ una misura che è
significativa se si utilizzano programmi nei quali la maggior parte delle operazioni sono di
tipo virgola mobile (si vedano al riguardo i paragrafi 2.6 e 2.7), come accade appunto spesso
nelle applicazioni dei supercalcolatori.
Compilatori
Passaggio
Passaggio Linguaggio Assembler diretto
diretto
Assemblatore
Linguaggio Macchina
Sistema Operativo
Circuiti Logici
Capitolo 1 1.7
Appunti di CALCOLATORI ELETTRONICI 1
I livelli relativi all’hardware verranno descritti piu’ avanti, parlando della unita’ di controllo.
L’unita’ centrale contiene vari elementi, i principali dei quali sono riportati nella fig. 1-6. Le
loro funzioni sono le seguenti:
PC (program counter o contatore di programma)
Si tratta di un registro che contiene l’indirizzo della locazione di memoria in cui si trova la
successiva istruzione da eseguire.
IR (instruction register o registro di istruzione)
Si tratta di un registro che contiene l’istruzione da eseguire.
MAR (memory address register o registro di indirizzamento della memoria),
MDR (memory data register o registro dati per la memoria)
Sono registri che hanno rispettivamente il compito di inviare all’esterno o ricevere
dall’esterno dell’ unita’ centrale il valore dell’indirizzo e del dato coinvolti nei trasferimenti
tra memoria e unita’ centrale.
RF (register file o archivio di registri)
Insieme di registri utilizzati per memorizzare all’interno dell’unita’ centrale risultati
temporanei e informazioni di controllo, allo scopo di diminuire il numero di accessi alla
memoria esterna e di velocizzare il processo di elaborazione. In generale sono denotati con
la lettera R ed R1 è per es. il registro identificato dal numero 1 all’interno di RF.
A, B, P (accumulatori)
Capitolo 1 1.8
Appunti di CALCOLATORI ELETTRONICI 1
Si tratta di registri il cui contenuto, al contrario del contenuto dei registri sopra elencati,
non può essere modificato dal programmatore mediante istruzioni; essi sono cioe’
“invisibili”, al programmatore e svolgono la funzione di ospitare operandi e risultati
durante l’esecuzione delle operazioni dell’ALU.
PSW (processor status word o parola di stato del processore)
Si tratta di un registro che contiene bit che caratterizzano lo stato dell’unita’ centrale.
INDIRIZZI
PC Program Counter
RF
Register File
B
READ, WRITE
u
s
I A B Accumulatori
UNITA’ DI
CONTROLLO n
t
ACK
e
r ALU
n
o
P
Accumulatore
IR
Instruction
Register
MDR Memory Data Register
DATI
Capitolo 1 1.9
Appunti di CALCOLATORI ELETTRONICI 1
destinazione
sorgente e
destinazion
⎧Il registro PC, tramite il bus , trasferisce l' indirizzo di memoria da caricare al MAR
⎪Viene inviato, verso l' esterno, il segnale di lettura (READ).
⎪
Fase di Fetch ⎨
⎪L' unità di controllo verifica la presenza del segnale ACK : se c' e' ACK si abilita MDR
⎪⎩ a trasferire, tramite il bus, l' istruzione in IR e si prosegue; altrimenti si attende ACK
⎧Il dato presente sul registro R 2 viene trasferito, tramite il bus, in A.
⎪Il dato presente sul registro R viene trasferito, tramite il bus, in B.
⎪ 3
Fase Execute⎨
⎪L' ALU esegue l' addizione e pone il risultato in P.
⎪⎩Il dato presente in P viene trasferito, tramite il bus, nel registro R 1 .
Le unita’ centrali di tipo RISC hanno poche fasi molto semplici per ogni istruzione, mentre le
CISC hanno molte fasi abbastanza complesse. E’ inoltre opportuno che le istruzioni siano
tutte della stessa lunghezza (stesso numero di bit), altrimenti la struttura interna della CPU
si complica. Le unita’ centrali RISC utilizzano istruzioni a lunghezza fissa, contrariamente
alle unita’ centrali di tipo CISC che, soprattutto per i vincoli posti dalla necessita’ di
preservare la compatibilità con il passato, utilizzano istruzioni a lunghezza variabile.
Capitolo 1 1.10
Appunti di CALCOLATORI ELETTRONICI 1
16 bit
Figura 1-7. Espansione del codice operativo
Come si ricava dalla figura:
• Per le istruzioni a 3 operandi esistono 15 codici operativi possibili: infatti si possono
utilizzare i codici da 0000 a 1110 mentre il codice 1111 non può essere usato perche’, nel
caso di istruzioni con meno di 3 operandi i primi 4 bit valgono 1111 e i secondi 4
diventano una prosecuzione del codice operativo;
• Per le istruzioni a 2 operandi il codice operativo e’ costituito dai primi 8 bit: sono pertanto
15 i codici possibili, da 1111 0000 a 1111 1110, e la configurazione 1111 dei secondi 4
bit serve per espandere ulteriormente il codice operativo;
• Per le istruzioni a 1 operando il codice operativo e’ costituito dai primi 12 bit: 15 codici
sono i codici possibili, da 1111 1111 0000 a 1111 1111 1110, sempre per consentire la
successiva espansione;
• Per le istruzioni senza operandi il codice operativo e’ costituito da tutti e 16 i bit: 16 sono i
codici possibili, da 1111 1111 1111 0000 a 1111 1111 1111 1111.
Complessivamente si arriva a 61 istruzioni (15+15+15+16). Questo tipo di codifica richiede
pero’ un’unita’ centrale più complessa che nel caso precedente di fig. 1-6.
Capitolo 1 1.11
Appunti di CALCOLATORI ELETTRONICI 1
CPU MEMORIA
I/O
Caso A
CPU MEMORIA
I/O
Caso B
Capitolo 1 1.12
Appunti di CALCOLATORI ELETTRONICI 1
Indirizzamenti Assoluti
• Immediato
Nell’istruzione viene fornito il valore dell’operando da utilizzare (il simbolo # indica il modo
di indirizzamento immediato). In effetti, quindi, non si ricorre ad alcun operando.
Esempi :
JMP # 153 (salto all’indirizzo 153)
LOAD R1, # 124 (carica nel registro R1 il numero 124)
• Diretto
Nell’istruzione viene fornito l’indirizzo dove è posto l’operando.
Esistono due modi di indirizzamento di tipo diretto: in memoria e in register file. Gli
esempi che seguono per semplicita’ prevedono istruzioni con due operandi ma la modalita’
di indirizzamento e’ applicabile anche al caso di tre operandi.
Esempi:
- in memoria: LOAD R1, 100
il contenuto della cella di memoria di indirizzo 100 viene trasferito nel registro R1;
se con M(x) si intende il contenuto della posizione di memoria M di indirizzo x si
puo’ scrivere: R1 <= [M(100)]
- in register file: ADD R1, R2
il risultato dell’operazione di addizione eseguita sui contenuti di R1 ed R2 viene
posto nel registro R1, ossia R1 <=[R1]+[R2]
LOAD R1, R2
in R1 si inserisce il contenuto di R2 ossia R1 <= [R2]
• Indiretto
Nell’istruzione viene fornito l’indirizzo dove è posto l’indirizzo dell’operando.
Esistono due modi di indirizzamento indiretto: su memoria e su registro (le parentesi
rotonde indicano la modalita’ di indirizzamento indiretto). Anche in questo caso gli esempi
prevedono due operandi ma la modalita’ di indirizzamento e’ applicabile a tre operandi; va
rilevato inoltre che la modalita’ di indirizzamento indiretto puo’ essere, in linea di
principio, utilizzata per ogni operando.
Esempi:
- su memoria LOAD R1 , (200)
inserisce, fig. 1-9, in R1 il contenuto della cella all’indirizzo di memoria indicato
nella cella 200; ossia R1 <= [M([200])]
- su registro LOAD R1, (R5)
inserisce in R1 il contenuto dell’indirizzo di memoria individuato da R5, ossia
R1 <= [M([R5])]
Capitolo 1 1.13
Appunti di CALCOLATORI ELETTRONICI 1
MEMORIA
LOAD R1, (200)
200 2500
2500 4
R1 = 4
• Autoincremento
Esempi:
LOAD R1, (R5) +
il contenuto del registro R5, dopo essere stato utilizzato per
l’indirizzamento indiretto, viene incrementato di 1
LOAD R1, (R5) -
come il caso precedente, solo che il contenuto del registro R5 viene
decrementato di 1
LOAD R1, + (R5)
in questo caso l’incremento viene fatto prima di utilizzare il registro R5,
cioè l’indirizzamento indiretto si ha sul valore dato dal contenuto di R5
incrementato di 1
LOAD R1, - (R5)
come il caso precedente, solo che il contenuto del registro R5 viene
decrementato di 1
Indirizzamento relativi
Questo tipo di indirizzamento si rivela utile nel caso si voglia operare su strutture dati a
matrice od a vettore. Se, ad esempio, si ha un vettore di dati che parte dall’indirizzo R2
(fig. 1-10) l’i-esimo elemento di questo vettore è in (R2 +i-1): se si pone RI = i-1 è possibile
operare facilmente su ogni elemento posto nella struttura solo che si aggiorni via via il
valore di RI.
Capitolo 1 1.14
Appunti di CALCOLATORI ELETTRONICI 1
R2
R2 + RI vi
In caso di affiancamento il registro base indica la parte più alta (i bit piu’ significativi)
dell’indirizzo effettivo, quello usato per indirizzare la memoria fisica, mentre l’indirizzo
presente nell’istruzione individua la parte più bassa dell’indirizzo effettivo. In pratica il
registro base ha la funzione di individuare una determinata zona (sezione) nello spazio
indirizzabile, mentre con l’indirizzo nell’istruzione è possibile puntare al singolo indirizzo
all’interno della sezione.
Utilizzando per esempio la struttura di registri della fig. 1-11 e supponendo che ogni
indirizzo contenga 1 byte e’ cosi’ possibile indirizzare 4 Gbyte (= 232 byte): si definiscono
infatti 216 (= 64 K) sezioni, distinte ciascuna dal valore assunto dal registro base, ed
ognuna di esse e’ composta da 64 Kbyte (fig. 1-12).
Si ricordi che in campo informatico si usa il simbolo K (maiuscolo) per indicare un
moltiplicatore di valore 1024 ma si usano gli stessi simboli del Sistema Internazionale di
unita’ per i moltiplicatori superiori, con significato pero’ diverso. Cosi’ per esempio M sta
per 1048576, e non 106, e G sta per 1073741824, e non 109.
Capitolo 1 1.15
Appunti di CALCOLATORI ELETTRONICI 1
64 K
Sezione (=64 Kbyte)
sezioni
da 64
Kbyte
In alcuni calcolatori si possono trovare usati insieme sia il registro base sia il registro indice:
in tal caso l’indirizzo effettivo si ottiene come somma di tre elementi. La fig. 1-13
rappresenta un possibile meccanismo di utilizzazione di registro base e registro indice nella
definizione dell’indirizzo effettivo.
REGISTRO BASE
REGISTRO INDICE
INDIRIZZO NELL’ISTRUZIONE
INDIRIZZO EFFETTIVO
I moderni calcolatori sono realizzati con registri che contengono un certo numero di byte
(tipicamente 4 byte ossia 32 bit) e le operazioni sono eseguite su tale insieme di byte. Questo
insieme di byte e’ detto parola. Teoricamente ogni byte e’ indirizzabile ma in ogni operazione
di lettura e scrittura, anche se viene fornito l’indirizzo di un byte, sono in realta’ coinvolti
tutti i byte di una parola: l’indirizzo e’ quindi quello del primo dei byte.
Premessa questa definizione, si esamineranno le modalita’ di memorizzazione dei vari tipi di
dati che un calcolatore puo’ trattare.
• Numeri interi
Si rappresentano in base 2 (sistema binario). Sono anche detti “numeri in virgola fissa” (in
inglese “fixed point”) in quanto la virgola e’ come se cadesse sempre alla destra del bit
Capitolo 1 1.16
Appunti di CALCOLATORI ELETTRONICI 1
meno significativo. Il numero di bit utilizzati è uguale o doppio dei bit della parola del
calcolatore.
• Numeri con virgola
Sono anche detti “numeri in virgola mobile” (in inglese “floating point”) in quanto
trascrivendone il valore nel modo tradizionale la virgola puo’ cadere in un punto qualsiasi
della sequenza di bit. Un numero con virgola e’ espresso come:
Capitolo 1 1.17
Appunti di CALCOLATORI ELETTRONICI 1
M E M O R IA
S T R I
S im bolo
dello
N G A b
s pazio
D I b C
A R A T
S tringa Im paccata
MEMORIA
Prossimo
carattere
Stringa Linkata
Capitolo 1 1.18
Appunti di CALCOLATORI ELETTRONICI 1
MEMORIA
S T R I
N G A b
PUNTATORE
D I b C
A R A T
PUNTATORE
Stringa a blocchi
con puntatori
• Vettori
Il modo più semplice per indirizzare gli elementi di un vettore consiste nell’utilizzare il
registro indice. Indicando un elemento del vettore come ai, con l ≤ i ≤ u, si avrà che
l’indirizzo dove esso è posto varrà:
IND(ai)= start + (i - l) = k + i
dove start e’ l’ indirizzo dove è posto il primo elemento del vettore e k e’ una costante.
MEMORIA
Inizio (start)
Indice
Vettore
• Matrici
∗ Matrice a 2 dimensioni
Supponendo che ogni elemento occupi una posizione di memoria, l’elemento generico
della matrice si indica con aij dove gli indici i, j sono tali che:
li ≤ i ≤ ui e lj ≤ j ≤ uj.
Vi sono uj - lj +1 sezioni, ciascuna dedicata ad una colonna, ed in ogni sezione ci sono ui -
li +1 elementi, che corrispondono alle diverse righe (fig. 1-14).
L’indirizzo di aij si ha con la formula:
IND(aij )= start + (ui - li +1)·(j -lj)+ (i - li) = k + (k1 · j)+ i
con start, k, k1 costanti.
Esempio. Data una matrice a con 4 righe e 3 colonne in cui 0≤ i ≤3 e 1≤ j ≤3, con
start=100, il secondo elemento della terza riga si trova all’indirizzo
IND(a3,2) = 100 + (3-0+1)·(2-1) + (3-0) = 107
come indicato nel diagramma della pagina seguente (fig. 1-14).
Capitolo 1 1.19
Appunti di CALCOLATORI ELETTRONICI 1
MEMORIA
Start
Prima sezione MEMORIA
formata da
ui - li + 1 100 (start) a0,1 ⎫
uj - lj + 1 elementi a1,1 ⎪
(tutti gli ⎬ Colonna 1
sezioni,
elementi della a2,1 ⎪
ciascuna ⎭
formata da prima a3,1
colonna)
ui - li + 1 a0,2 ⎫
elementi Sezione a1,2 ⎪
successiva ⎬ Colonna 2
a2,2 ⎪
107 a3,2, ⎭
a0,3 ⎫
a1,3 ⎪
⎬ Colonna 3
a2,3 ⎪
a3,3 ⎭
∗ Matrice a 3 dimensioni
Sempre supponendo che ogni elemento occupi una posizione di memoria, il generico
elemento della matrice si indica con aijk, con i, j, k tali che:
li ≤ i ≤ ui , l j ≤ j ≤ u j e l k ≤ k ≤ u k .
Con le stesse considerazioni fatte in precedenza si avrà:
IND(aijk)=start+(ui -li +1)·(uj -lj +1)·(k-lk)+(ui -li +1)·(j -lj )+(i -li )= c+c1·k+c2·j+i
Al fine di rendere l’accesso agli elementi della matrice più veloce ed agevole, a scapito però
di un maggiore impiego di memoria, è possibile utilizzare dei puntatori ed impiegare una
struttura detta ad indicizzazione marginale, rappresentata in fig. 1-15.
Nel caso di figura si ha 0 ≤ i ≤ 2 , 0 ≤ j ≤ 1 e 0 ≤ k ≤ 3 , cioè la matrice è composta da 24
elementi, ma la indicizzazione marginale richiede 36 posizioni di memoria per
rappresentarla. Le tabelle T1, T2, T3, T4 e T5 contengono solo puntatori.
Se, per es., si e’ inserito in R1 l’indirizzo iniziale start e si usa il registro R2 per
l’indirizzamento, volendo estrarre l’elemento a2,1,3 si devono inserire ordinatamente 2 in
Ri, 1 in Rj, 3 in Rk ed eseguire le seguenti operazioni:
Grazie all’utilizzo dei puntatori le tabelle T1,...,T5 possono essere messe in qualsiasi parte
della memoria.
Il vantaggio, rispetto alla rappresentazione precedente, è che per determinare l’indirizzo
della posizione di memoria che contiene il componente cercato non bisogna effettuare dei
calcoli (due moltiplicazioni e tre addizioni) ma e’ sufficiente eseguire prelievi successivi.
Capitolo 1 1.20
Appunti di CALCOLATORI ELETTRONICI 1
Numero frazionario: N’ = ( 0 , n-1 ..... n-m )R (ossia per un numero di m cifre in base R)
Complemento a R di N’ : C’R = 1 - N’
Complemento a R-1 di N’: C’R-1 = ( 1 - R-m ) - N’ = C’R - R-m
Nel caso R=2 si possono ricavare due semplici regole pratiche per ottenere i complementi:
per il complemento ad 1 di un numero basta sostituire nel numero del quale si vuole trovare
il complemento ogni 1 con 0 ed ogni 0 con 1;
Capitolo 1 1.21
Appunti di CALCOLATORI ELETTRONICI 1
a000
a100
a200
i
a010
a110
a210
i
a001
[0]
[1] a101
j T2 a201
start [0] i
[0]
[1] [1]
a011
[2]
[3] j T3 a111
a211
k [0]
T1
[1] i
j T4 a002
a102
[0] a202
[1]
i
j T5
a012
a112
a212
i
a003
a103
a203
a013
a113
a213
i
Figura 1-15. Esempio di indicizzazione marginale
Capitolo 1 1.22
Appunti di CALCOLATORI ELETTRONICI 1
Si immagini di rappresentare i numeri interi con i formati di fig. 1-16 utilizzando 8 bit per
ciascun numero.
Numeri positivi
O Valore assoluto
Numeri negativi
1 Complemento a 1 o 2
0 0 0 0 0 0 0 0 (rappresentazione positiva)
1 1 1 1 1 1 1 1 + (complemento a 1)
1
0 0 0 0 0 0 0 0
Per analizzare l’impiego dei complementi nelle addizioni algebriche si fara’ riferimento, negli
esempi che seguono, ad una rappresentazione che impiega 5 bit, il piu’ significativo per il
segno: sarà possibile, quindi, trattare oltre allo 0 numeri interi positivi da 1 a 15 e numeri
interi negativi da -15 a -1 nel caso di rappresentazione con complementi a 1 e da -1 a -16
nel caso di rappresentazione con complementi a 2.
La somma viene effettuata come al solito iniziando dal bit più a destra e sommando i bit
corrispondenti nei due addendi. L’eventuale riporto generato è portato a sinistra di una
posizione, come avviene nell’usuale somma decimale. Nell’aritmetica in complemento a 1
l’eventuale riporto generato dall’addizione sul bit più a sinistra è aggiunto al bit più a destra.
1 1 1 0 1 +
1 1 1 0 0 =
1 1 1 0 0 1 +
1 =
1 1 0 1 0
+11 -----> 0 1 0 1 1
+6 -----> 0 0 1 1 0
0 1 0 1 1 +
0 0 1 1 0 =
1 0 0 0 1
Il risultato è -15 dec ed è errato: infatti la somma avrebbe dovuto fornire un risultato al di
fuori dell’intervallo rappresentabile (+17). In situazioni di questo tipo si parla di errore di
overflow.
Il risultato, quindi, è +13 ed e’ errato perche’ anche in questo caso, come nel precedente, c’è
overflow.
1.10 – SCALAMENTI
Dato un numero in base R, scalarlo verso sinistra di una posizione equivale a moltiplicarlo
per R mentre scalarlo verso destra, sempre di una posizione, equivale a dividerlo per R.
Capitolo 1 1.25
Appunti di CALCOLATORI ELETTRONICI 1
Nel caso del sistema binario (R=2) lo scalamento verso sinistra di un numero lo moltiplica
per 2, e comporta l’inserimento di 0 nella posizione che si libera. Cosi’ per es.
00110 (che corrisponde a 6 in base 10)
dopo lo scalamento diventa
001100 (che corrisponde a 12 in base 10).
La regola di esecuzione dello scalamento si complica se si deve tenere conto del segno,
dell’impiego eventuale di complementi e della condizione di overflow che si puo’ verificare
avendo a disposizione un numero prestabilito di cifre per rappresentare i numeri.
Capitolo 1 1.26