William Dudley via vcf-midatlantic writes:
IMHO, the difficult bit with assembly language is that you have to keep track of all the "book keeping" needed by your algorithm. If you need 10 variables, and array of 100 integers, and pointers to subroutines, then you have to keep track of all this stuff yourself. This means that you have to start planning on paper long before you write your first opcode. Of course, it also means that you have to be familiar with the machine architecture, how many registers it has, how much stack, etc, so that you can figure out WHERE you are going to store all the stuff you need.
First, that's one of the reasons that assemblers accept human assigned names for routines and fixed data location -- so you don't have to keep track of a routine or data pointer. Local data? Carve up the stack. Arrays? Machines with indexing make this much simpler that those without. If you really want a challenge, try writting assembly on a machine that doesn't possess branch instructions and executes multiple operations at one time! ;)