The reference manuals are a very good resource, but probably not the best place to start initially. Keep in mind if you are using gas (the gnu assembler), that it uses AT&T syntax and not Intel syntax. The biggest difference is the order of the operands for the instructions are reversed compared to how they are listed in the manual.
As I recall back in the day, I got more from anything written by Michael Abrash, a serious gearhead back in the 80's who eventually joined Id Software.
If you truly want to understand the x86, you should first learn the 4004, then the 8008, then the 8080, then the 8088, then 8086, then the 80186, then the 80286, then the 80386, then you can go in a number of directions that others have suggested.
Start with 386/486 in 32-bit protected mode. Segmented addressing sucks and is not used. The 8086 also has a lot of extra instructions like LOOP which are useful only if you want to be a demo coder. On modern x86 many of these instructions aren't used.
I learned with a fabulous book that I believe was called "80836 Assembly Programming" or some such, from Microsoft Press. Also did a really good job of explaining the processor architecture, although I don't know how much that's changed between the x86 and the current generation. A lot, I assume. I know the P4 has a very different register set. I believe the instruction set is largely the same, however.
I can try and find it in my basement, if you really need it.
11 comments
[ 0.25 ms ] story [ 26.8 ms ] threadThis book however covers protected mode(80386 and later) and not real mode(8086).
Introduction to 80X86 Assembly Language and Computer Architecture http://www.amazon.com/exec/obidos/ASIN/0763717738
The Art of Assembly Language http://www.amazon.com/exec/obidos/ASIN/1886411972
Essentials of 80x86 Assembly Language http://www.amazon.com/exec/obidos/ASIN/076373621X
[1] http://webster.cs.ucr.edu/AoA/index.html
I can try and find it in my basement, if you really need it.