I'm working my way through a computer science degree and despite being exposed to assembly programming, courses tend to focus on RISC architectures like MIPS. While the general ideas of assembly programming are similar across all architectures, the PC market is mostly x86 and I find myself lost in the adx, eax, ebx, movl, etc. soup.

The twist (if you want to call it that) is that I'm not a hardcore assembly nut who thinks that "performance means using assembly" and I avoid assembly programming when I can move up the abstraction chain without significant consequences. However, reading things like Raymond Chen's blog, Understanding the Liunx Kernel, and Windows Internals makes me wish I could follow x86 better.

So with that in mind, I'm looking for a book that explains the x86 assembly language as well as the x86 architecture in general. A list of all the instructions and what they do is not what I'm looking for. I'm curious about the whole architecture from areas such as booting to disk and other device access. I'd also prefer something that's readable as opposed to a link to the Intel or AMD hardware reference manuals. Something reasonably current would be nice. It doesn't have to cover x64 extensions, but I definitely want coverage of i386/32-bit.