Good question! Assembly is one of those languages which is challenging to learn but once you have got the hang of it very good to know for your continued programming knowledge.
x86 assembly (8086 and its derivatives) is fine to learn and I think easier than other architectures such as 6502. When I was younger I wrote an operating system in x86 assembly which was fun. Personally the book which helped me the most was Randall Hyde's Art of Assembly (I have a copy in paper format somewhere) but you can view it onlike at http://homepage.mac.com/randyhyde/webster.cs.ucr.edu/www.artofasm.com/index.html
More IBM Compat PC limited (and DOS specific in parts) but have a look at Ralph Brown's interupt list (Google it) which is also quite invaluable.
As a matter of fact, if you want to start doing more advanced assembly then x86 is a real mess (you have to work with real, protected, virtual mode) but for simple learning and embedding in languages like C then it is quite ok.
Incidently, whilst assembly is good to learn and will teach you a huge amount about the way machines work. Apart from a couple of cases (operating systems and compilers come to mind) it is a bad idea to write an application now adays in assembly. Why? Well because the code will be very complex resulting in it being difficult to write, maintain and unportablee but importantly compilers are so advanced nowadays that the optimisations performed on higher level languages almost always outperform hand crafted assembly/machine code. I can almost guarantee that if you write some code in a third generation language it will outperform that written in a first or second generation language because of this.