Recently, I found an application written not very well in assembler. It was composed of a lot of invoke statements and undocumented (as in NO comments what so ever) assembler.

Going though this, the writer did some real atrocities like never taking stuff off of the stack.

My general feeling of this program was that it could have been done in C making the code a lot clearer and less buggy.

I agree that if you know what you are doing, you could create some wonderful apps with assembler, but I also feel that sometimes that is a very big IF. I am not against assembler optimizations or coding in assembler in general, but if you are, you should do it right.