
Overview of Implementing Functions Using Activation Records
Learn how functions are implemented using activation records which store information about each function's arguments and local variables on the run-time stack. Understand the process of function calling, allocation of return values, pushing and popping of activation records, and more.
Download Presentation

Please find below an Image/Link to download the presentation.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author. If you encounter any issues during the download, it is possible that the publisher has removed the file from their server.
You are allowed to download the files provided on this website for personal or commercial use, subject to the condition that they are used lawfully. All files are the property of their respective owners.
The content on the website is provided AS IS for your information and personal use only. It may not be sold, licensed, or shared on other websites without obtaining consent from the author.
E N D
Presentation Transcript
Chapter 14 Implementing Functions using Activation Records
Implementing Functions: Overview Activation record information about each function, including arguments and local variables stored on run-time stack Called function Calling function 3. allocates return value, pushes R7 and R5. allocates space for local variables. executes function code. stores result into return value slot. pops local vars, pops R5, pops R7. returns (JMP R7). 1. pushes arguments (last to first). invokes subroutine (JSR). 4. 2. 5. 6. 9. loads return value and pops arguments. resumes computation 7. 10. 8. 14-2
Run-Time Stack Recall that local variables are stored on the run-time stack in an activation record Frame pointer (R5) points to the beginning of a region of activation record that stores local variables for the current function When a new function is called, its activation record is pushed on the stack; when it returns, its activation record is popped off of the stack. 14-3
Run-Time Stack Memory Memory Memory R6 R5 Watt R6 R5 R6 R5 main main main Before call Before call During call During call After call After call 14-4
Activation Record int NoName(int a, int b) { int w, x, y; . . . return y; } y x w locals locals R5 frame pointer return address return value a b bookkeeping bookkeeping args args Name Type Offset a b w x y int int int int int 4 5 0 -1 -2 14-5
Activation Record Bookkeeping Return value space for value returned by function allocated even if function does not return a value Return address save pointer to next instruction in calling function convenient location to store R7 in case another function (JSR) is called Frame Pointer / Dynamic link caller s frame pointer used to pop this activation record from stack 14-6
Example Function Call int Volta(int q, int r) { int k; int m; ... return k; } int Watt(int a) { int w; ... w = Volta(w,10); ... return w; } 14-7
Calling the Function w = Volta(w, 10); ; push second arg AND R0, R0, #0 ADD R0, R0, #10 ADD R6, R6, #-1 STR R0, R6, #0 ; push first argument LDR R0, R5, #0 ADD R6, R6, #-1 STR R0, R6, #0 new R6 q r w 25 10 25 R6 R5 dyn link ret addr ret val a ; call subroutine JSR Volta xFD00 PUSH Rx: ADD R6, R6, #-1 STR Rx, R6, #0 14-8
Starting the Callee Function ; leave space for return value ADD R6, R6, #-1 ; push return address ADD R6, R6, #-1 STR R7, R6, #0 ; push dyn link (caller s frame ptr) ADD R6, R6, #-1 STR R5, R6, #0 ; set new frame pointer ADD R5, R6, #-1 ; allocate space for locals ADD R6, R6, #-2 new R6 new R5 m k dyn link ret addr ret val q r w dyn link ret addr ret val a xFCFB x3100 R6 25 10 25 R5 xFD00 PUSH Rx: ADD R6, R6, #-1 STR Rx, R6, #0 14-9
Ending the Callee Function return k; ; copy k into return value LDR R0, R5, #0 STR R0, R5, #3 ; pop local variables ADD R6, R5, #1 ; pop dynamic link (into R5) LDR R5, R6, #0 ADD R6, R6, #1 ; pop return addr (into R7) LDR R7, R6, #0 ADD R6, R6, #1 ; return control to caller RET R6 R5 m k -43 217 xFCFB x3100 217 25 10 25 dyn link ret addr ret val q r w dyn link ret addr ret val a new R6 new R5 xFD00 POP Rx: LDR Rx, R6, #0 ADD R6, R6, #1 14-10
Resuming the Caller Function w = Volta(w,10); JSR Volta ; load return value (top of stack) LDR R0, R6, #0 ; pop return value ADD R6, R6, #1 ; pop arguments ADD R6, R6, #2; perform assignment STR R0, R5, #0 R6 ret val q r w dyn link ret addr ret val a 217 25 10 217 new R6 R5 xFD00 POP Rx: LDR Rx, R6, #0 ADD R6, R6, #1 14-11
Summary of LC-3 Function Call Implementation 1. Caller pushes arguments (last to first). 2. Caller invokes subroutine (JSR). 3. Callee allocates return value, pushes R7 and R5. 4. Callee allocates space for local variables. 5. Callee executes function code. 6. Callee stores result into return value slot. 7. Callee pops local vars, pops R5, pops R7. 8. Callee returns (JMP R7). 9. Caller loads return value and pops arguments. 10. Caller resumes computation 14-12