I'd have to disagree with this. It's been a seriously long time since I had to do this. Mind you, I still look at the ASM the compiler generates, just to make sure it's generating the code I expect.I think alot of C developers like to speed up their code by using ASM
Writing ASM is very much the last resort when it comes to speeding up your code - there are so many other things you can do before you have to do this.
It is also very hard to do - especially on modern processors with multiple stage pipelines, and in some cases multiple execution units. Being able to program for such processors to their best advantage will take a lot of effort (non-portable learning effort I might add).
http://www.ontek.com/mikey/optimization.html
The only real reason for using ASM is as Witch_King says, writing operating systems, where the compiler cannot generate the instructions you require. These typically being the supervisor level instructions for managing cache, memory management units and so on.