As was noted by jstrieb, there exists a compiler that does that, so basically any native program. There is no challenge in that.
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.