A function is a reusable block of code that can be called from different parts of a program. Functions accept parameters as input and may return a value. When a function is called, its parameters and local variables are stored on the stack. Each function call creates a stack frame that contains its parameters, local variables, and return address. This allows functions to maintain separate variable scopes while sharing the call stack.
6. What is a function?A function is a special SUBROUTINE
7. What is a function?A function is a special SUBROUTINERe-usable block of codeCan be called from anywhere in the program
8. What is a function?A function is a special SUBROUTINERe-usable block of codeCan be called from anywhere in the programProgram control jumps to the subroutine......and returns to the next statement after completing the subroutine
11. Anything else?A function accepts parametersA function returns a valueIt may also have LOCAL variables...
12. Anything else?A function accepts parametersA function returns a valueIt may also have LOCAL variables......created when function is invoked,and destroyed when the function returns.Scope limited to that function only.
13. An example - add(x, y)int add(int x, int y){ int sum; sum = x + y; return(sum);}
14. An example - add(x, y)Parametersint add(int x, int y){ int sum; sum = x + y; return(sum);}Local VariableReturn Value
15. Where are all the values stored?How are parameters passed?Where are local variables stored?
16. Where are all the values stored?How are parameters passed?Where are local variables stored?It is all accomplished using the STACK!
17. Where are all the values stored?How are parameters passed?Where are local variables stored?It is all accomplished using the STACK!Parameters are pushed on the stack before calling the function.Local variables are stored in stack memory as well.
28. In the beginningESP points to the top of the stack, as usualEBP is the frame pointer (called Base Pointer). It points to regions within the stack....ESP...EBP
30. CALL addCALL pushes the current EIP on the stack......and jumps to add()Saved EIPESP34......EBP
31. PrologueThe Prologue saves the old frame pointer (EBP) and sets EBP to top of stack.Old EBPEBPESPSaved EIP34......
32. PrologueThe Prologue saves the old frame pointer (EBP) and sets EBP to top of stack.Old EBPEBPESPWhat's a FRAME?Saved EIP34......
33. PrologueThe Prologue saves the old frame pointer (EBP) and sets EBP to top of stack.Old EBPEBPESPWhat's a FRAME?Saved EIP3We shall discuss the frame a bit later.4......
35. Frame for add()The Stack FrameThe stack memory used by a function is termed as its STACK FRAMEsumESPOld EBPEBPSaved EIP34......Frame for main()
36. Functions and FramesEach function call results in a new frame being created on the stack.func1()frame for func1 ESP
37. Functions and FramesEach function call results in a new frame being created on the stack.func1()frame for func2 ESPfunc2()frame for func1
38. Functions and FramesEach function call results in a new frame being created on the stack.frame for func3 ESPfunc1()frame for func2 func2()frame for func1 func3()
39. frame for func2 frame for func1 Functions and FramesWhen a function returns, the frame is "unwound" or "collapsed".func1()ESPfunc2()func3()
40. Functions and FramesAnd as new functions get invoked, new frames get created.frame for func4 ESPfunc1()frame for func2 func2()frame for func1 func3()func4()
41. The Frame PointerEBP is the frame pointer (base pointer).sumOld EBPEBPSaved EIP34......
42. The Frame PointerEBP is the frame pointer (base pointer).sumlocal varOld EBPEBPLocal variables and Parameters are RELATIVE to the frame pointer.Saved EIP3param 14param 2......
43. The Frame PointerEBP is the frame pointer (base pointer).sumEBP - 4Old EBPEBPLocal variables and Parameters are RELATIVE to the frame pointer.Saved EIP3EBP + 84EBP - n: Local varsEBP + n: ParametersEBP + 12......
44. EpilogueThe Epilogue cleans up the stack frame. Local variables are effectively destroyed.sumOld EBPESPEBPSaved EIP34......
45. EpilogueThe Epilogue cleans up the stack frame. Local variables are effectively destroyed.sumOld EBPPOP EBP. Restores EBP back to the old frame.Saved EIPESP34......EBP
46. EpilogueThe Epilogue cleans up the stack frame. Local variables are effectively destroyed.sumOld EBPPOP EBP. Restores EBP back to the old frame.Saved EIPESP34Stack pointer now points to where EIP was saved before CALL add().......EBP
47. Return!RET instruction pops the saved EIP value back into the EIP register.sumOld EBPSaved EIPESP34......EBP
48. Return!RET instruction pops the saved EIP value back into the EIP register.EIPsumOld EBPProgram control is returns to the next statement after add()Saved EIPESP34......EBP
49. Return!RET instruction pops the saved EIP value back into the EIP register.EIPsumOld EBPProgram control is returns to the next statement after add()Saved EIP3ESP4ESP shifts down by one word.......EBP