Introduction to Computer Organization: An Under the Hood Look at Hardware and x86-64 Assembly
This hands-on tutorial is a broad examination of how a modern computer works. Classroom tested for over a decade, it gives readers a firm understanding of how computers do what they do, covering essentials like data storage, logic gates and transistors, data types, the CPU, assembly, and machine code.
Introduction to Computer Organization gives programmers a practical understanding of what happens in a computer when you execute your code. You may never have to write x86-64 assembly language or design hardware yourself, but knowing how the hardware and software works will give you greater control and confidence over your coding decisions. We start with high level fundamental concepts like memory organization, binary logic, and data types and then explore how they are implemented at the assembly language level.
The goal isn’t to make you an assembly programmer, but to help you comprehend what happens behind the scenes between running your program and seeing “Hello World” displayed on the screen. Classroom-tested for over a decade, this book will demystify topics like:
- How to translate a high-level language code into assembly language
- How the operating system manages hardware resources with exceptions and interrupts
- How data is encoded in memory
- How hardware switches handle decimal data
- How program code gets transformed into machine code the computer understands
- How pieces of hardware like the CPU, input/output, and memory interact to make the entire system work
Author Robert Plantz takes a practical approach to the material, providing examples and exercises on every page, without sacrificing technical details. Learning how to think like a computer will help you write better programs, in any language, even if you never look at another line of assembly code again.
Title Page Copyright About the Author Preface Who This Book Is For About This Book The Programming in the Book Why Read This Book? Chapter Organization Efficient Use of This Book Acknowledgments Chapter 1: Setting the Stage Computer Subsystems Program Execution The Programming Environment What You’ve Learned Chapter 2: Data Storage Formats Describing Switches and Groups of Switches Representing Switches with Bits Representing Groups of Bits Using Hexadecimal Digits The Mathematical Equivalence of Binary and Decimal Getting to Know Positional Notation Converting Binary to Unsigned Decimal Converting Unsigned Decimal to Binary Storing Data in Memory Expressing Memory Addresses Characters Unsigned Integers Exploring Data Formats with C C and C++ I/O Libraries Writing and Executing Your First C Program Examining Memory with a Debugger Using Your Debugger Understanding Byte Storage Order in Memory What You’ve Learned Chapter 3: Computer Arithmetic Adding and Subtracting Unsigned Integers Adding in the Decimal Number System Subtracting in the Decimal Number System Adding and Subtracting Unsigned Integers in Binary Adding and Subtracting Signed Integers Two’s Complement Computing Two’s Complement Adding and Subtracting Signed Integers in Binary Circular Nature of Integer Codes What You’ve Learned Chapter 4: Boolean Algebra Basic Boolean Operators Boolean Expressions Boolean Algebra Rules Boolean Algebra Rules That Are the Same as Elementary Algebra Boolean Algebra Rules That Differ from Elementary Algebra Boolean Functions Canonical Sum or Sum of Minterms Canonical Product or Product of Maxterms Comparison of Canonical Boolean Forms Boolean Expression Minimization Minimal Expressions Minimization Using Algebraic Manipulations Minimization Using Karnaugh Maps Combining Basic Boolean Operators What You’ve Learned Chapter 5: Logic Gates Crash Course in Electronics Power Supplies and Batteries Passive Components Transistors MOSFET Switch CMOS Switch NAND and NOR Gates NAND as a Universal Gate What You’ve Learned Chapter 6: Combinational Logic Circuits The Two Classes of Logic Circuits Adders Half Adder Full Adder Full Adder from Two Half Adders Ripple-Carry Addition and Subtraction Circuits Decoders Multiplexers Tristate Buffer Programmable Logic Devices Programmable Logic Array Read-Only Memory Programmable Array Logic What You’ve Learned Chapter 7: Sequential Logic Circuits Latches SR Latch Using NOR Gates SR Latch Using NAND Gates SR Latch with Enable The D Latch Flip-Flops Clocks D Flip-Flop T Flip-Flop JK Flip-Flop Designing Sequential Logic Circuits Designing a Counter Designing a Branch Predictor What You’ve Learned Chapter 8: Memory The Memory Hierarchy Mass Storage Main Memory Cache Memory Registers Implementing Memory in Hardware Four-Bit Register Shift Register Register File Read-Write Memory Static Random-Access Memory Dynamic Random-Access Memory What You’ve Learned Chapter 9: Central Processing Unit CPU Overview CPU Subsystems Instruction Execution Cycle x86-64 Registers General-Purpose Registers Status Register C/C++ Integral Data Types and Register Sizes Using gdb to View the CPU Registers What You’ve Learned Chapter 10: Programming in Assembly Language Compiling a Program Written in C From C to Assembly Language Assembler Directives That We Won’t Use Assembler Directives That We Will Use Creating a Program in Assembly Language Assembly Language in General First Assembly Language Instructions Minimal Processing in a Function Using gdb to Learn Assembly Language AT&T Syntax What You’ve Learned Chapter 11: Inside the main Function The write and read System Call Functions Passing Arguments in Registers Position-Independent Code The Call Stack Stacks in General Inside the Function Prologue and Epilogue Local Variables in a Function Variables on the Stack Stack Corruption Not Using the C Runtime Environment What You’ve Learned Chapter 12: Instruction Details Looking at Machine Code Instruction Bytes Opcode Bytes ModR/M Byte REX Prefix Byte Immediate Addressing Mode Memory Addressing Modes Direct Memory Addressing Register Indirect with Offset Register Indirect with Indexing SIB Byte Jump Instructions Assemblers and Linkers The Assembler The Linker What You’ve Learned Chapter 13: Control Flow Constructs Jumps Unconditional Jumps Conditional Jumps Iteration while Loop for Loop do-while Loop Selection if Conditional if-then-else Conditional switch Conditional What You’ve Learned Chapter 14: Inside Subfunctions Scope of Variable Names in C Overview of Passing Arguments Global Variables Explicitly Passing Arguments Passing Arguments in C What’s Going On in Assembly Language Handling More Than Six Arguments Pushing Arguments onto the Stack Storing Arguments Directly on the Stack Summary of Stack Frame Usage Static Local Variables What You’ve Learned Chapter 15: Special Uses of Subfunctions Recursion Accessing CPU Features in Assembly Language A Separate Function Written in Assembly Language Inline Assembly Language What You’ve Learned Chapter 16: Computing with Bitwise Logic, Multiplication, and Division Instructions Bit Masking Bit Masking in C Logic Instructions Bit Masking in Assembly Language Shifting Bits Shifting Bits in C Shift Instructions Shifting Bits in Assembly Language Multiplication Multiplication in C Multiply Instructions Multiplication in Assembly Language Division Division in C Division Instructions Division in Assembly Language What You’ve Learned Chapter 17: Data Structures Arrays Arrays in C Arrays in Assembly Language Records Records in C Records in Assembly Language Passing Records to Other Functions in C Passing Records to Other Functions in Assembly Language What You’ve Learned Chapter 18: Object-Oriented Programming Objects in C++ Using Objects in C++ Defining Class Member Functions Letting the Compiler Write a Constructor and Destructor Objects in Assembly Language What You’ve Learned Chapter 19: Fractional Numbers Fractional Values in Binary Fixed-Point Numbers When the Fractional Part Is a Sum of Inverse Powers of Two When the Fractional Part Is in Decimal Floating-Point Numbers Floating-Point Representation IEEE 754 Floating-Point Standard SSE2 Floating-Point Hardware xmm Registers Programming with Floating-Point Numbers Floating-Point Arithmetic Errors Comments About Numerical Accuracy What You’ve Learned Chapter 20: Input/Output Timing Considerations Memory Timing I/O Device Timing Bus Timing Accessing I/O Devices Port-Mapped I/O Memory-Mapped I/O I/O Programming Polled I/O Interrupt-Driven I/O Direct Memory Access Polled I/O Programming Algorithms UART Memory-Mapped I/O in C UART Memory-Mapped I/O in Assembly Language UART Port-Mapped I/O What You’ve Learned Chapter 21: Interrupts and Exceptions Privilege Levels CPU Response to an Interrupt or Exception External Interrupts Exceptions Software Interrupts System Calls The int 0x80 Software Interrupt The syscall Instruction What You’ve Learned Index
How to download source code?
1. Go to:
2. Search the book title:
Introduction to Computer Organization: An Under the Hood Look at Hardware and x86-64 Assembly, sometime you may not get the results, please search the main title
3. Click the book title in the search results
3. Download the Source Code.
1. Disable the AdBlock plugin. Otherwise, you may not get any links.
2. Solve the CAPTCHA.
3. Click download link.
4. Lead to download server to download.