Assembler is hardcore. I think it's the second lowest level language you can get, the first being machine code.
As gkm said, compilers can look at the 'bigger picture' and optimize for the entire program flow. This would be very hard to do yourself (but not impossible!) in ASM.
ASM Advantages:
100% Fat-Free - only code what you need
Very Fast - because you only code what you need and the language grants you more freedom in optimizing
Lower Binary Size - as above
Awesome on platforms with memory and processing constraints
ASM Disadvantages:
Not feasible for large applications
More complex due to low level nature
Platform (CPU) dependent - harder to port to different devices
Hard To Maintain (in terms of time needed to code functionality/fixes/etc...)
Game engines for example, mostly use C++ today. Only certain parts of the code are written in assembly and that is usually where bottlenecks would be or a great performance benefit would be obtained.
Today's compilers do a great job (and they're getting better all the time). They can even use the CPU's enhanced instruction sets (SSE, SSE2, MMX, etc...) to squeeze even more performance out of your code. The Intel C++ compiler is great at doing this. It will even try and parallel execute your code for you in loops and such.
If you wrote something in ASM (and you were good at optimizing / taking advantage of a platform's special instruction set) you would be able to beat it though.
The question is, why would you want to? You could put that time in to implementing features or working on a better design. When you do find a performance bottleneck that you cant get around then maybe ASM would be the answer...but then you would need to ask yourself why that's happening. Is it your design? Is it the hardware constraints? Is it the program requirements? Mmmm...
Much to ponder!