Related articles |
---|
[2 earlier articles] |
Re: Compiler and interpreter origins rweaver@ix.netcom.com (Dick Weaver) (2004-08-05) |
Re: Compiler and interpreter origins gah@ugcs.caltech.edu (glen herrmannsfeldt) (2004-08-05) |
Re: Compiler and interpreter origins rbates@southwind.net (Rodney M. Bates) (2004-08-09) |
Re: Compiler and interpreter origins nick.roberts@acm.org (Nick Roberts) (2004-08-09) |
Re: Compiler and interpreter origins nmm1@cus.cam.ac.uk (2004-08-09) |
Re: Compiler and interpreter origins slimick@venango.upb.pitt.edu (John Slimick) (2004-08-09) |
Re: Compiler and interpreter origins Martin.Ward@durham.ac.uk (Martin Ward) (2004-08-10) |
Re: Compiler and interpreter origins samiam@moorecad.com (Scott Moore) (2004-08-10) |
Re: Compiler and interpreter origins beliavsky@aol.com (2004-08-11) |
Re: Compiler and interpreter origins david.thompson1@worldnet.att.net (Dave Thompson) (2004-08-23) |
Re: Compiler and interpreter origins jeremy.wright@microfocus.com (Jeremy Wright) (2004-08-25) |
Re: Compiler and interpreter origins torbenm@diku.dk (2004-09-03) |
Re: Compiler and interpreter origins gah@ugcs.caltech.edu (glen herrmannsfeldt) (2004-09-07) |
From: | Martin Ward <Martin.Ward@durham.ac.uk> |
Newsgroups: | comp.compilers |
Date: | 10 Aug 2004 17:31:16 -0400 |
Organization: | Compilers Central |
References: | 04-07-077 04-08-028 |
Keywords: | history, comment |
Posted-Date: | 10 Aug 2004 17:31:16 EDT |
On Thursday 05 Aug 2004 7:27 pm, you wrote:
> [The IBM 360 architecture specifically permits instruction modification
> without extra serialization. I gather it's still a pain for hardware
> implementers, although it's now much more common to do an EXecute
> instruction to run one instruction created at runtime. -John]
Self-modifying code is common in IBM assembler code in daily use today.
The most common form is a NOP modified to a branch instruction,
for example:
LABEL1 NOP LABEL2
OI LABEL1+1,X'FO'
The Or-Immediate changes the second byte of the NOP: converting
the instruction from a "branch never" to a "branch always".
You save one bit of memory and a whole compare instruction!
The EXecute instruction loads the target instruction into memory,
overwrites part of it with the contents of a register, and executes
the result. It is most often used to produce a variable length move.
But I have seen EXecute used as a sort of one-instruction
subroutine call: EX is only four bytes, so if you use EX to EXecute
a six byte instruction, then you are saving two bytes!
--
Martin
Martin.Ward@durham.ac.uk http://www.cse.dmu.ac.uk/~mward/ Erdos number: 4
[Eeeww. I didn't even do that back in 1970. -John]
Return to the
comp.compilers page.
Search the
comp.compilers archives again.