here is how I learned it...
first learn the architecture of microprocessor....
familarize yourself with registers, memory addresses, number systems(binary,hex,oct(optional), and of course decimal)......, clocks, logic gates(just basics and operations).
learn addressing modes.
then learn opcodes of the microprocessor you are working on..
learn about code segments and data segments...
look at sample codes for add,subtract,multiply,divide (all are direct instructions in microprocessors, but it is good practice), then learn sqrt,lookup table,stacks and basic i/o with interrupts.
then just start programming