ASMBits is a collection of short assembly-language programming exercises and an online judge. The immediate feedback provided by an online judge is useful for practice: Learning something well requires many repetitions of making and correcting errors, and immediate feedback makes this process faster.
Program submissions are run through the CPUlator instruction-set simulator, then compared with the results produced by our reference solution. In addition to checking for the correct answer, ASMBits performs the same checks for adherence to various coding practices and conventions (e.g., forbidding self-modifying code) as in the interactive version of the CPUlator simulator.
The Nios II and ARMv7 instruction sets are taught in various courses at the University of Toronto, Thus, there are currently two sets of nearly-identical exercises, one for Nios II and one for ARMv7.
The problem set are based on the topics taught in ECE243 and ECE253 at the University of Toronto, the two courses I am most familiar with as a teaching assistant for 7 years. A course in computer organization covers topics beyond just "programming". Thus, some of the exercises (e.g., about caches) aren't strictly "programming", but are exercises whose solutions can be cast into an assembly-language program.