procedure is a set of code that can be branched to and returned from in such a
way that the code is as if it were inserted at the point from which it is
branched to. The branch to procedure is referred to as the call, and the corresponding branch back is known as the return. The return is always made to the
instruction immediately following the call
regardless of where the call is located.
1 Calls, Returns, and Procedure Definitions
instruction not only branches to the indicated address, but also pushes the
return address onto the stack. The RET instruction simply pops the return
address from the stack. The registers used by the procedure need to be stored
before their contents are changed, and then restored just before their contents
are changed, and then restored just before the procedure is excited.
may be direct or indirect and intrasegment or intersegment. If the CALL is
intersegment, the return must be intersegment. Intersegment call must push both
(IP) and (CS) onto the stack. The return must correspondingly pop two words
from the stack. In the case of intrasegment call, only the contents of IP will
be saved and retrieved when call and return instructions are used.
are used in the source code by placing a statement of the form at the beginning
of the procedure
name PROC Attribute and by terminating the procedure with a statement
attribute that can be used will be either NEAR or FAR. If the attribute is
NEAR, the RET instruction will only pop a word into the IP register, but if it
is FAR, it will also pop a word into the CS register.
procedure may be in:
1. The same
code segment as the statement that calls it.
2. A code
segment that is different from the one containing the statement that calls it,
but in the same source module as the calling statement.
different source module and segment from the calling statement.
first case, the attribute could be NEAR provided that all calls are in the same
code segment as the procedure. For the latter two cases the attribute must be
FAR. If the procedure is given a FAR attribute, then all calls to it must be
intersegment calls even if the call is from the same code segment. For the
third case, the procedure name must be declared in EXTRN and PUBLIC statements.
2 Saving and Restoring Registers
the calling program and procedure share the same set of registers, it is
necessary to save the registers when entering a procedure, and restore them
before returning to the calling program.
3 Procedure Communication
There are two general types of procedures, those
operate on the same set of data and those that may process a different set of
data each time they are called. If a procedure is in the same source module as
the calling program, then the procedure can refer to the variables directly.
When the procedure is in a separate source module
it can still refer to the source module directly provided that the calling
program contains the directive
ARY, COUNT, SUM
ARY: WORD, COUNT: WORD, SUM: WORD
4 Recursive Procedures
procedure is called within another procedure it called recursive procedure. To
make sure that the procedure does not modify itself, each call must store its
set of parameters, registers, and all temporary results in a different place in
Eg. Recursive procedure to
compute the factorial