>This is like telling the waiter that you don’t eat poultry but eggs are okay, and then they bring you an egg, but that egg hatches into a chicken right after they bring it to you. Come on. [...] While self-modifying code is a powerful technique, it makes this problem "too easy;" I want to explore what programs can be written natively in the printable subset of X86.
A real challenge would be, how far can you cripple an instruction set such that it still can do something useful.
Crippling is done by reducing the 192 printable characters to 36 alphanumeric characters. That leaves 4 instructions with limited addressing modes.
This problem is hard because what you need, even for self modifying code is not available. What smile does is to make that available with the only two instructions left over that modify values: XOR and IMUL.
While smile is also impressive, I think you are unfairly downplaying tom7's work. While it uses bigger instruction set, it never executes any non-printable instruction at all.