58 lines
2.1 KiB
Plaintext
58 lines
2.1 KiB
Plaintext
.bp
|
|
.P1 "INSTRUCTION ADDRESS SPACE"
|
|
The instruction space of the EM machine contains
|
|
the code for procedures.
|
|
Tables necessary for the execution of this code, for example, procedure
|
|
descriptor tables, may also be present.
|
|
The instruction space does not change during
|
|
the execution of a program, so that it may be
|
|
protected.
|
|
No further restrictions to the instruction address space are
|
|
necessary for the abstract and assembly language level.
|
|
.PP
|
|
Each procedure has a single entry point: the first instruction.
|
|
A special type of pointer identifies a procedure.
|
|
Pointers into the instruction
|
|
address space have the same size as pointers into data space and
|
|
can, for example, contain the address of the first instruction
|
|
or an index in a procedure descriptor table.
|
|
.QQ
|
|
There is a single EM program counter, PC, pointing
|
|
to the next instruction to be executed.
|
|
The procedure pointed to by PC is
|
|
called the 'current' procedure.
|
|
A procedure may call another procedure using the CAL or CAI
|
|
instruction.
|
|
The calling procedure remains 'active' and is resumed whenever the called
|
|
procedure returns.
|
|
Note that a procedure has several 'active' invocations when
|
|
called recursively.
|
|
.PP
|
|
Each procedure must return properly.
|
|
It is not allowed to fall through to the
|
|
code of the next procedure.
|
|
There are several ways to exit from a procedure:
|
|
.IP -
|
|
the RET instruction, which returns to the
|
|
calling procedure.
|
|
.IP -
|
|
the RTT instruction, which exits a trap handling routine and resumes
|
|
the trapping instruction (see next chapter).
|
|
.IP -
|
|
the GTO instruction, which is used for non-local goto's.
|
|
It can remove several frames from the stack and transfer
|
|
control to an active procedure.
|
|
(see also MES~11 in paragraph 11.1.4.4)
|
|
.PP
|
|
All branch instructions can transfer control
|
|
to any label within the same procedure.
|
|
Branch instructions can never jump out of a procedure.
|
|
.PP
|
|
Several language implementations use a so called procedure
|
|
instance identifier, a combination of a procedure identifier and
|
|
the LB of a stack frame, also called static link.
|
|
.PP
|
|
The program text for each procedure, as well as any tables,
|
|
are fragments and can be allocated anywhere
|
|
in the instruction address space.
|