My son just finished 9th grade and wanted to know about machine language and assembly language. I got him a Digirule 2U from bradsprojects and it clicked immediately. He wrote his first programs by hand and bit-banged them from the front panel, just like I once did on a Cosmac ELF. He found bugs and patched his programs. By playing with it, he learned about addressing modes, self-modifying code, the usefulness of a stack for implementing function calls... all of this he taught himself, in the space of a few afternoons. And just as he understood that programming like this was becoming very tedious, I showed him a symbolic assembler.