The subtitle of this book is "Building a Modern Computer from First Principles", and that's precisely what it does, going through logic gates, processor design, machine code, assembly, a JVM-esque virtual machine, a compiler for a C-like language, and finishing up by constructing an operating system.
The authors' style is clear and concise, and their examples and problems have been carefully designed to capture the important details at each step while reducing complexity to a minimum. I think this is how computer science should be taught, and wish I'd had this book when I was first learning to program; while it's aimed at university-level students, there's nothing here that a suitably-interested young teenager couldn't handle.
Thanks very much to Matt Jadud for lending me his prerelease copy of this book. If you're at all interested in computer science, I'd strongly recommend getting a copy.
ISBN 978026214087.