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 Efcienza . . . . 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 Efcienza . . . . . 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 Decodicatore (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 Codica 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 Codica 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 Codica 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 . . . . . Codica 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 Codica 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 Unicato 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 Conitto 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 Codica 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 Codica 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 Codica 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 Presso . . . . . . . . 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 Bibliograa 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, rafnandola progressivamente no a giungere a livello di logica digitale, e dal punto di vista del linguaggio macchina, dando nozioni ed esempi sufcienti 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 scientico o tecnologico. Naturalmente un utile presupposto è un po’ di interesse per il calcolatore, necessario per un procuo 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 denisce la nozione di prestazione e accenna ai criteri e ai metodi per calcolarla o misurarla. Inne 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, codicatore e decodicatore, 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: codica 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; codica 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 specico 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ù specica 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 specico 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 specico 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 semplicazione, 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 conitto 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 Inne l’appendice A – Codica di informazione – completa la codica 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 codica 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 bibliograa, 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 semplicato, 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 semplicazione 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 rafnati 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 benecio del lettore, giacché sono disponibili gratuitamente anche sistemi di assemblaggio per processori Motorola (per esempio in ambiente Windows) semplici da usare ma efcaci. 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 signicativi 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