Content deleted Content added
360 special usage |
m →Computer models: Added jump table wikilink |
||
(27 intermediate revisions by 8 users not shown) | |||
Line 1:
{{
{{Machine code}}
In a [[Instruction set architecture|computer instruction set architecture (ISA)]], an '''execute instruction''' is a [[machine code|machine language instruction]] which treats data as a machine instruction and executes it.
It can be considered a fourth mode of instruction sequencing after [[program counter|ordinary sequential execution]], [[branch (computer science)|branching]], and [[interrupt]]ing.<ref name="brooks">{{cite journal|first=F.P.|last=Brooks|author-link=Fred Brooks|title=The execute operations—a fourth mode of instruction sequencing|journal=Communications of the ACM|volume=3|issue=3|pages=168–170|date=March 1960|doi=10.1145/367149.367168|s2cid=37725430|doi-access=free}}</ref> Since it is an instruction that operates on other instructions like the [[repeat instruction]], it has also been classified as a meta-instruction.<ref>{{cite journal|first=George E.|last=Rossman|title=A Course of Study in Computer Hardware Architecture|journal=IEEE Computer|volume=8|issue=12|pages=44–63|date=December 1975|doi=10.1109/C-M.1975.218835|s2cid=977792}}, p. 50<!--no way to mention specific page as well as page range in Cite journal template?--></ref>
==Computer models==
Many computer families introduced in the 1950s and 1960s include ''execute'' instructions: the [[IBM 709]]<ref name="brooks"/> and [[IBM 7090]] ([[Assembly language#Mnemonics|op code mnemonic]]: {{mono|XEC}}),<ref>{{cite manual|publisher=[[IBM]]|title=Reference Manual, IBM 7090 Data Processing System|date=March 1962|page=36|url=http://www.bitsavers.org/pdf/ibm/7090/22-6528-4_7090Manual.pdf}}</ref> the [[IBM 7030 Stretch]] ({{mono|EX}}, {{mono|EXIC}}),<ref>{{cite manual|publisher=[[IBM]]|title=Reference Manual, 7030 Data Processing System|date=August 1961|page=50|url=http://bitsavers.org/pdf/ibm/7030/22-6530-2_7030RefMan.pdf}}</ref><ref name="brooks"/> the [[PDP-1]]/[[PDP-4|-4]]/[[PDP-7|-7]]/[[PDP-9|-9]]/[[PDP-15|-15]] ({{mono|XCT}}),<ref>{{cite manual|publisher=[[Digital Equipment Corporation]]|title=Programmed Data Processor-1 Manual|date=1961|page=14|url=http://gordonbell.azurewebsites.net/digital/pdp%201%20manual%201961.pdf}}</ref><ref>{{cite web|first=Bob|last=Supnik|title=Architectural Evolution in DEC's 18b Computers|page=8 (page numbers not shown)|url=http://simh.trailing-edge.com/docs/architecture18b.pdf}}</ref> the [[UNIVAC 1100/2200 series|UNIVAC 1100/2200]] ({{mono|EXRI}}),<ref>{{cite manual
|url=http://www.bitsavers.org/pdf/univac/1107/UT-2463_CPU_Nov61.pdf
|title=Univac 1107 Central Computer |date=November 1961|page=12{{hyphen}}1}}</ref> the [[CDC 1604#The 924|CDC 924]] ({{mono|XEC}}),<ref name=924Man>{{cite manual
|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/cdc/924/168B_CDC_924_Reference_Manual_Oct62.pdf
|title=Control Data 924 Computer Reference Manual |date=October 1962|page=2{{hyphen}}41}}</ref> the [[PDP-6]]/[[PDP-10|-10]] ({{mono|XCT}}), the [[IBM System/360]] ({{mono|EX}}),<ref name="s360">{{cite manual|publisher=[[IBM]]|title=IBM System/360 Principles of Operation|id=A22-6821-0|date=1964|page=65|url=http://bitsavers.trailing-edge.com/pdf/ibm/360/princOps/A22-6821-0_360PrincOps.pdf}}</ref><!--16, 32, or 48--> the [[GE-600 series|GE-600]]/[[Honeywell 6000 series|Honeywell 6000]] ({{mono|XEC}}, {{mono|XED}}),<ref name="GE635">{{cite manual|publisher=General Electric Computer Department|title=GE-635 System Manual|date=July 1964|page=A{{hyphen}}5|url=http://www.bitsavers.org/pdf/ge/GE-6xx/CPB-371A_GE-
Fewer 1970s designs include ''execute'' instructions
|url=http://lansdale.com/datasheets/sl8x305_rev0.pdf|publisher=Lansdale Semiconductor Inc.|accessdate=20 June 2017}}</ref> An ''execute'' instruction was proposed for the [[PDP-11]] in 1970,<ref name="pdp11x">{{cite web |last=van de Goor |first=Ad |date=September 21, 1970 |title=The Execute Instruction |url=http://bitsavers.informatik.uni-stuttgart.de/pdf/dec/pdp11/memos/700921_The_Execute_Instruction.pdf |id=PDP-11/40 Technical Memorandum 18}}</ref> but never implemented for it<ref name="pdp11">{{cite manual |url=http://bitsavers.org/pdf/dec/pdp11/handbooks/PDP11_Handbook1979.pdf |title=PDP11 Processor Handbook: PDP11/04/34a/44/60/60 |date=1979 |publisher=[[Digital Equipment Corporation]]}}</ref> or its successor, the [[VAX]].<ref>{{cite manual |url=https://www.ece.lsu.edu/ee4720/doc/vax.pdf |title=VAX MACRO and Instruction Set Reference Manual |date=April 2001 |publisher=[[Compaq Computer Corporation]] |id=AA-PS6GD-TE}}</ref>
Modern instruction sets do not include ''execute'' instructions because they interfere with [[instruction pipeline|pipelining]], [[Prefetch input queue|prefetching]], and other optimizations.{{citation needed|date=July 2021}}
==Semantics==
Line 21 ⟶ 22:
The instruction to be executed, the target instruction, may be in a register or fetched from memory. Some architectures allow the target instruction to itself be an ''execute'' instruction; others do not.
The target instruction is executed as if it were in the memory ___location of the ''execute'' instruction. If, for example, it is a subroutine call instruction, execution is transferred to the subroutine, with the return ___location being the ___location after the ''execute'' instruction. However, some architectures implement variants of the ''execute'' instruction which inhibit branches.<ref name="brooks"/>
The System/360 supports variable-length target instructions. It also supports modifying the target instruction
The GE-600 series supports execution of two-instruction sequences, which must be [[data alignment#4|doubleword-aligned]].<ref name="GE635"/>
Some architectures support an ''execute'' instruction which operates in a different [[Protection ring|protection and address relocation mode]]. For example, the [[Incompatible Timesharing System|ITS]] PDP-10 paging device supports a [[Protection ring|privileged-mode]] {{mono|XCTR}} 'execute relocated' instruction which allows memory reads, writes, or both to use the user-mode page mappings.<ref>{{cite web|first=J.|last=Holloway|title=Hardware Memo 2 - PDP-10 Paging Device|publisher=[[MIT AI Lab]]|date=February 20, 1970|page=11|url=http://www.bitsavers.org/pdf/mit/ai/ai_600dpi/HW_Memo_2_PDP-10_Paging_Device_Feb1970.pdf}}</ref> Similarly, the [[PDP-10#KL10|KL10]] variant of the PDP-10 supports the privileged instruction {{mono|PXCT}} 'previous context XCT'.<ref name="pdp10">{{cite manual|publisher=[[Digital Equipment Corporation]]|title=DECsystem-10, DECSYSTEM-20 Processor Reference Manual|id=AA-H391A-TK, AD-H391A-T1|date=June 1982|page=2{{hyphen}}63|url=https://www.livingcomputers.org/UI/UserDocs/Tops-10-v7-04/3_DECsystem-10_DECSYSTEM-20_Processor_Reference.pdf}}</ref>
The ''execute'' instruction can cause several problems when
* the processor may be
* similarly, the processor may go into an infinite loop if the series of ''execute'' instructions is circular and
* if the ''execute'' instructions are on different [[Page (computer memory)|swap pages]], all of the pages need to be swapped in for the instruction to complete, which can cause [[thrashing (computer science)|thrashing]].
Similar issues arise with [[Addressing mode#multilevel memory indirect|multilevel indirect addressing modes]].
==Applications==
The ''execute'' instruction has several applications:<ref name="brooks"/>
* Functioning as a single-instruction [[subroutine]]
* [[Late binding]]
** Implementation of [[call by name]] and other [[thunks]].<ref name="brooks"/>
** A table of execute targets may be used for [[dynamic dispatch]] of the [[method (computer science)|methods]] or [[virtual function]]s of an [[object (computer science)|object]] or [[class (computer science)|class]], especially when the method or function may often be implementable as a single instruction.<ref name="pdp11"/>
** An execute target may contain a [[hooking|hook]] for adding functionality or for debugging; it is normally initialized as a [[NOP (code)|NOP]] which may be overridden dynamically.
** An execute target may change between a fast version of an operation and a fully traced version.<ref>{{cite book|first=Richard P.|last=Gabriel|author-link=Richard P. Gabriel|title=Performance and Evaluation of Lisp Systems|date=August 1985|isbn=9780262070935|page=32|publisher=MIT Press |url=https://www.dreamsongs.com/Files/Timrep.pdf}}</ref><ref>{{cite manual|first=Kent M.|last=Pitman|author-link=Kent Pitman|title=The Revised Maclisp Manual, Sunday Morning Edition|url=https://www.maclisp.info/pitmanual/|section-url=https://www.maclisp.info/pitmanual/system.html#PURE|section=PURE}}</ref><ref>{{cite manual|first=David A.|last=Moon|author-link=David A. Moon|title=Maclisp Reference Manual|version=Revision 0|date=April 1974|page=181|url=http://www.softwarepreservation.com/projects/LISP/MIT/Moon-MACLISP_Reference_Manual-Apr_08_1974.pdf}}</ref>
* Tracing, monitoring, and emulation
** This may maintain a pseudo-[[program counter]], leaving the normal program counter unchanged.<ref name="brooks"/>
* Executing dynamically generated code, especially when [[memory protection]] prevents executable code from being writable.
* Emulating self-modifying code, especially when it must be [[reentrancy (computing)|reentrant]] or read-only.<ref name="pdp11x"/>
* In the IBM System/360, the ''execute'' instruction can
* Privileged-mode ''execute'' instructions as on the KL10 are used by [[Kernel (operating system)|operating system kernels]] to execute operations such as block copies within the virtual space of user processes.
==Notes==
|