You're entirely correct. About 80% of my programming was in assembler. The purpose of the higher level languages is to introduce abstraction so that you can concentrate on solving the problem with a more human outlook, rather than accomodating the Von Neumann paradigm.
As machines get more powerful and have more resources, the abstraction becomes possible. It's less efficient in terms of the micro, but more efficient in terms of the programmer. Hardware costs are down and people costs are up, so the abstraction yields a better return on investment.
The deal is to ask yourself how you would solve the problem; forget the demands of the machine and work only with the demands of the specific language.
I'll work something up along C++ lines and post it.