In university we we're taught a version of MIPS that was implemented into a decent simulator with an IDE showing the state of memory and registers with fine grained debug stepping. Some quirks of processor pipelines (i.e. nops after branch) could be enabled for realism or turned off to make things easier for new students.
That was pretty great for learning assembly, I can't comment on any other approach - no doubt there are other good options.
That was pretty great for learning assembly, I can't comment on any other approach - no doubt there are other good options.