Programming at the Hardware/Software Interface is a textbook appropriate for an undergraduate Computer Systems Engineering or Computer Organization course. While students and professionals typically rely upon computing abstractions, this publication strips away the abstractions and introduces students to the underlying realities of computer systems. Students will learn not only details of how computers perform the low-level work, but also the limitations and some of the surprising things that happen when programs run up against those limitations. The textbook contains the amount of material that can be covered in a 15-week academic semester, divided into twelve chapters covering topics such as data representation, integer and floating point arithmetic, assembly language, processor design, memory organization, concurrency, and security. Each chapter provides a preamble to motivate the chapter’s topic, guides the student through the topic, and concludes with a “reality check” section that relates the chapter’s topic to real-world examples.
Chapter 1 Introduction
Chapter 2 Putting "Digital" In Digital Computers
Chapter 3 Integer Representation and Arithmetic
Chapter 4 Floating-Point Representation and Arithmetic
Chapter 5 Assembly Language
Chapter 6 The Compiler Cookbook
Chapter 7 Concurrency In Your Program
Chapter 8 Processor Microarchitecture
Chapter 9 Concurrency, Your Program In the Computer System
Chapter 10 Computer Memory
Chapter 11 Security Issues
Chapter 12 Optimizing Your Programs