I'd start by buying a reference manual somewhere.<p>Then go and implement some algorithm that you can follow completely in C, and use whatever flag your compiler uses to spit out the assembly code.<p>Then take that reference manual and go through the instructions one by one to see how a stack frame is built up under the hood and how your algorithm was translated from the high level 'readable' representation to the lego blocks of assembler.<p>That should give you a bit of a start, after that when you think you have a good enough understanding of how all that works try making that code faster.<p>For best understanding of the generated code and a fair chance at achieving some optimization you should probably do all this with your compiler optimizations off.<p>Good luck and have lots of fun, you will definitely benefit from learning assembler.<p>edit: Make sure you take lots of time for this, learning assembler is not like learning other languages, there are no friendly error messages, most of the time what you write will produce an executable but it will crash horribly in the beginning.<p>Single stepping through your code and watching the registers and flags change is an invaluable tool.<p>I wished I had a half decent debugger when I first learned assembler, it would have probably saved me a year.
Yeah, pretty much a desire to learn it and not get too frustrated if things don't go your way at first. I'm still learning too, but there are some good tutorials out there. Here are a few links:<p><a href="http://webster.cs.ucr.edu/AoA/" rel="nofollow">http://webster.cs.ucr.edu/AoA/</a>
<a href="http://dennishomepage.gugs-cats.dk/BASM-filer/BASMForBeginners.htm" rel="nofollow">http://dennishomepage.gugs-cats.dk/BASM-filer/BASMForBeginne...</a>