Whilst I feel that writing entire apps in asm is purely for the insane / demo coder, you can't know too much. It's worthwhile knowing asm, even if only for debugging compiler output.
Primarily I program in C++, then C. However, once any piece of software becomes specialised for a system, the dependency issue largely is out of your hands anyway.
Then you find that sometimes, no matter how efficient your algorithms in C/C++ code, some intensive function call is still too slow, especially if you are developing for a 680x0 system say.
Knowing asm is good for these situations especially. You keep the C++ code and conditionally compile away the C++ function definition when compiling for the system you wrote the asm version for.
Your project is still portable, just fine tuned on the particular implementations.