For undergraduate courses in computer architecture and organization. This new concise overview offers computer science students an introduction to the fundamental concepts of computer architecture, giving them a solid foundation for constructing programs that are more efficient and less prone to errors. Rather than focusing on engineering details, the text approaches basic architectural concepts from the view of the programmer. This text focuses on the essentials of computer architecture for programmers. It covers all aspects from the low-level building blocks to system-level architectures, and succinctly explains the interface between hardware and software. Sections on assembly language, virtual memory, caching, microcode, and device driver software provide critical insight into how programmers can design efficient, elegant, and reliable software. The key features are: covers the basics of digital logic and data representation, omitting unnecessary, low-level details; presents broad, accurate coverage of processors, memory, and I/O; includes an overview of assembly languages and programming paradigms; helps the reader understand the impact of systems architecture on programming and debugging; explains why hardware pipelining speeds execution and how programs are optimized to run on a pipeline architecture; discusses design and implementation trade-offs; contains "hands-on" lab exercises that allow students to put principles into practice; and provides a supporting Web site with instructor materials.