On 9/17/2015 2:27 PM, Paul Koning wrote:
> 
>> On Sep 17, 2015, at 2:56 PM, dwight <dkel...@hotmail.com> 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
> 

Reply via email to