I can definitely second learning assembly. In my sophmore year of college, I borrowed an AVR (8-bit RISC processor) development board from one of the labs in my school, and learned to program it in assembly. Prior to this, I didn't have a real understanding of what the compiler did, or how my code was actually executed. Learning assembly was really a computing revelation for me.
Admittedly, I am an EE and generally work at a lower hardware level than I think the poster is imagining, but I think it is worth while none the less. My suggestion is take a simple 8-bit processor (AVRs are great! Check out avrfreaks.net) and get a $50 dev board (or even simulator), and learn on that. If you try to do assembly on an x86, I think you will be overwhelmed.
Of course, even doing embedded systems, I don't write anything in assembly (I use C or C++, some C# and perl for PC side things). And you certainly won't either. But understanding it makes you see the code you are writing differently. Plus, its often useful when debugging to be able to view and understand the disassembly (OK, this doesn't apply so much for something like C# or java).
Many of the current commercial languages belong in toyland. They are designed for programmers who really don't have any idea about managing resources efficiently.
A few years ago, I didn't think I would ever say this, but I love C# for all of the PC utility applications I tend to write. You are right, many languages like this are not particularly run-time efficient, but they are fast, easy, and powerful for development.