In my view, I feel the most important reason to learn asm is to get a deeper understanding of the machine and to be able to speed up your algorithms when you find that even the best optimization options along with your best source code optimization attempts don't quite live up to what you want. It would be frustrating to be stuck at this point because you didn't know assembly. Granted you need to know what your doing, ESPECIALLY if you are coding on a RISC machine. One person on this board had described being able to code at the compiler level after one year of coding. I'm curious how long it would take to do so on a RISC machine.
Personally I have yet to beat a compiler, but I have the understanding that a non-asm programmer wouldn't have. One great example is the subject of pointers. This subject is one of the most difficult for many beginning C programmers to grasp, yet I had absolutely no trouble. All I'm trying to do is grasp the syntax.
Another cool thing about knowing assembly is that many people will think your pretty cool.
I wonder if anybody has obtained any good degree of optimization when coding in MS IL (.net asm) or Java assembler. Any input here?