IMO, asm makes sense for cramming the most speed and functionality into a the smallest memory, when the recurring product cost is paramount and the NRE has a larger amoritization base.
Otherwise, I have found today's good C compilers to be very close, e.g., the "tiny" model in CodeVision, with 8 bit pointers (which GCC lacks) crammed a really complicated program into a 2313. I was impressed. In my earlier days, on core-memory-era mini-computers, I wrote zillions of lines of code in asm as it was the fashion then. Occasional use of asm in teeny micros or for the famous 80/20 issue (20% of code is 80% of the execution time).