Download - Implementing Subprograms
![Page 1: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/1.jpg)
Implementing Subprograms
![Page 2: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/2.jpg)
Subprogram linkage refers to the subprogram call and return operations of a programming language.
![Page 3: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/3.jpg)
The execution of a called subprogram requires many associated actions.
• parameter passing
• storage allocation of local variables
• saving execution status of calling program
• transfer of control to the subprogram
• return to calling program
• access to non local variables
![Page 4: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/4.jpg)
Subprogram Activation
The subprogram definition is written by the programmer. The definition is a static entity.
The definition serves as a template for the subprogram activation.
During the execution of the program, if the subprogram is called, a subprogram activation is created.
![Page 5: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/5.jpg)
Subprogram Activation
The activation record is dynamically created when the subprogram is called. It is destroyed when execution of the subprogram terminates.
The code segment is statically created and invariant during execution. The code is shared by all activations.
A subprogram activation has a code segment and an activation record.
![Page 6: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/6.jpg)
Implementing Subprograms in ALGOL-like Languages
In programming languages which allow recursion (i.e. Pascal, C++) subprogram linkage is complex
• Different parameter passing methods
• Local variables of subprograms are often dynamically allocated
• Recursion makes multiple activations of a single subprogram possible
• Implementation of static scoping
![Page 7: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/7.jpg)
Activation Record for Subprogram Allowing Recursion
In programming languages which do allow recursion, there can be many activations of a given subprogram at any time.
Local variables
Parameters
Return Address
Dynamic Link
Static Link
![Page 8: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/8.jpg)
Static and Dynamic Links
The static link points to the bottom of the activation record instance of an activation of the static parent. It is used for references to non-local variables.
The dynamic link points to the top of the activation record instance of the caller. It is used for destruction of the current activation record instance.
![Page 9: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/9.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable P{ ARIfor MAIN
TOP
![Page 10: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/10.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
TOP
![Page 11: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/11.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
TOP
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
Parameter
Return (to B)
Dynamic Link
Static Link
Local variable
X
Y
ARIfor A
TOP
![Page 12: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/12.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
Parameter
Return (to B)
Dynamic Link
Static Link
Local variable
X
Y
ARIfor A
TOP
![Page 13: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/13.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
Parameter
Return (to B)
Dynamic Link
Static Link
Local variable
X
Y
ARIfor A
TOP
Parameter
Return (to A)
Dynamic Link
Static Link
Q
ARIfor C
![Page 14: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/14.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
Parameter
Return (to B)
Dynamic Link
Static Link
Local variable
X
Y
ARIfor A
TOP
![Page 15: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/15.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
TOP
![Page 16: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/16.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable P{ ARIfor MAIN
TOP
![Page 17: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/17.jpg)
Implementing Nonlocal References
Nonlocal variable references occur in two steps:
1) find the activation record where the nonlocal variable was allocated
2) use the offset of the variable within that activation record to access it
![Page 18: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/18.jpg)
Implementing Nonlocal References
Static Chain
Display
![Page 19: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/19.jpg)
Implementing Nonlocal References
Static Chain - a static chain is a chain of static links that connects certain activation record instances in the stack
![Page 20: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/20.jpg)
Program main1; var p: real; procedure A (X: integer); var Y: boolean; procedure C (Q: boolean); begin
end; {of proc C} begin
C(Y); end; {of proc A} procedure B (R: real); var S,T: integer; begin
A(S); end; {of proc B} begin {of MAIN_1 } B(P); end. {of MAIN_1}
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
Parameter
Return (to B)
Dynamic Link
Static Link
Local variable
X
Y
ARIfor A
TOP
Parameter
Return (to A)
Dynamic Link
Static Link
Q
ARIfor C
![Page 21: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/21.jpg)
Local variable
Parameter
Return (to main)
Dynamic Link
Static Link
Local variable
T
S
RARIfor B
Local variable P{ ARIfor MAIN
Parameter
Return (to B)
Dynamic Link
Static Link
Local variable
X
Y
ARIfor A
TOP
Parameter
Return (to A)
Dynamic Link
Static Link
Q
ARIfor C
Main calls BB calls AA calls C
main
B
CA
![Page 22: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/22.jpg)
Implementing Nonlocal References
Display - the static links are collected in a single array called a display
![Page 23: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/23.jpg)
Main calls BB calls AA calls C
Main
B
CA
ARIfor MAIN
stack
Each subprogram has a static depth
Main - 0
B - 1
C - 2A - 1
display
0
![Page 24: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/24.jpg)
ARIfor B
ARIfor MAINMain calls B
B calls AA calls C
Main - 0
B - 1
C - 2A - 1
stack
1
display
0
![Page 25: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/25.jpg)
ARIfor B
ARIfor MAINMain calls B
B calls AA calls C
Main - 0
B - 1
C - 2A - 1
stack
1
ARIfor A
display
0
![Page 26: Implementing Subprograms](https://reader036.vdocuments.site/reader036/viewer/2022062407/56812acd550346895d8ea7d3/html5/thumbnails/26.jpg)
ARIfor B
ARIfor MAIN
ARIfor A
ARIfor C
Main calls BB calls AA calls C
Main - 0
B - 1
C - 2A - 1
stack
2
1
display
0