> 1) Both this article and reference #3 make claims about not using or needing adders to avoid self modifying code, although both implement indexed addressing where you take a base address and a offset and er... um... argh... ADD them together. So you're using an adder but playing word games.
Your concern is addressed in this paper:
"It would appear that we are cheating slightly by allowing arithmetic in addresses. However, our "arithmetic" is of a very restricted form: the indexed instructions may only be used when R_{src} (or R_{dest} for stores) is an even-numbered memory address. Since offsets are always 0 or 1, then our "arithmetic" can be implemented as bitwise OR, or even bitstring concatenation."
Your concern is addressed in this paper:
"It would appear that we are cheating slightly by allowing arithmetic in addresses. However, our "arithmetic" is of a very restricted form: the indexed instructions may only be used when R_{src} (or R_{dest} for stores) is an even-numbered memory address. Since offsets are always 0 or 1, then our "arithmetic" can be implemented as bitwise OR, or even bitstring concatenation."