To improve my skills in Intel Assembly, I ordered and read Assembly Language Step by Step, Programming with Linux, by Jeff Duntemann. Just for the record, I read it on my Amazon Kindle.
This book is really made for very beginners. The author is fan of metaphor to explain some concepts, comparing assembly to a game he explains in several pages… I didn’t liked the writing style of this book. In my opinion, the author uses way too much metaphor and some things takes too many pages to be explained. Another problem of this book is the examples, there are covering tens of pages each. It is a good thing to have complete examples in a book, but having examples of more than 100 lines of code (not counting the comments) in a book is not really convenient (again, only in my opinion).
Another lack of this book is that it covers only 32 bit programming. For a book written in 2009, it is quite limited. And finally, I found it bad to not cover floating point. I think that this is an important subject.
Even if I’m not a fan of this book, most of the content is still interesting and you can learn the basis of assembler with it if you’re patient with the writing style, the metaphors and the long examples.
If you are a real beginner in assembly and in programming in general, this book can still be valuable for you.
The first chapters are covering computer programming, processors, arithmetic in different bases and memory locations. Then, the following chapters are covering the tools (assembler, linker and visual tools for editing and debugging). After that, we are jumping in the heart of the subject by learning arithmetic computations, system calls and stack control. The bits instructions are covered in details in a whole chapter. Then, you will be introduced to the writing of functions and how to use string instructions to simplify your programs. The last (and very big) chapter is about using the functions of the C library to performs work like I/O operations, time calculations, print formatted text and generate random numbers. For this last I would have preferred to learn how to do all that operations using only assembly, but it is important to know how to call C functions.
To conclude, I will advice this book only to people who learn assembly as their first programming language. For the others, there is a high risk of be deceived.
Note that, if you want to follow the examples of this book, you’ll certainly need the Insight Debugger. You can install this debugger by following the procedure described here.