On 9/17/2015 2:27 PM, Paul Koning wrote:
>
>> On Sep 17, 2015, at 2:56 PM, dwight <[email protected]> wrote:
>>
>> What is the definition of self modifying?
>> Is it changing an instruction to execute in the thread to be run?
>> How about adding or subtracting something to be done in an execution
>> queue?
>
> I'm not sure if there is a universally agreed to definition.
>
> It also matters why the question is asked. I can think of a couple of
> answers:
>
> 1. the contents of instruction memory is subject to change.
>
> 2. the contents of instruction memory is subject to change during execution
> of the program.
>
> 3. individual instructions in a program are changed by the execution of that
> program.
>
> 4. individual instructions in a program are changed by explicit data
> manipulation actions of that program.
>
> #1 is true for most computers past and present, because they allow a program
> to be loaded into memory from external storage.
>
> #2 is true in any program that uses overlays, or if the program is controlled
> by a debugger that uses "software breakpoints".
Don't / didn't some machines do/did this by setting an address trap
register rather than modifying the breakpointed instruction?
Also, if the machine had explicit handling of overlays/segments, then
that part of this becomes identical to #1. (Burroughs?)
>
> #3 is true for some older ISAs where subroutine call writes a return address
> or jump back to the caller into the program address space. Examples are CDC
> 6000 systems (CPU and PPU).
>
> #4 is perhaps the best definition to capture the particular programming style
> that was once common and is now quite rare (though not quite extinct). It
> might be as simple as modifying the address field of an opcode, to do
> indexing when the ISA does not have indexing instructions or registers. Or
> it might be something trickier, where a function does one of two similar
> things depending on an argument passed in, which then causes the body of the
> function to be modified in the prologue.
>
> There's a bizarre variant of #3 seen in the Electrologica EL-X1, where there
> is an addressing mode ("C") that adds the B-register contents to the base
> address that's in the opcode, but then writes the resulting address back into
> the instruction. (So doing repeated C mode operations with B == 1 will walk
> through consecutive addresses in memory, leaving the code pointing at the
> first word after the end of the buffer referenced.) Needless to say, this
> makes no sense, was probably in practice rarely if ever used, and disappeared
> in the successor to that machine (the EL-X8 -- where the same opcode encoding
> was used for stack addressing, with B incremented or decremented to produce
> the standard stack access patterns). See Dijkstra's Ph.D. thesis for details.
>
> paul
>