Я верю, что это правильно. Но Simpletron настолько тривиален, что самоизменяющийся код - это всего лишь три инструкции:
// address to load is in accumulator
ADD loadinstruction // construct load instruction
STORE $ + 1 // write instruction to next word of memory
... // placeholder filled in by write instruction
// value is in accumulator
loadinstruction: .data 2000
Это возможно только потому, что программа Simpletron делит память со своими данными. Некоторые компьютерные архитектуры этого не делают; например, линейка микроконтроллеров PIC. (Если ОЗУ имеет ширину 8 бит, а память программы - 14 бит!) Очевидно, что вы также не можете изменить программу, если она находится в ПЗУ.
Я не знаю, была ли это специфическая причина, по которой были разработаны режимы косвенной адресации, но это, безусловно, важная причина.