Programming from the Ground Up uses Linux assembly language to teach new programmers the most important concepts in programming. It takes you a step at a time through these * How the processor views memory * How the processor operates * How programs interact with the operating system * How computers represent data internally * How to do low-level and high-level optimizationMost beginning-level programming books attempt to shield the reader from how their computer really works. Programming from the Ground Up starts by teaching how the computer works under the hood, so that the programmer will have a sufficient background to be successful in all areas of programming.This book has been used by universities as diverse as Princeton and DeVry.
Great introduction to programming at a base level. Only knock is that it is older and the focus on x86 makes it a little less relevant for most machines students will be working on. Nothing that booting up a virtual environment doesn't solve though.
A really nice introduction to low level programming in assembly. Only catch seems to be the book is a little old, and most of the programs are written for 32-bit architectures, that need some refactoring to run on modern 64-bit systems.
This is a great book for getting you introduced on how computers work at low-level (layout of programs, memory and virtual memory, system calls, i/o) and to help you learn the basis of assembly programming (the examples are written in GAS but it also explains Intel syntax). It is very didactic book, well-written and easy to follow. And it is free available (I downloaded from a GNU-related site). It is a pity Jonathan Barlett hasn't written more books.
One might think it is not necessary to be familiar with ASM these days, another might think this book is outdated, but looking from the C/C++ programmer point of view I would definitely recommend this book, of course, you won't become professional assembly developer, but you'll get a taste of it, this feeling, when you're in charge of pretty much everything. It also nice to see how C and C++ are actually close to the ASM, and thus hardware.