I would say that low-level programming is, in general, turmoil for the programmer's soul -- By definition, regardless of the language its expressed in, low-level programming is rather detached from the the problem said programmer is actually solving; instead, you are mostly bogged down in fickle technical details that are as unforgiving as they are fleeting. The average programmer needs to solve problems, not scratch a pedantic itch.
Its useful as a high-level programmer to have insight into the lower-level workings of the machine, but its not a realm that's critical to most. Programmer salaries, especially for great ones, are usually more than the cost of hardware. Its almost always more cost-effective to throw (several) faster CPUs or some extra boxes at a problem than it is to have your rock-star programmer spending 50% of his time making the code run 15% faster.
All of that said, as some kind of sadist who actually does enjoy bogging myself down in interesting details, its not unusual or wrong to enjoy low-level programming. Its an opportunity to think about things differently and to prove oneself capable and clever. And to produce work that feels as though you can be more proud of it. Its like building a handsome writing desk using only hand-tools -- impractical for sure, but also a more-careful production that is unmatched by modern tools in its attention to detail and ability to respond to the materials used.