The best way to learn without taking a formal course is to write simple programs and take a look at the assembly. Write a simple hello world in C, and run "objdump -dt filename > outfile.asm" on the executable. This will produce an assembly listing with corresponding symbol table. The assembly used is GNU assembly. Different processors have different languages, and dialects exist within each subset (I've seen three separate dialects of assembly that do the same thing on a Motorola Coldfire processor, plus GNU assembly makes 4). If you learn GNU assembly, you can use GNU tools and hence make your life easier.
A word of warning...things like subroutine jumps are going to make little sense unless you have a feel for how compilers work. I suggest you google for things like parameter passing (register vs stack-based) in assembly before you try to tackle that.