Generating machine-language that works is not difficult, and in many ways
easier than generating C (e.g., in C you have to worry about overrunning
the C compiler's statement length and parser stack limitations, and about
guaranteeing the proper ordering of side-effects). This is especially
true if you have a decent assembly macro system to build your own little
'mini-machine', which has no overlapped operations, no branch delay slots,
etc. The hard part, of course, is to generate machine language that
actually runs faster than the compiled (and optimized) C.

I would imagine that for many students, the problem is that you have to
know the machine language pretty well before you can generate code in it,
and many of the students may not be that experienced in assembler.
--