> On Sep 17, 2015, at 5:52 PM, Jay Jaeger <[email protected]> wrote:
> 
> 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?

Yes, that's why I said "software breakpoints", meaning breakpoints created by 
replacing the instruction with a break instruction, as opposed to "hardware 
breakpoints" which use address trap instructions.  Perhaps that's not universal 
terminology, but it's what GDB calls these things.  

> 
> Also, if the machine had explicit handling of overlays/segments, then
> that part of this becomes identical to #1.  (Burroughs?)

Or it's outside the picture entirely.  I was thinking of virtual address space 
here.  If you have paging or the like with physically addressed caches, then 
those are part of #1, yes.

        paul

Reply via email to