CrossJava wrote:
I'm 13 and already mastered most of the other languages, now it's time for a challenge.
When I was 13, I learned Pascal and didn't really get it. I'm 30 now, and have been working in C almost exclusively for half my life and I still find new and interesting ways to shaft yourself in it. There is quite an astounding complexity to it, and C is a very simple language. C++ is way more complicated (the only known document more complicated than the C++ standard is the US tax code), and has even more and interesting ways to shaft yourself.
You want a challenge, you can look at functional languages. Personally I like Haskell, but I'm terrible at it. It's the exact opposite of the problem I have with C++. Looking at functional or declarative languages (like Prolog) would also widen your perceptions, instead of remaining in the strictly imperative world. But if you want to learn assembler, take any C program, rewrite all control flow in terms of goto and also remove all logical composition (logical AND and OR operators), and then imagine that with five times the line count, and that is basically assembler.
I learned assembler for Win32, back when I still used Windows on my development machine, and I quickly learned how pointless it all is. Win32 API is defined mostly in terms of functions, so your code will, at least initially, be something like 90% function calls. Those functions are external, there is almost nothing you can do to speed things up. Writing these long lists of function calls in assembler merely introduces human error into the mix. After debugging a program for hours and finding that the problem was one a compiler would have found (mixed up arguments, and one was missing), I dropped the venture. Today I use assembler only for that which is absolutely necessary.
If you are more of a theoretical type, I cannot recommend PowerPC assembler highly enough. It is way better than x86 assembler. But since I suspect you will want to try out your creations, and you are unlikely to have an old PowerMac lying around, that is not really an option. I suppose qemu could help out.