I figure you can't really say you understand a programming language until you can re-implement it from the ground up.
So that's my intermediate goal.
Spot on about C/C++ through the assembler route by the way, if there is one excellent way to really grok those then it is via the -S flag.
Implementing a language is complicated enough that by doing so you fully learn the implemented language AND the language used for implementation. Win-win!
It is a lot of fun, though. I once spent a delightful afternoon puzzling out how to subtract Church numerals knowing only that it was possible to do so, having previously worked out the far simpler addition and multiplication functions. Highly recommended!