My personal favorite is NASM, mostly because it's multi-platform, and it compiles MMX, SSE, 64-bit...
I started compiling some simple C source file with gcc, and "trans-coding" the assembler instruction from gcc-format into NASM-format. Then you can change small portions of code, and verify the performance improvement it brings.
The NASM documentation is really complete, I never needed to search for information from books, or other sources.