I agree with you in principle, but Lordy, 'C' has saved me thousands of
hours of effort doing loops, conditionals, string manipulation etc. over
straight assembler.
I don't see these things (with the possible exception of strings) as
being all that difficult in assembler. One tends to do things the same
way each time. When I was doing a lot of MASM I had a toolbox of
macros for strings (and other similar functions) when I had to go
there. The big difference between assembler and HLLs that I could see
was in the eye-candy and computations. I didn't see any advantage for
bit-banging. IMO, assembler is much clearer here.
I've used it for a lot of things, from the normal spreadsheet sorts of
things, to logic simulation and demonstration, to some fairly complex
functions. Someone once wanted a demonstration of ECC, so I coded up
and example (using an SDRAM interface as an example) in a few minutes.
We've done simulations of asynchronous logic with a spreadsheet. Get
one black-box done and block-copy multiple levels. Change a bit and
see the result.
Then there are the obvious spreadsheet type functions. Last year I had
to capture logic verification patterns to be used as input to a circuit
simulator. To do this I had to track the entity declarations of the
circuit's black-box back through several levels of hierarchy to the
signals driving them and generate pin-lists for the capture software.
Formatting the pinlists was a freebie (do it once and copy/paste) once
the signals were traced. As another freebie I output the pinlists for
the waveform viewing tool so we could see what patterns we were
capturing. Not any great shakes here, but all the formatting was
essentially free.
There are also functions buried in there that are quite useful to an
engineer (e.g. FFT).