If you aren't fluent in assembly language, the biggest marginal benefit you get from learning it is the ability to read the assembly output from your C compiler for debugging or low-level optimization. For that purpose I've always recommended these two old MSDN columns by Matt Pietrek on Just Enough Assembly Language to Get By:
Once you have the fundamentals down, the best source for up-to-date knowledge relevant to performance optimization and assembly programming for x86 machines is Agner Fog's manuals:
That said, there is a lot of room for improvement on Matt Pietrek's columns. This is a great blog post series waiting to happen for anyone up to the task. Take out the cruft about ENTER, LEAVE, LOOP, etc, include more about basics like signed/unsigned comparisons (JG/JGE/JL/JLE are the signed counterparts of JA/JAE/JB/JBE, where the mnemonic is that 'A' stands for above and 'B' for below), and so on. I'm trying to get an assembly guru and technical blogger coworker of mine interested in writing this. If that doesn't work, maybe I'll have to roll up the sleeves and write it myself.
If you want to write trainers for video games, knowing Assembly is a must!
Well, sorta. Knowing just enough to get by, and being able to look up the rest is good enough.
I used to write trainers for the original XBox. Unlike PC trainers, which can often rely on simply putting the same value in the same memory location over and over, XBox required that you modify the code in memory.
I still do it for PC games occasionally, but it's gotten harder... Windows seems to try to prevent hacks by loading the code into different places in RAM each time.
tl;dr - There are still uses for Assembly other than just debugging.
Part 1: http://www.microsoft.com/msj/0298/hood0298.aspx
Part 2: http://www.microsoft.com/msj/0698/hood0698.aspx
They're outdated in some ways but still relevant.
Once you have the fundamentals down, the best source for up-to-date knowledge relevant to performance optimization and assembly programming for x86 machines is Agner Fog's manuals:
http://www.agner.org/optimize/
That said, there is a lot of room for improvement on Matt Pietrek's columns. This is a great blog post series waiting to happen for anyone up to the task. Take out the cruft about ENTER, LEAVE, LOOP, etc, include more about basics like signed/unsigned comparisons (JG/JGE/JL/JLE are the signed counterparts of JA/JAE/JB/JBE, where the mnemonic is that 'A' stands for above and 'B' for below), and so on. I'm trying to get an assembly guru and technical blogger coworker of mine interested in writing this. If that doesn't work, maybe I'll have to roll up the sleeves and write it myself.