| Preface | p. ix |
| Computer Abstractions and Technology | p. 2 |
| Introduction | p. 3 |
| Below Your Program | p. 11 |
| Under the Covers | p. 15 |
Real Stuff: Manufacturing Pentium 4. Chips | p. 28 |
| Fallacies and Pitfalls | p. 33 |
| Concluding Remarks | p. 35 |
| Historical Perspective and Further Reading | p. 36 |
| Exercises | p. 36 |
Computers in the Real World: Information Technology for the 4. Billion without IT | p. 44 |
| Instructions: Language of the Computer | p. 46 |
| Introduction | p. 48 |
| Operations of the Computer Hardware | p. 49 |
| Operands of the Computer Hardware | p. 52 |
| Representing Instructions in the Computer | p. 60 |
| Logical Operations | p. 68 |
| Instructions for Making Decisions | p. 72 |
| Supporting Procedures in Computer Hardware | p. 79 |
| Communicating with People | p. 90 |
| MIPS Addressing for 32-Bit Immediates and Addresses | p. 95 |
| Translating and Starting a Program | p. 106 |
| How Compilers Optimize | p. 116 |
| How Compilers Work: An Introduction | p. 121 |
| A C Sort Example to Put It All Together | p. 121 |
| Implementing an Object-Oriented Language | p. 130 |
| Arrays versus Pointers | p. 130 |
| Real Stuff: IA-32 Instructions | p. 134 |
| Fallacies and Pitfalls | p. 143 |
| Concluding Remarks | p. 145 |
| Historical Perspective and Further Reading | p. 147 |
| Exercises | p. 147 |
| Computers in the Real World: Helping Save Our Environment with Data | p. 156 |
| Arithmetic for Computers | p. 158 |
| Introduction | p. 160 |
| Signed and Unsigned Numbers | p. 160 |
| Addition and Subtraction | p. 170 |
| Multiplication | p. 176 |
| Division | p. 183 |
| Floating Point | p. 189 |
| Real Stuff: Floating Point in the IA-32 | p. 217 |
| Fallacies and Pitfalls | p. 220 |
| Concluding Remarks | p. 225 |
| Historical Perspective and Further Reading | p. 229 |
| Exercises | p. 229 |
| Computers in the Real World: Reconstructing the Ancient World | p. 236 |
| Assessing and Understanding Performance | p. 238 |
| Introduction | p. 240 |
| CPU Performance and Its Factors | p. 246 |
| Evaluating Performance | p. 254 |
| Real Stuff: Two SPEC Benchmarks and the Performance of Recent Intel Processors | p. 259 |
| Fallacies and Pitfalls | p. 266 |
| Concluding Remarks | p. 270 |
| Historical Perspective and Further Reading | p. 272 |
| Exercises | p. 272 |
| Computers in The Real World: Moving People Faster and More Safely | p. 280 |
| The Processor: Datapath and Control | p. 282 |
| Introduction | p. 284 |
| Logic Design Conventions | p. 289 |
| Building a Datapath | p. 292 |
| A Simple Implementation Scheme | p. 300 |
| A Multicycle Implementation | p. 318 |
| Exceptions | p. 340 |
| Microprogramming: Simplifying Control Design | p. 346 |
| An Introduction to Digital Design Using a Hardware Design Language | p. 346 |
| Real Stuff: The Organization of Recent Pentium Implementations | p. 347 |
| Fallacies and Pitfalls | p. 350 |
| Concluding Remarks | p. 352 |
| Historical Perspective and Further Reading | p. 353 |
| Exercises | p. 354 |
| Computers in the Real World: Empowering the Disabled | p. 366 |
| Enhancing Performance with Pipelining | p. 368 |
| An Overview of Pipelining | p. 370 |
| A Pipelined Datapath | p. 384 |
| Pipelined Control | p. 399 |
| Data Hazards and Forwarding | p. 402 |
| Data Hazards and Stalls | p. 413 |
| Branch Hazards | p. 416 |
| Using a Hardware Description Language to Describe and Model a Pipeline | p. 426 |
| Exceptions | p. 427 |
| Advanced Pipelining: Extracting More Performance | p. 432 |
Real Stuff: The Pentium 4. Pipeline | p. 448 |
| Fallacies and Pitfalls | p. 451 |
| Concluding Remarks | p. 452 |
| Historical Perspective and Further Reading | p. 454 |
| Exercises | p. 454 |
| Computers in the Real World: Mass Communication without Gatekeepers | p. 464 |
| Large and Fast: Exploiting Memory Hierarchy | p. 466 |
| Introduction | p. 468 |
| The Basics of Caches | p. 473 |
| Measuring and Improving Cache Performance | p. 492 |
| Virtual Memory | p. 511 |
| A Common Framework for Memory Hierarchies | p. 538 |
| Real Stuff: The Pentium P4 and the AMD Opteron Memory Hierarchies | p. 546 |
| Fallacies and Pitfalls | p. 550 |
| Concluding Remarks | p. 552 |
| Historical Perspective and Further Reading | p. 555 |
| Exercises | p. 555 |
| Computers in the Real World: Saving the World's Art Treasures | p. 562 |
| Storage, Networks, and Other Peripherals | p. 564 |
| Introduction | p. 566 |
| Disk Storage and Dependability | p. 569 |
| Networks | p. 580 |
| Buses and Other Connections between Processors, Memory, and I/O Devices | p. 581 |
| Interfacing I/O Devices to the Processor, Memory, and Operating System | p. 588 |
| I/O Performance Measures: Examples from Disk and File Systems | p. 597 |
| Designing an I/O System | p. 600 |
| Real Stuff: A Digital Camera | p. 603 |
| Fallacies and Pitfalls | p. 606 |
| Concluding Remarks | p. 609 |
| Historical Perspective and Further Reading | p. 611 |
| Exercises | p. 611 |
| Computers in the Real World: Saving Lives through Better Diagnosis | p. 622 |
| Multiprocessors and Clusters | p. 2 |
| Introduction | p. 4 |
| Programming Multiprocessors | p. 8 |
| Multiprocessors Connected by a Single Bus | p. 11 |
| Multiprocessors Connected by a Network | p. 20 |
| Clusters | p. 25 |
| Network Topologies | p. 27 |
| Multiprocessors Inside a Chip and Multithreading | p. 30 |
| Real Stuff: The Google Cluster of PCs | p. 34 |
| Fallacies and Pitfalls | p. 39 |
| Concluding Remarks | p. 42 |
| Historical Perspective and Further Reading | p. 47 |
| Exercises | p. 55 |
| Appendices | |
| Assemblers, Linkers, and the SPIM Simulator | p. 2 |
| Introduction | p. 3 |
| Assemblers | p. 10 |
| Linkers | p. 18 |
| Loading | p. 19 |
| Memory Usage | p. 20 |
| Procedure Call Convention | p. 22 |
| Exceptions and Interrupts | p. 33 |
| Input and Output | p. 38 |
| SPIM | p. 40 |
| MIPS R2000 Assembly Language | p. 45 |
| Concluding Remarks | p. 81 |
| Exercises | p. 82 |
| The Basics of Logic Design | p. 2 |
| Introduction | p. 3 |
| Gates, Truth Tables, and Logic Equations | p. 4 |
| Combinational Logic | p. 8 |
| Using a Hardware Description Language | p. 20 |
| Constructing a Basic Arithmetic Logic Unit | p. 26 |
| Faster Addition: Carry Lookahead | p. 38 |
| Clocks | p. 47 |
| Memory Elements: Flip-flops, Latches, and Registers | p. 49 |
| Memory Elements: SRAMs and DRAMs | p. 57 |
| Finite State Machines | p. 67 |
| Timing Methodologies | p. 72 |
| Field Programmable Devices | p. 77 |
| Concluding Remarks | p. 78 |
| Exercises | p. 79 |
| Mapping Control to Hardware | p. 2 |
| Introduction | p. 3 |
| Implementing Combinational Control Units | p. 4 |
| Implementing Finite State Machine Control | p. 8 |
| Implementing the Next-State Function with a Sequencer | p. 21 |
| Translating a Microprogram to Hardware | p. 27 |
| Concluding Remarks | p. 31 |
| Exercises | p. 32 |
| A Survey of RISC Architectures for Desktop, Server, and Embedded Computers | p. 2 |
| Introduction | p. 3 |
| Addressing Modes and Instruction Formats | p. 5 |
| Instructions: The MIPS Core Subset | p. 9 |
| Instructions: Multimedia Extensions of the Desktop/Server RISCs | p. 16 |
| Instructions: Digital Signal-Processing Extensions of the Embedded RISCs | p. 19 |
| Instructions: Common Extensions to MIPS Core | p. 20 |
| Instructions Unique to MIPS64 | p. 25 |
| Instructions Unique to Alpha | p. 27 |
| Instructions Unique to SPARC v.9 | p. 29 |
| Instructions Unique to PowerPC | p. 32 |
| Instructions Unique to PA-RISC 2.0 | p. 34 |
| Instructions Unique to ARM | p. 36 |
| Instructions Unique to Thumb | p. 38 |
| Instructions Unique to SuperH | p. 39 |
| Instructions Unique to M32R | p. 40 |
| Instructions Unique to MIPS16 | p. 41 |
| Concluding Remarks | p. 43 |
| Acknowledgments | p. 46 |
| References | p. 47 |
| Index | p. 1 |
| Glossary | p. 1 |
| Further Reading | p. 1 |
| Table of Contents provided by Rittenhouse. All Rights Reserved. |