Re: Turing -> von Neumann -> Intel et al
In the "First Draft" report on which the term "Von Neumann Machine" is based, the machine uses what we would today call a "tagged" memory architecture. If a word is intended to be an instruction, that tag will be set (magically, of course, by the not-really-specified processing of loading the program, and cannot be changed thereafter. The interesting thing is what happens to "crossed use", i.e. fetching "data" as an instruction or read/writing "instructions".
Tagged as Instruction, used as an instruction:
"normal"
Tagged as data, used as data:
"normal"
Tagged as data, used as instruction:
effectively a "load immediate"
Tagged as instruction, used as data:
Read normally, but masked on store (only address bits of instruction changed)
Note that like the ENIAC example, one could always write an emulator for a machine that could alter its (the emulated machine's) instructions on the fly, but the only way to change the actual machine's program was to load a new one, in some unspecified way.
Another interesting wrinkle was that there were no conditional branches. Only conditional expressions like the C "?:" operator (or ARM predicated instructions). The resulting value could then be used to alter the target address of a Jump instruction, which could then be executed.