Years ago, I have learned x86 assembly. I have lot of time, and it was a pleasure to dive into the low level programming. Programming in assembly is quite easy, however tons of code are required to do simple things. So it is very inefficient to solve simple problems in assembly, and it is even more inefficient to solve complicated problems in assembly.
Who uses the assembly language today?
As far as I know, the deepest level o C optimization, is done with inline assembly, many video decoders (H.264, and others) make use of assembly language to optimize most use and time/performance critical parts of the code. Virus programmers, and anti-virus programmers (probably those two groups are the same guys).
Assembly snippets in time sensitive sections be can boost the performance of the application, however it is debugging of the code is quite time consuming.
Recently I have participated in the fourth edition of Olimex Weekend Programming Challenge (http://olimex.wordpress.com/2013/04/15/weekend-programming-challenge-issue-4-solutions/). I played a little with assembly, my solution is quite fast (it is still a little faster then C implementations).
It was fun, to use this old and maybe forgotten language, to solve the simple problem.
You can see my assembly solution here: https://github.com/OLIMEX/WPC/tree/master/ISSUE-4/SOLUTION-29
After the publication I have optimesed the code little bit, to use registers more often, then the in-memory variables: