Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions &...

21
Chapter 14 Chapter 14 Functions & Activation Records

Transcript of Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions &...

Page 1: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

Chapter 14Chapter 14

Functions & Activation Records

Page 2: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

2Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

FunctionFunction

Smaller, simpler, subcomponent of program

Provides abstraction– hide low-level details

– give high-level structure to program,easier to understand overall program flow

– enables separable, independent development

C functions– zero or multiple arguments passed in

– single result returned (optional)

– return value is always the same type

– by convention, only one function named main (this defines the initial PC)

In other languages, called procedures, subroutines, ...

Page 3: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

3Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Functions in CFunctions in C

A function consists of a– Declaration (a.k.a prototype)

includes return value, function name, and the order and data type of all arguments – names of argument are optional)

– Calls

– Definition Names of variables do not need to match prototype, but must match

order/type

Defines functionality (source code) and returns control (and a value) to caller

May produce side-effects

Declaration int Factorial (int n); Call a = x + Factorial (f + g);

Definition

int Factorial(int n){int i;int result = 1;for (i = 1; i <= n; i++)result *= i;

return result;}

Page 4: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

4Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Why Declaration?Why Declaration? Since function definition also includes return and argument types, why

is declaration needed? Use might be seen before definition.

– Compiler needs to know return and arg types and number of arguments.

Definition might be in a different file, written by a different programmer.

– include a "header" file with function declarations only– compile separately, link together to make executable

What if we need to pass more parameters than we have registers?!? All the compiler needs to know

– (1) what symbol to call the function (its name), – (2) the type of the return value (for proper usage/intermediate storage)– (3) how to set up the stack to call the function (arguments)

This allows the compiler to inserted the necessary code for function activation when it is called

Page 5: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

5Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Implementing a Function Call: OverviewImplementing a Function Call: Overview Making a function call involves three basic steps

– The parameters of the call are passed from the caller to the callee– The callee does its task– A return value is returned to the caller

Functions in C are caller-independent– Every function must be callable from any other function

Activation record– information about each function, including arguments and local variables– also includes bookkeeping information

values that must always be saved by the caller before doing the JSR

– arguments and bookeeping info pushed on run-time stack by caller– callee responsible for other uses of stack (such as local variables)– popped of the stack by caller after getting return value

R5 (the frame pointer) is the “bottom” of the stack as far as the callee function definition is aware.

– It should not modify anything existing on the stack before its execution!

Page 6: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

6Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Implementing a Function Call: OverviewImplementing a Function Call: Overview

Calling function

allocate memory for activation record (push)

copy arguments into stackarguments

call function

get result from stack (pop)deallocate memory for

activation record (pop)

Called functionallocate space for return value

[bookkeeping] (push)store mandatory callee save

registers [bookkeeping] (push)set frame pointerallocate local variables (push)

execute code

put result in return value spacedeallocate local variables (pop) load callee save registers (pop)return

Page 7: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

7Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Activation RecordActivation Record

int funName(int a, int b){int w, x, y;...return y;

}

Name Type Offset Scope

abwxy

intintintintint

450-1-2

funNamefunNamefunNamefunNamefunName

yxw

dynamic linkreturn address

return valueab

bookkeeping

locals

args

R5

R6

Page 8: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

8Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Activation Record BookkeepingActivation 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 to protect it from change in case

another function (JSR) is called

Dynamic link– caller’s frame pointer (basically a caller save of its own frame pointer R5)

– used to “pop” this activation record from stack

In the LC-3 the format for an activation record includes only (and always) these three words pushed in that order!

Page 9: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

9Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

RunRun--Time StackTime Stack

Caller

Memory

R6

Callee

Memory

R6

Caller

Memory

Caller

Before call During call After call

R5

R5

R6R5

Page 10: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

10Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Example Function CallExample Function Call

int Callee (int q, int r) {int k, m;...return k;

}

int Caller (int a) {int w = 25;w = Callee (w,10);return w;

}

wdyn linkret addrret vala

25

xFD00

R5R6

Page 11: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

11Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

The Function Call: Preparation to JumpThe Function Call: Preparation to Jump

int Callee (int q, int r) …

int Caller (int a) … … w = Callee(w, 10);… ; push second arg

AND R0, R0, #0ADD R0, R0, #10ADD R6, R6, #-1STR R0, R6, #0; push first argumentLDR R0, R5, #0ADD R6, R6, #-1STR R0, R6, #0

JSR CALLEE ; Jump!Note: Caller needs to know number and type of arguments,doesn't know about local variables.

qrwdyn linkret addrret vala

251025

xFD00

R5R6

New R6

Page 12: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

12Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Starting the Callee FunctionStarting the Callee Function ; push space for return value

ADD R6, R6, #-1; push return addressADD R6, R6, #-1STR R7, R6, #0; push dyn link (caller’s R5)ADD R6, R6, #-1STR R5, R6, #0; set new frame pointerADD R5, R6, #-1; allocate space for localsADD R6, R6, #-2

… execute body of function

mkDyn lnk (R5)ret addrret valueqrwdyn linkret addrret vala

xFCFBx3100

251025

xFD00

R5

R6

new R5new R6

Note: Callee makes room for bookkeeping variables (standard format) and its local variables (as necessary)

Page 13: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

13Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Ending the Callee FunctionEnding the Callee Function

return k;

; copy k into return valueLDR R0, R5, #0STR R0, R5, #3; pop local variablesADD R6, R5, #1; pop dynamic link (into R5)LDR R5, R6, #0ADD R6, R6, #1; pop return addr (into R7)LDR R7, R6, #0ADD R6, R6, #1; return control to callerRET

mkdyn linkret addrret valqrwdyn linkret addrret vala

-43217

xFCFBx3100217251025

xFD00

R6R5

new R6

new R5

Page 14: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

14Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Resuming the Caller FunctionResuming the Caller Function

w = Callee(w,10);

; JSR Callee ; LAST COMMAND

; load return value (top of stack)LDR R0, R6, #0; perform assignment of return valueSTR R0, R5, #0; pop return value and argumentsADD R6, R6, #3

Continue caller code

ret valqrwdyn linkret addrret vala

2172510217

xFD00

R6

R5new R6

Page 15: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

15Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Summary of LCSummary of LC--3 Function Call 3 Function Call ImplementationImplementation

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 (first to last).

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 (RET/JMP R7).

9. Caller loads return value and pops arguments.

10. Caller resumes computation…

Page 16: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

16Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

In Summary: The StackIn Summary: The Stack

Since our program usually starts at a low memory address and grows upward, we start the stack at a high memory address and work downward.

Purposes– Temporary storage of variables

– Temporary storage of program addresses

– Communication with subroutines Push variables on stack

Jump to subroutine

Clean stack

Return

Page 17: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

17Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Parameter passing on the stackParameter passing on the stack If we use registers to pass our parameters:

– Limit of 8 parameters to/from any subroutine.– We use up registers so they are not available to our program.

So, instead we push the parameters onto the stack.– Parameters are passed on the stack– Return values can be provided in registers (such as R0) or on the stack.– Generally, only R6 should be changed by a subroutine.

Other registers that are changed should must be callee saved/restored. Subroutines should be transparent

Both the subroutine and the main program must know how many parameters are being passed!

– In C we would use a prototype: int power (int number, int exponent);

In assembly, you must take care of this yourself. After you return from a subroutine, you must also clear the stack.

– Clean up your mess!

Page 18: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

18Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Characteristics of good subroutinesCharacteristics of good subroutines

Readability – well documented.

Generality – can be easily reused elsewhere– Passing arguments on the stack does this.

Transparency – you have to leave the registers like you found them, except R6.– Registers must be callee saved.

Re-entrant – subroutine can call itself if necessary– Store all information relevant to specific execution to non-fixed memory locations

The stack!

– This includes temporary callee storage of register values!

Secure – no undocumented side-effects on the stack / memory.

Page 19: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

19Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Know how to…Know how to…

Push parameters onto the stack

Access parameters on the stack using base + offset addressing mode

Draw the stack to keep track of subroutine execution– Parameters

– Return address

Clean the stack after a subroutine call

Page 20: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

20Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

Practice problemsPractice problems

14.2, 14.4, 14.9, 14.10, 14.15 (good!)

The convention in LC-3 assembly is that all registers are callee-saved except for R5 (the frame pointer) R6 (the stack pointer) and R7 (the return link).

– Why is R5 not callee-saved?

– Why is R6 not callee-saved?

– Why is R7 not callee-saved? Is it true that any problem that can be solved recursively can be solved

iteratively using a stack data structure? Why or why not?

Page 21: Functions & Activation Recordstdoom/courses/CEG320/notes/1up-14.pdf · 2009. 2. 5. · Functions & Activation Records. 2 Wright State University, College of Engineering Dr. Doom,

21Wright State University, College of EngineeringDr. Doom, Computer Science & Engineering

CEG 320/520Comp. Org. & Assembly

main() {int i, j, k;

i = 5;j = 3;…

k = sub1(i, j);…

}

int sub1(a, b) {int x, y;…

x = a;y = sub2 (x, 3);return y;

}

int sub2(var1, var2) {int temp;…

temp = var1 – var2;return temp;

}

6FD86FD96FDA6FDB6FDC6FDD6FDE6FDF6FE06FE16FE26FE36FE46FE56FE66FE76FE86FE96FEA6FEB6FEC6FED6FEE6FEF6FF06FF16FF26FF36FF46FF56FF66FF76FF86FF96FFA6FFB6FFC6FFD6FFE6FFF7000

R5

R6ijk