collana di istruzione scientifica
serie di informatica
Hamacher_Interno.indd 1
23/02/12 08.47
Al lettore
La realizzazione di un libro comporta costi variabili (carta, stampa, legatura) e costi
fissi, cioè indipendenti dal numero di copie stampate (traduzione, preparazione degli
originali, redazione, composizione, impaginazione). I fotocopiatori possono contenere
il prezzo perché, oltre a non pagare i diritti d’autore, non hanno costi fissi.
Ogni fotocopia, d’altra parte, riducendo il numero di copie vendute dall’editore,
aumenta l’incidenza dei costi fissi a copia e costringe l’editore ad aumentare il prezzo;
questo, naturalmente, fornisce un ulteriore incentivo a fotocopiare. Se questo circolo
vizioso non verrà spezzato, arriveremo al punto in cui gli editori non avranno più
convenienza economica a realizzare libri di testo per l’università.
In quel momento non ci saranno più neppure fotocopie.
L’editore
Hamacher_Interno.indd 2
23/02/12 08.47
Carl Hamacher
Zvonko Vranesic
Safwat Zaky
Introduzione
all’architettura dei calcolatori
Seconda edizione
edizione italiana
a cura di Luca Breveglieri
McGraw-Hill
Milano • New York • San Francisco • Washington D.C. • Auckland
Bogotá • Lisboa • London • Madrid • Mexico City • Montreal
New Delhi • San Juan • Singapore • Sydney • Tokyo • Toronto
Hamacher_Interno.indd 3
23/02/12 08.47
Titolo originale: Computer Organization, Fifth Edition
c 2002, 1996, 1990, 1984, 1978 by The McGraw-Hill Companies, Inc.
Copyright c 2007 The McGraw-Hill Companies, S.r.l.
Copyright Publishing Group Italia
via Ripamonti, 89 – 20139 Milano
McGraw-Hill
A Division of The McGraw-Hill Companies
I diritti di traduzione, di riproduzione, di memorizzazione elettronica e di adattamento
totale e parziale con qualsiasi mezzo (compresi i microfilm e le copie fotostatiche) sono
riservati per tutti i Paesi.
Nomi e marchi citati nel testo sono generalmente depositati o registrati dalle rispettive
case produttrici.
Editor: Paolo Roncoroni
Produzione: Donatella Giuliani
Traduzione: Luca Breveglieri; Graziano Pravadelli (Capitolo 7 e Appendice C)
Impaginazione e grafica: CompoMat s.a.s., Configni (RI)
Realizzazione print on demand: Ilovebooks, Fara Gera d’Adda (Bergamo)
Stampa: Prontostampa, Fara Gera d’Adda (Bergamo)
ISBN 978-88-386-7234-7
Hamacher_Interno.indd 4
23/02/12 08.47
Indice
Presentazione della seconda edizione italiana
1
Introduzione al Calcolatore
1.1 Famiglie di Calcolatori . . . . . . .
1.2 Componenti Funzionali . . . . . . .
1.2.1 Unità di Ingresso . . . . . .
1.2.2 Unità di Memoria . . . . . .
1.2.3 Unità Aritmetica-Logica . .
1.2.4 Unità di Uscita . . . . . . .
1.2.5 Unità di Controllo . . . . .
1.3 Concetti Operativi di Base . . . . .
1.4 Scopo e Funzione del Bus . . . . . .
1.5 Sistema Operativo e Programma . .
1.6 Considerazioni di Efcienza . . . .
1.6.1 Ciclo di Clock . . . . . . .
1.6.2 Equazione di Prestazione . .
1.6.3 Processori Avanzati . . . . .
1.6.4 Frequenza di Clock . . . . .
1.6.5 Istruzioni CISC e RISC . . .
1.6.6 Funzioni del Compilatore .
1.6.7 Stima di Efcienza . . . . .
1.7 Calcolatore Multiprocessore . . . .
1.8 Terminologia Fondamentale . . . .
1.9 Breve Storia del Calcolatore . . . .
1.9.1 Premesse e Precursori . . .
1.9.2 Nascita e Primi Passi . . . .
1.9.3 Prima Generazione . . . . .
1.9.4 Seconda Generazione . . . .
1.9.5 Terza Generazione . . . . .
1.9.6 Quarta Generazione . . . .
1.9.7 Oltre la quarta Generazione
1.9.8 Tendenze di Fondo . . . . .
1.10 Osservazioni Conclusive . . . . . .
Hamacher_Interno.indd 5
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
XIII
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
1
2
4
7
7
9
10
11
12
16
17
21
23
24
25
27
27
28
29
31
32
33
34
35
36
37
38
38
39
39
40
23/02/12 08.47
VI
Indice
2
Elementi di Logica
2.1 Funzioni Logiche Fondamentali . . . . . . .
2.2 Sintesi di Funzioni Logiche . . . . . . . . . .
2.2.1 Sintesi Intuitiva . . . . . . . . . . . .
2.2.2 Forma Canonica . . . . . . . . . . .
2.3 Sintesi in Forma Minima . . . . . . . . . . .
2.3.1 Metodo di Karnaugh . . . . . . . . .
2.3.2 Condizione di Indifferenza . . . . . .
2.4 Sintesi con Porte Universali . . . . . . . . . .
2.5 Tecnologia Microelettronica . . . . . . . . .
2.5.1 Tecnologia CMOS . . . . . . . . . .
2.5.2 Ritardo di Propagazione . . . . . . .
2.5.3 Vincoli di Fan-in e Fan-out . . . . . .
2.5.4 Porta tri-State (o in Alta Impedenza) .
2.5.5 Circuito Integrato . . . . . . . . . . .
2.6 Bistabili e Flip-Flop . . . . . . . . . . . . . .
2.6.1 Bistabile Asincrono . . . . . . . . . .
2.6.2 Bistabile Sincrono . . . . . . . . . .
2.6.3 Flip-Flop Master-Slave . . . . . . . .
2.6.4 Flip-Flop Edge-Triggered . . . . . .
2.6.5 Flip-Flop di Tipo T . . . . . . . . . .
2.6.6 Flip-Flop di Tipo JK . . . . . . . . .
2.6.7 Flip-Flop con Preset e Clear . . . . .
2.7 Registro Seriale-Parallelo (Ser.-Par. Register)
2.8 Contatore Binario (Binary Counter) . . . . .
2.9 Decodicatore (Decoder) . . . . . . . . . . .
2.10 Multiplatore (Multiplexer) . . . . . . . . . .
2.11 Componenti Programmabili (FPGA) . . . . .
2.12 Osservazioni Conclusive . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
43
43
47
49
50
53
58
62
64
68
72
78
79
80
82
83
84
86
88
91
93
94
95
96
99
100
101
105
106
3
Elementi di Aritmetica
3.1 Numero Intero . . . . . . . . . . . .
3.1.1 Codica del Numero . . . .
3.1.2 Addizione Naturale . . . . .
3.1.3 Addizione Algebrica . . . .
3.1.4 Evento di Trabocco . . . . .
3.1.5 Altre Operazioni . . . . . .
3.2 Unità Funzionale Aritmetica . . . .
3.2.1 Addizionatore e Sottrattore .
3.2.2 Unità Aritmetica-Logica . .
3.3 Numero Frazionario . . . . . . . . .
3.3.1 Codica in Virgola Fissa . .
3.3.2 Virgola Mobile IEEE 754 .
3.3.3 Operazioni Fondamentali . .
3.4 Conversione da Decimale a Binario
3.5 Osservazioni Conclusive . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
109
109
110
115
117
121
122
123
123
126
130
130
132
137
139
139
Hamacher_Interno.indd 6
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23/02/12 08.47
VII
Indice
4
Istruzioni Macchina
4.1 Modello Base di Processore . . . . . . .
4.2 Memoria del Calcolatore . . . . . . . .
4.2.1 Codica di Carattere . . . . . .
4.2.2 Nozioni Preliminari . . . . . . .
4.2.3 Indirizzamento di Byte . . . . .
4.2.4 Ordinamento di Byte . . . . . .
4.2.5 Allineamento di Parola . . . . .
4.2.6 Dati Numerici e Testuali . . . .
4.2.7 Operazioni di Memoria . . . . .
4.3 Istruzioni Macchina di Base . . . . . .
4.3.1 Trasferimento di Registro . . .
4.3.2 Notazione Simbolica . . . . . .
4.3.3 Modelli di Istruzione . . . . . .
4.3.4 Esecuzione Sequenziale . . . .
4.3.5 Esecuzione con Salto . . . . . .
4.3.6 Bit di Esito o Condizione . . . .
4.3.7 Calcolo di Indirizzo . . . . . . .
4.4 Modi di Indirizzamento . . . . . . . . .
4.4.1 Costante e Variabile . . . . . .
4.4.2 Modo Indiretto e Puntatore . . .
4.4.3 Modo con Indice e Vettore . . .
4.4.4 Modo Relativo (a PC) . . . . .
4.4.5 Altri Indirizzamenti . . . . . . .
4.5 Istruzioni di Ingresso e Uscita . . . . .
4.5.1 Interazione con Periferica . . .
4.5.2 Operazioni di Ingresso e Uscita
4.6 Istruzioni per Dati Dinamici . . . . . .
4.6.1 Gestione di Pila . . . . . . . . .
4.6.2 Gestione di Coda . . . . . . . .
4.7 Altre Istruzioni Macchina . . . . . . . .
4.7.1 Istruzioni Logiche . . . . . . .
4.7.2 Scorrimento e Rotazione . . . .
4.7.3 Moltiplicazione e Divisione . .
4.7.4 Istruzioni Speciali e Privilegiate
4.8 Osservazioni Conclusive . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
143
144
145
145
146
148
149
149
150
151
152
153
154
155
162
164
166
168
168
168
171
173
178
179
181
182
184
188
188
191
193
193
195
198
200
201
5
Linguaggio Macchina
5.1 Linguaggio Assemblatore . . . . . . . . . .
5.1.1 Direttive di Assemblatore . . . . .
5.1.2 Assemblaggio ed Esecuzione . . . .
5.1.3 Notazione per i Numeri . . . . . . .
5.1.4 Sintassi di GNU Assembler (GAS) .
5.2 Gestione di Sottoprogramma . . . . . . . .
5.2.1 Annidamento e Pila . . . . . . . . .
5.2.2 Passaggio di Parametri . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
203
204
207
211
212
213
218
219
221
Hamacher_Interno.indd 7
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23/02/12 08.47
VIII
Indice
5.2.3 Area di Attivazione . . . .
Esempi di Programma . . . . . . .
5.3.1 Prodotto Scalare di Vettori
5.3.2 Ordinamento di Stringa . .
5.3.3 Lista Concatenata . . . . .
Codica Numerica di Istruzione .
Osservazioni Conclusive . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
225
233
233
235
238
243
250
6
Linguaggio Macchina M68000
6.1 Registri e Indirizzamento . . . . .
6.1.1 Struttura dei Registri . . .
6.1.2 Modi di Indirizzamento . .
6.2 Tipi di Istruzione Macchina . . . .
6.3 Linguaggio Macchina . . . . . . .
6.3.1 Sintassi GAS . . . . . . .
6.3.2 Sintassi Nativa . . . . . .
6.4 Controllo del Flusso di Esecuzione
6.4.1 Bit di Esito . . . . . . . .
6.4.2 Istruzioni di Salto . . . . .
6.5 Istruzioni di Ingresso e Uscita . .
6.6 Pila e Sottoprogramma . . . . . .
6.7 Istruzioni Logiche . . . . . . . . .
6.8 Esempi di Programma . . . . . . .
6.8.1 Prodotto Scalare di Vettori
6.8.2 Ordinamento di Stringa . .
6.8.3 Lista Concatenata . . . . .
6.9 Osservazioni Conclusive . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
253
253
253
255
261
265
265
268
269
270
271
275
277
282
284
284
284
285
288
7
Linguaggio Macchina IA-32
7.1 Registri e Indirizzamento . . . . . . . . . . .
7.1.1 Struttura dei Registri . . . . . . . . .
7.1.2 Modi di Indirizzamento . . . . . . . .
7.2 Tipi di Istruzione Macchina . . . . . . . . . .
7.2.1 Programma di Esempio . . . . . . . .
7.2.2 Codica di Istruzione . . . . . . . . .
7.3 Linguaggio Macchina . . . . . . . . . . . . .
7.4 Controllo del Flusso di Esecuzione . . . . . .
7.4.1 Bit di Esito e Salto Condizionato . . .
7.4.2 Istruzione di Confronto . . . . . . . .
7.4.3 Salto Incondizionato . . . . . . . . .
7.5 Istruzioni Logiche e Scorrimento-Rotazione .
7.5.1 Operazioni Logiche . . . . . . . . . .
7.5.2 Scorrimento e Rotazione . . . . . . .
7.6 Istruzioni di Ingresso e Uscita . . . . . . . .
7.6.1 Spazio di I / O Unicato con Memoria
7.6.2 Spazio di I / O Separato da Memoria .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
291
291
292
295
303
306
308
313
315
315
317
317
319
319
319
321
321
322
5.3
5.4
5.5
Hamacher_Interno.indd 8
23/02/12 08.47
IX
Indice
7.7
7.8
7.9
Trasferimento di Blocco di Dati . . . . . . . .
Gestione di Sottoprogramma . . . . . . . . . .
Altri Tipi di Istruzione . . . . . . . . . . . . .
7.9.1 Moltiplicazione e Divisione . . . . . .
7.9.2 Istruzioni Multimediali Estese (MMX)
7.9.3 Istruzioni di Tipo Vettoriale (SIMD) . .
7.10 Esempi di Programma . . . . . . . . . . . . . .
7.10.1 Prodotto Scalare di Vettori . . . . . . .
7.10.2 Ordinamento di Stringa . . . . . . . . .
7.10.3 Lista Concatenata . . . . . . . . . . . .
7.11 Osservazioni Conclusive . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
324
325
331
331
335
335
336
336
336
337
340
8
Sistema di Ingresso e Uscita
8.1 Accesso a Dispositivo di I / O . . . . . .
8.2 Tecnica di Interruzione . . . . . . . . . .
8.2.1 Circuito di Interruzione . . . . . .
8.2.2 Controllo di Interruzione . . . . .
8.2.3 Gestione di Dispositivi Multipli .
8.2.4 Controllo della Richiesta . . . . .
8.2.5 Concetto di Eccezione . . . . . .
8.2.6 Interruzione e Sistema Operativo .
8.3 Esempi di Processore . . . . . . . . . . .
8.3.1 Processore M68000 . . . . . . . .
8.3.2 Processore IA-32 . . . . . . . . .
8.4 Tecnica di DMA . . . . . . . . . . . . .
8.4.1 Funzionamento di DMA . . . . .
8.4.2 Arbitraggio del Bus . . . . . . . .
8.5 Struttura e Funzionamento del Bus . . . .
8.5.1 Bus Sincrono . . . . . . . . . . .
8.5.2 Trasferimento Multiciclo . . . . .
8.5.3 Bus Asincrono . . . . . . . . . .
8.5.4 Discussione sul Bus . . . . . . .
8.6 Interfaccia di I / O . . . . . . . . . . . . .
8.6.1 Porta Parallela . . . . . . . . . .
8.6.2 Porta Seriale . . . . . . . . . . .
8.7 Bus e Porta di I / O Standard . . . . . . .
8.8 Osservazioni Conclusive . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
343
343
349
352
354
356
361
363
366
370
370
371
375
377
381
385
386
390
392
396
396
398
407
409
412
9
Sistema di Memoria
9.1 Concetti Fondamentali . . . . . . . .
9.2 Memoria RAM a Semiconduttori . . .
9.2.1 Componente di Memoria . . .
9.2.2 Memoria Statica . . . . . . .
9.2.3 Memoria Dinamica Asincrona
9.2.4 Memoria Dinamica Sincrona .
9.2.5 Memoria SDRAM Veloce . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
415
415
419
420
422
425
428
432
Hamacher_Interno.indd 9
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23/02/12 08.47
X
Indice
9.2.6 Banco di Memoria . . . . . .
9.2.7 Considerazioni sulla Memoria
9.3 Memoria a sola Lettura . . . . . . . .
9.3.1 Memoria ROM . . . . . . . .
9.3.2 Memoria PROM . . . . . . .
9.3.3 Memoria EPROM . . . . . .
9.3.4 Memoria EEPROM . . . . . .
9.3.5 Memoria Flash . . . . . . . .
9.4 Velocità Capacità e Costo . . . . . . .
9.5 Memoria Cache . . . . . . . . . . . .
9.5.1 Schema di Indirizzamento . .
9.5.2 Algoritmo di Sostituzione . .
9.5.3 Esempio di Indirizzamento . .
9.5.4 Esempi di Cache . . . . . . .
9.5.5 Memoria Associativa . . . . .
9.6 Considerazioni di Prestazione . . . . .
9.6.1 Memoria Interallacciata . . .
9.6.2 Guadagno di Prestazione . . .
9.6.3 Integrazione con il Processore
9.6.4 Altre Migliorie . . . . . . . .
9.7 Memoria Virtuale . . . . . . . . . . .
9.7.1 Unità di Gestione di Memoria
9.7.2 Traduzione di Indirizzo . . . .
9.8 Gestione della Memoria . . . . . . . .
9.9 Memoria di Massa . . . . . . . . . .
9.9.1 Disco Magnetico . . . . . . .
9.9.2 Altre Tecnologie . . . . . . .
9.10 Osservazioni Conclusive . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
432
434
436
437
438
439
439
440
441
444
448
454
456
461
465
466
467
470
474
475
478
478
479
486
487
487
492
493
10 Struttura del Processore
10.1 Concetti Fondamentali . . . . . . . . .
10.1.1 Modello di Processore . . . . .
10.1.2 Unità di Calcolo . . . . . . . .
10.1.3 Trasferimento di Registro . . .
10.1.4 Operazione Aritmetica e Logica
10.1.5 Caricamento di Parola . . . . .
10.1.6 Memorizzazione di Parola . . .
10.1.7 Ottimizzare il Trasferimento . .
10.2 Esecuzione di Istruzione Completa . . .
10.2.1 Istruzione Sequenziale . . . . .
10.2.2 Istruzione di Salto . . . . . . .
10.3 Struttura con Bus Multipli . . . . . . .
10.4 Controllo di Tipo Cablato . . . . . . . .
10.4.1 Unità di Controllo . . . . . . .
10.4.2 Processore Completo . . . . . .
10.5 Controllo Microprogrammato . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
495
495
496
498
501
503
505
509
509
511
511
513
514
517
517
521
523
Hamacher_Interno.indd 10
23/02/12 08.47
XI
Indice
10.5.1 Struttura di Microistruzione . .
10.5.2 Tecnica di Sequenziamento - I .
10.5.3 Tecnica di Sequenziamento - II .
10.5.4 Campo di Microindirizzo . . . .
10.5.5 Prelievo Anticipato . . . . . . .
10.5.6 Emulazione di Istruzione . . . .
10.6 Notazione Simbolica . . . . . . . . . .
10.7 Osservazioni Conclusive . . . . . . . .
11 Introduzione al Pipelining
11.1 Concetti Fondamentali . . . . . . .
11.1.1 Ruolo della Memoria Cache
11.1.2 Analisi della Prestazione . .
11.2 Conitto di Dato . . . . . . . . . .
11.2.1 Anticipo di Operando . . . .
11.2.2 Riordino di Codice . . . . .
11.2.3 Effetti Collaterali . . . . . .
11.3 Considerazioni sulla Prestazione . .
11.3.1 Interazione con Cache . . .
11.3.2 Numero di Stadi . . . . . .
11.4 Osservazioni Conclusive . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
527
530
534
538
542
542
544
547
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
553
553
556
557
562
564
565
569
570
571
574
575
12 Famiglie di Processori
12.1 Famiglie Motorola 680X0 e ColdFire
12.1.1 Processore 68020 . . . . . . .
12.1.2 Migliorie in 68030 e 68040 .
12.1.3 Processore 68060 . . . . . . .
12.1.4 Famiglia ColdFire . . . . . .
12.2 Famiglia Intel IA-32 . . . . . . . . .
12.2.1 Segmentazione di Memoria .
12.2.2 Modalità a 16 Bit . . . . . . .
12.2.3 Processori 80386 e 80486 . .
12.2.4 Processore Pentium . . . . . .
12.2.5 Processore Pentium Pro . . .
12.2.6 Processori Pentium II e III . .
12.2.7 Processore Pentium 4 . . . . .
12.2.8 Processore AMD . . . . . . .
12.3 Osservazioni Conclusive . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
577
579
579
583
583
584
584
585
590
590
591
593
594
595
596
596
A Codica di Informazione
A.1 Codice Decimale BCD .
A.2 Codici ASCII e EBCDIC
A.3 Segnalazione di Errore .
A.4 Confronto tra Codici . .
A.5 Osservazioni Conclusive
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
599
599
600
600
605
605
Hamacher_Interno.indd 11
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23/02/12 08.47
XII
Indice
B Elenco delle Istruzioni Macchina M68000
B.1 Codica di Istruzione . . . . . . . . . .
B.2 Istruzioni Fondamentali . . . . . . . . .
B.2.1 Elenco Generale . . . . . . . .
B.2.2 Istruzioni di Salto . . . . . . . .
B.3 Altri Tipi di Istruzione . . . . . . . . .
B.3.1 Istruzioni di Esame di Bit . . .
B.3.2 Trasferimento di Blocco . . . .
B.3.3 Istruzioni Speciali e Privilegiate
B.4 Osservazioni Conclusive . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
607
607
607
610
624
625
625
626
626
630
C Elenco delle Istruzioni Macchina IA-32
C.1 Codica di Istruzione . . . . . . . . . .
C.1.1 Formato Generale . . . . . . . .
C.1.2 Modi di Indirizzamento . . . . .
C.2 Istruzioni Fondamentali . . . . . . . . .
C.2.1 Elenco Generale . . . . . . . .
C.2.2 Salto Condizionato . . . . . . .
C.2.3 Salto Incondizionato . . . . . .
C.3 Uso dei Codici di Presso . . . . . . . .
C.4 Altri Tipi di Istruzione . . . . . . . . .
C.4.1 Manipolazione di Stringa . . . .
C.4.2 Virgola Mobile MMX e SSE . .
C.4.3 Istruzioni Speciali e Privilegiate
C.5 Modalità di Esecuzione a 16 Bit . . . .
C.6 Esempio di Programma . . . . . . . . .
C.7 Osservazioni Conclusive . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
633
633
633
635
638
638
646
646
646
648
648
649
650
651
651
656
Bibliograa
657
Indice analitico
659
Hamacher_Interno.indd 12
23/02/12 08.47
Presentazione
della seconda edizione italiana
Questo testo è frutto dell’adattamento e della traduzione in lingua italiana della quinta edizione di Computer Organization, uno dei manuali più conosciuti e
diffusi internazionalmente sui fondamenti della struttura – o architettura – del calcolatore. Il libro ha una storia assai lunga (la prima edizione in inglese è del 1978)
ed è il risultato di una revisione continua e di un arricchimento costante per quanto
riguarda gli argomenti affrontati, che partono dai fondamenti del calcolatore per
arrivare ad aspetti avanzati, oggetto di ricerca corrente.
Scopo del testo è dare una presentazione dei fondamenti della struttura del
calcolatore, esponendo e illustrando i concetti, le nozioni e gli esempi appropriati,
in qualità e quantità, per un corso introduttivo sull’argomento. Il presente volume
si propone di trattare il calcolatore dal punto di vista della struttura sica (hardware) a blocchi funzionali, rafnandola progressivamente no a giungere a livello
di logica digitale, e dal punto di vista del linguaggio macchina, dando nozioni ed
esempi sufcienti anche per imparare a programmare direttamente in linguaggio
macchina. Insiste tuttavia sempre sugli aspetti concettuali e su quelli tecnologici e strutturali, cioè sull’architettura hardware del calcolatore, e non è pertanto
un manuale di programmazione. Accenna inoltre in più punti alla relazione tra
calcolatore e sistema operativo, ma non ne espone la teoria se non con qualche
nozione molto generale.
A tale ne, il materiale abbondantissimo dell’edizione originale è stato selezionato e in parte riorganizzato. Gli unici prerequisiti richiesti sono la conoscenza,
almeno approssimativa, di un linguaggio di programmazione quale C, C++, Java,
Pascal o altri. Qualche nozione sul sistema operativo può essere utile, ma non
è necessaria. Per il resto il libro è sostanzialmente autocontenuto e può essere
affrontato da chiunque abbia un livello di istruzione secondario (liceo, istituto
professionale e simili) tale da permettere di affrontare l’inizio dell’istruzione superiore in una facoltà di orientamento scientico o tecnologico. Naturalmente un
utile presupposto è un po’ di interesse per il calcolatore, necessario per un procuo
studio.
Contenuti
Il libro si può approssimativamente suddividere in cinque parti consequenziali:
introduzione a concetti di base, terminologia e storia (capitolo 1); presupposti di
Hamacher_Interno.indd 13
23/02/12 08.47
XIV
Presentazione della seconda edizione italiana
logica digitale e aritmetica (capitoli 2-3); fondamenti di struttura del calcolatore
(capitoli 4-5 e 8-10) con esempi didattici incentrati sui processori Motorola 68000
e Intel Architecture 32 (capitoli 6-7), entrambi o in alternativa; cenni ad argomenti
avanzati di struttura del calcolatore (capitoli 11-12); appendici con aspetti operativi per la programmazione in linguaggio macchina (Appendici A, B, C). Segue il
contenuto dei vari capitoli, suddivisi nei blocchi suddetti.
Il capitolo 1 – Introduzione al Calcolatore – espone i concetti fondamentali
in modo discorsivo, anticipa la terminologia e presenta una breve ma densa storia
tecnologica del calcolatore. Illustra la classica scomposizione del calcolatore in
cinque parti: processore, bus, memoria, unità di ingresso e di uscita, e per ciascuna
parte tratteggia le problematiche essenziali e le soluzioni tecnologiche disponibili. Inoltre denisce la nozione di prestazione e accenna ai criteri e ai metodi per
calcolarla o misurarla. Inne ripercorre la storia del calcolatore, soffermandosi
sull’invenzione delle tecnologie essenziali. È un capitolo autonomo e sostanzialmente autocontenuto, che si può a scelta leggere come un opuscolo che offre una
panoramica d’insieme sulla tecnologia, la struttura, il funzionamento e la storia
del calcolatore, saltando il resto del libro, oppure leggere come inquadramento
degli argomenti salienti trattati più a fondo nel resto del libro.
Il capitolo 2 – Elementi di Logica – illustra i fondamenti di logica digitale,
necessari per comprendere il resto: cenni alla tecnologia microelettronica digitale e modello logico del transistore come interruttore o relais; porta logica, rete
combinatoria, forma canonica e forma minima a due livelli; bistabile sincrono
e asincrono; blocchi funzionali logici di base come mux, demux, codicatore e
decodicatore, registro ecc.
Il capitolo 3 – Elementi di Aritmetica – illustra i fondamenti di aritmetica,
pure necessari per comprendere il resto: numero binario intero e in complemento a due; addizione e sottrazione in aritmetica intera; unità aritmetica-logica o
ALU; numero frazionario in virgola ssa e mobile IEEE 754; cenni agli algoritmi
aritmetici relativi di addizione, moltiplicazione e divisione.
Il capitolo 4 – Istruzioni Macchina – illustra il concetto e la realizzazione
dell’istruzione macchina: codica di informazione e organizzazione di base della
memoria; istruzione a zero, uno, due e tre argomenti; modi di indirizzamento;
esempi di traduzione da linguaggio di alto livello a linguaggio macchina come
assegnamento, espressione, condizionale e ciclo.
Il capitolo 5 – Linguaggio Macchina – illustra la struttura del linguaggio macchina e del programma: istruzione macchina, simbolo e direttiva; sistema e processo di assemblaggio; struttura del programma; struttura dati complessa, come
vettore, record e lista concatenata; gestione di sottoprogramma, cioè chiamata,
rientro, parametro e pila; codica numerica dell’istruzione ovvero il formato di
memoria. Termina con un breve accenno ai principi di progetto CISC e RISC
dell’insieme di istruzioni macchina del processore, i quali poi sono ripresi nei
capitoli 11 e 12.
I capitoli 6 e 7 – Linguaggio Macchina M68000 e Linguaggio Macchina IA32 – sono in un certo senso paralleli: illustrano il linguaggio macchina specico
del processore Motorola 68000 (M68000) e del modello di processore Intel Archi-
Hamacher_Interno.indd 14
23/02/12 08.47
Presentazione della seconda edizione italiana
XV
tecture 32 (IA-32), rispettivamente. Riaffrontano gli stessi argomenti del capitolo
5, ma in forma più specica e con numerosi esempi di programma commentato,
pure tratti dal capitolo 5 e largamente comuni ai due capitoli 6 e 7. Contengono
anche brevi richiami per puntualizzare somiglianze o differenze.
Il capitolo 8 – Sistema di Ingresso/Uscita – illustra la struttura e il funzionamento del sistema di ingresso/uscita (sistema di I/O) del calcolatore: le tecniche
di I/O, controllo di programma, interruzione e accesso diretto alla memoria; il bus
del calcolatore, lettura, scrittura e arbitraggio; la porta di I/O, modo di operazione
e schema logico; brevi cenni agli standard di bus di sistema e di periferica. Contiene un inserto specico dedicato ai processori M68000 e IA-32, con un esempio
di routine di interruzione per entrambi. Contiene anche un breve inserto che illustra, tramite un esempio, la relazione tra calcolatore e sistema operativo, mediata
dall’interruzione.
Il capitolo 9 – Sistema di Memoria – illustra la struttura e il funzionamento del sistema di memoria del calcolatore: cenni alla tecnologia microelettronica
di memoria, transistore, schema circuitale della cella di memoria, RAM, SRAM,
DRAM, ROM, PROM, EPROM, EEPROM, ash ecc; memoria centrale, struttura mono e bidimensionale, schema di indirizzamento, lettura e scrittura; memoria cache, schema di indirizzamento diretto, associativo e associativo a gruppi, e
gestione; memoria virtuale, paginazione, MMU e gestione; cenni alla memoria
di massa e alla tecnologia di disco magnetico. Come il capitolo 8, contiene un
inserto specico dedicato ai processori M68040 (versione un po’ potenziata di
M68000) e IA-32, con la struttura dettagliata del sistema di memoria cache di
entrambi.
Il capitolo 10 – Struttura del Processore – illustra la struttura interna del processore, dedicandosi ai concetti e alle tecniche per cos̀ dire classici: unità di calcolo (data path) e unità di controllo (control path): passi di prelievo ed esecuzione
dell’istruzione macchina; unità di controllo cablata (dedicata) e microprogrammata. Contiene un estratto di microprogramma che realizza un’istruzione macchina
(addizione), con svariati modi di indirizzamento, sostanzialmente mutuata dal linguaggio macchina di M68000, con qualche variante ragionevole. In generale il
modello di processore esposto nel capitolo è compatibile con le caratteristiche e
il funzionamento di M68000, sia pure con qualche semplicazione, senza però
pretendere di rappresentarne la struttura interna effettiva e in particolare senza garantire di modellare in modo fedele il numero di cicli di clock realmente consumati
da M68000 per eseguire ciascuna istruzione macchina.
Il capitolo 11 – Introduzione al Pipelining – illustra, in forma elementare, il
principio di pipelining, principalmente trattando il conitto di dato (data hazard) e
dando qualche spunto sui concetti e i metodi alla base del progetto dei processori
più recenti e avanzati.
Il capitolo 12 – Famiglie di Processori – illustra, in modo discorsivo e procedendo in ordine storico, la struttura interna di massima e l’evoluzione tecnologica
delle due famiglie di processori Motorola 680X0 e Intel Architecture 32 (M680X0
e IA-32). In un certo senso il capitolo è la prosecuzione naturale del capitolo 11
giacché illustra la progressiva messa in pratica delle idee là introdotte, partendo
da modelli di processore ancora piuttosto classici.
Hamacher_Interno.indd 15
23/02/12 08.47
XVI
Presentazione della seconda edizione italiana
Inne l’appendice A – Codica di informazione – completa la codica di informazione, illustrando in dettaglio i codici BCD, ASCII, EBCDIC e di parità, mentre
le appendici B e C – Elenco di istruzioni macchina M68000 e Elenco di istruzioni
macchina IA-32 – espongono gli insiemi di istruzioni dei processori M68000 e
IA-32, rispettivamente, dandone estensivamente sintassi, interpretazione e vincoli, e aggiungendo svariate informazioni utili come codica numerica, particolarità,
istruzioni speciali e privilegiate ecc. Le tre appendici sono di taglio pratico e pensate come manuale di consultazione per il programmatore in linguaggio macchina,
ma aiutano anche a completare il quadro d’insieme sul linguaggio macchina.
Chiude il libro la bibliograa, tutta volutamente costituita da testi in lingua
italiana, tranne che per gli aspetti storici, i quali ampliano e approfondiscono la
materia oppure sono dedicati a discipline collaterali come la teoria del sistema
operativo o della rete di calcolatori. Naturalmente molti di tali testi, come il presente, sono traduzioni di altrettanti noti e diffusi testi in lingua inglese, di più o
meno lungo corso. Ci sono tuttavia anche testi di altra origine.
Caratteristiche del testo
Il libro è pensato per un corso di base sulla struttura del calcolatore, compresa
un’eventuale attività di laboratorio di programmazione in linguaggio macchina.
È comunque adatto anche per la lettura individuale. Le parti che lo compongono hanno una certa autonomia e sono facilmente separabili. Tolta l’introduzione,
evidentemente essenziale, e i presupposti di logica digitale e aritmetica, i quali si
possono studiare o meno secondo le conoscenze pregresse, il nucleo fondamentale
del libro (capitoli 4-10) presenta il calcolatore illustrandone il linguaggio macchina, i sottosistemi principali e la struttura interna del processore. Quest’ultimo
argomento è trattato presentando un modello semplicato, adatto essenzialmente per eseguire l’istruzione macchina in più cicli di clock e senza parallelismo
tra istruzioni. I due processori didattici impiegati per gli esempi sono Motorola
68000 (capitolo 6) e il modello Intel Architecture 32 (capitolo 7). Sono trattati in
modo uniforme, con gli stessi esempi, e pertanto si possono studiare entrambi o
in alternativa, senza che nulla di concettualmente essenziale vada perso. Sostanzialmente il capitolo 10 modella una struttura interna proponibile per M68000,
con qualche semplicazione e senza pretendere di darne la struttura effettiva. Tale
modello, tuttavia, incentrato sullo scomporre il processore in un’unità di calcolo e
in una di controllo, almeno come concetto è basilare. I due capitoli nali (capitoli
11-12) offrono qualche spunto su argomenti avanzati, principalmente il pipelining
con accenni alla superscalarità e al parallelismo tra istruzioni macchina, e illustrano la progressiva diffusione di tali idee nei processori di uso generale più recenti
di famiglia Motorola e Intel. Tutti i capitoli da 2 a 11 presentano la materia in modo abbastanza preciso e completo da permettere di impostare e risolvere esercizi,
mentre l’introduzione (capitolo 1) e l’ultimo (capitolo 12) sono per loro natura
capitoli descrittivi.
Una prima particolarità del libro, intrinseca al testo originale, è che istruzioni e linguaggio macchina dapprima vengono trattati in generale (capitoli 4-5),
Hamacher_Interno.indd 16
23/02/12 08.47
Presentazione della seconda edizione italiana
XVII
mediante una notazione per le istruzioni, i simboli, le operazioni e le direttive di
assemblatore, che in sostanza è riferibile a qualunque processore o quasi, e poi
vengono rafnati in dettaglio sui modelli didattici commerciali (capitoli 6-7). I
concetti sono dunque esposti in una forma valida in generale, mentre i due modelli didattici si possono benissimo studiare in alternativa o entrambi, se il tempo lo
permette e con poco sforzo in più. Una seconda particolarità è stata volutamente inserita come peculiare della presente traduzione: tutti gli esempi didattici di
programma sono espressi nella sintassi universale di linguaggio macchina GNU
Assembler (GAS), il noto strumento software di assemblaggio integrato nel sistema di sviluppo GNU C/C++ distribuito in ambiente Unix (Linux). Non è cos̀ nel
testo in inglese, dove ogni linguaggio macchina di esempio ha la propria sintassi
e semantica, spesso diversissime tra loro. Lo strumento software GAS è distribuito gratuitamente, riconosce e tratta pressoché tutti i processori commerciali di
qualche importanza, è ben documentato, è facile da installare e viene aggiornato
costantemente. L’uniformità offerta da GAS offre due vantaggi notevoli: si può
passare dal modello didattico M68000 a IA-32 e viceversa con poco sforzo di
apprendimento in più, e si permette di impostare attività pratica di laboratorio in
ambiente Unix (Linux) a scelta sull’uno o l’altro modello, o su entrambi. Sono
state comunque conservate le poche nozioni in più necessarie per servirsi della
sintassi nativa di linguaggio macchina Motorola, abbastanza simile a quella GAS
da permettere una simile operazione, a benecio del lettore, giacché sono disponibili gratuitamente anche sistemi di assemblaggio per processori Motorola (per
esempio in ambiente Windows) semplici da usare ma efcaci.
Per aiutare il lettore a suddividere la materia trattata per tipo, la tabella seguente riporta le pagine totali per capitolo e per aggregazione in blocchi, secondo
quanto detto sopra.
Intel
4
5
6
7
8
9
10
11
12
pp.
42
66
34
60 50
38
52
72
80
58
24
21
597
x
x
Argomenti
Avanzati
Motorola
3
Sistemi e
Struttura
di I / O
Memoria e
Processore
Logica e
Aritmetica
2
Istruzioni e
Linguaggio
Introduzione
1
Modelli
Didattici
x
42
100
x
x
x
x
x
x
x
x
x
358
x
x
x
372
x
Hamacher_Interno.indd 17
Totali Pagine
Fondamenti del Calcolatore
x
45
23/02/12 08.47
XVIII
Presentazione della seconda edizione italiana
Caratteristiche della seconda edizione
Il testo originale (Computer Organization, 5th Edition) contiene in più svariati
argomenti avanzati: pipelining esposto a fondo, superscalarità, esecuzione vettoriale, sistemi embedded, calcolatore multiprocessore e un po’ di nozioni discorsive sulle periferiche. Inoltre utilizza come modello didattico anche il processore
ARM (una macchina di tipo RISC), contrapponendolo a M68000 e IA-32, e illustra, seppure più brevemente, le famiglie di processori Sun SPARC, PowerPC,
Compaq Alpha e HP. Naturalmente la lunghezza del testo originale è proporzionata all’abbondanza di materiale ed è andata crescendo per accumulo di edizione
in edizione no alle attuali 800 pagine.
Nel presente libro il processore ARM è stato escluso in quanto ritenuto troppo differente per una presentazione di base di lunghezza il più possibile contenuta
e più adatto a corsi di tipo avanzato. Naturalmente lo sarebbero anche i processori
M680X0 e a maggior ragione IA-32 nelle loro evoluzioni più recenti, che qui infatti vengono trattati in modo approfondito solo nella loro versione più semplice.
Per lo stesso motivo gli altri esempi di processore sono stati esclusi. Cos̀ il libro
non si presenta particolarmente lungo, è ben separabile in parti, ma è comunque
incentrato su due esempi didattici molto signicativi e diffusi: M68000, processore semplice, lineare, studiabile in un tempo ragionevole, e IA-32, processore
più complesso ma studiabile comunque riutilizzaando molti degli stessi concetti,
e diffusissimo.
L’edizione italiana precedente, pubblicata nel 1997, valida e di successo, utilizza come modelli didattici i processori M68000 e PowerPC (quest’ultimo nell’attuale edizione in inglese gura solo brevemente) e illustra sinteticamente alcune altre famiglie di processori, ma comprensibilmente manca di qualche argomento più o meno avanzato, quale i sistemi embedded. La differenza forse
più vistosa rispetto alla presente edizione è l’enfasi minore data ai processori di
famiglia IA-32.
Mi auguro di aver tradotto il presente testo in modo semplice e comprensibile. La terminologia tecnica inglese è tutta conservata con cura tra parentesi, dove
è tradotta, e nei termini più comuni è conservata o messa in parallelo a quella
italiana. Gli esempi di programma e i calcoli sono quelli dell’edizione originale, benché talvolta sintetizzati o riordinati, e naturalmente tradotti dove possibile. Le citazioni letterarie in apertura di capitolo non sono originali degli autori
statunitensi, ma sono state scelte dal sottoscritto.
Luca Breveglieri
Sito web
Sul sito web dedicato al libro, all’indirizzo www.ateneonline.it/hamacher, sono
presenti lucidi e gure per i docenti che adottano il testo, link a strumenti per
la programmazione assemblativa e i testi e le soluzioni (in inglese) degli esercizi
presenti nell’edizione originale del volume.
Hamacher_Interno.indd 18
23/02/12 08.47
Presentazione della seconda edizione italiana
XIX
Ringraziamenti dell’editore
L’editore ringrazia i revisori che con le loro preziose indicazioni hanno contribuito
alla realizzazione della seconda edizione del testo Introduzione all’architettura
dei calcolatori:
•
•
•
•
Rocco Aversa, Seconda Università degli Studi di Napoli
David Macii, Università degli Studi di Trento
Antonino Mazzeo, Università degli Studi di Napoli “Federico II”
Davide Quaglia, Università degli Studi di Verona
Hamacher_Interno.indd 19
23/02/12 08.47
Hamacher_Interno.indd 20
23/02/12 08.47
Scarica

Scarica le prime pagine del libro