CMPE13Cyrus Bazeghi Chapter 14 Functions in C. CMPE13 2 Functions Smaller, simpler, subcomponents of programs Provide abstraction –hide low-level details.

Slides:



Advertisements
Similar presentations
Chapter 14 Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Function Smaller, simpler, subcomponent.
Advertisements

COMP3221 lec16-function-II.1 Saeid Nooshabadi COMP 3221 Microprocessors and Embedded Systems Lectures 16 : Functions in C/ Assembly - II
Introduction to Computer Engineering ECE 252, Fall 2010 Prof. Mikko Lipasti Department of Electrical and Computer Engineering University of Wisconsin –
Chapter 9 TRAP Routines and Subroutines. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 9-2 Subroutines.
Run-time Environment for a Program different logical parts of a program during execution stack – automatically allocated variables (local variables, subdivided.
Topic 10 Java Memory Management. 1-2 Memory Allocation in Java When a program is being executed, separate areas of memory are allocated for each class.
Procedures in more detail. CMPE12cGabriel Hugh Elkaim 2 Why use procedures? –Code reuse –More readable code –Less code Microprocessors (and assembly languages)
Computer Architecture CSCE 350
Procedures II (1) Fall 2005 Lecture 07: Procedure Calls (Part 2)
 Procedures (subroutines) allow the programmer to structure programs making them : › easier to understand and debug and › allowing code to be reused.
Procedures in more detail. CMPE12cCyrus Bazeghi 2 Procedures Why use procedures? Reuse of code More readable Less code Microprocessors (and assembly languages)
CSS 372 Lecture 1 Course Overview: CSS 372 Web page Syllabus Lab Ettiquette Lab Report Format Review of CSS 371: Simple Computer Architecture Traps Interrupts.
Chapter 17 Recursion. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Mathematical Definition: RunningSum(1)
1 Function Calls Professor Jennifer Rexford COS 217 Reading: Chapter 4 of “Programming From the Ground Up” (available online from the course Web site)
Runtime Environments Source language issues Storage organization
Chapter 11-14, Appendix D C Programs Higher Level languages Compilers C programming Converting C to Machine Code C Compiler for LC-3 Please return breadboards.
1 Introduction to “C” Control Loops and Functions Patt and Patel Ch. 13 & 14.
Run time vs. Compile time
Overview C programming Environment C Global Variables C Local Variables Memory Map for a C Function C Activation Records Example Compilation.
CS 201 Functions Debzani Deb.
CSS 372 Oct 2 nd - Lecture 2 Review of CSS 371: Simple Computer Architecture Chapter 3 – Connecting Computer Components with Buses Typical Bus Structure.
Digression: the “Stack” 1 CS502 Spring 2006 Digression: the “Stack” Imagine the following program:– int factorial(int n){ if (n
Chapter 10 Implementing Subprograms. Copyright © 2007 Addison-Wesley. All rights reserved. 1–2 Semantics of Call and Return The subprogram call and return.
TCSS 372A Computer Architecture. Getting Started Get acquainted (take pictures) Review Web Page (
C Stack Frames / Pointer variables Stack: Local Variables Pass & Return values Frame Ptr linkage (R5) and PC linkage (R7) Pointer Variables: Defining &
Stacks and Frames Demystified CSCI 3753 Operating Systems Spring 2005 Prof. Rick Han.
Chapter 8 :: Subroutines and Control Abstraction
Runtime Environments What is in the memory? Runtime Environment2 Outline Memory organization during program execution Static runtime environments.
Chapter 14 Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Function Smaller, simpler, subcomponent.
Functions & Activation Records Recursion
13/02/2009CA&O Lecture 04 by Engr. Umbreen Sabir Computer Architecture & Organization Instructions: Language of Computer Engr. Umbreen Sabir Computer Engineering.
Runtime Environments Compiler Construction Chapter 7.
Chapter 17 Pointers and Arrays. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Pointers and Arrays.
Compiler Construction
Chapter 14 Functions.
CPSC 388 – Compiler Design and Construction Runtime Environments.
1 Control Abstraction (Section ) CSCI 431 Programming Languages Fall 2003 A compilation of material developed by Felix Hernandez-Campos and Michael.
Runtime Organization (Chapter 6) 1 Course Overview PART I: overview material 1Introduction 2Language processors (tombstone diagrams, bootstrapping) 3Architecture.
CSC 8505 Compiler Construction Runtime Environments.
CS412/413 Introduction to Compilers and Translators Spring ’99 Lecture 11: Functions and stack frames.
Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 9-2 JSR Instruction Jumps to a location (like.
Chapter 14 Functions. Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display Declarations (aka prototype) int.
4-1 Embedded Systems C Programming Language Review and Dissection II Lecture 4.
RUNTIME ENVIRONMENT AND VARIABLE BINDINGS How to manage local variables.
Chapter 10 Chapter 10 Implementing Subprograms. Implementing Subprograms  The subprogram call and return operations are together called subprogram linkage.
LECTURE 19 Subroutines and Parameter Passing. ABSTRACTION Recall: Abstraction is the process by which we can hide larger or more complex code fragments.
Section 5: Procedures & Stacks
Chapter 14 Functions.
Computer Architecture & Operations I
Storage Classes There are three places in memory where data may be placed: In Data section declared with .data in assembly language in C - Static) On the.
Run-Time Environments Chapter 7
Implementing Subprograms Chapter 10
Chapter 17 Recursion.
Implementing Subprograms
Chapter 12 Variables and Operators
Chapter 14 Functions.
Chapter 14 Functions.
More C Stack Frames / Pointer variables
Chapter 17 Recursion.
Understanding Program Address Space
Chapter 14 Functions.
Topic 3-a Calling Convention 1/10/2019.
Chapter 17 Recursion.
Runtime Environments What is in the memory?.
Chapter 14 Functions.
Return-to-libc Attacks
Chapter 17 Recursion.
Chapter 14 Functions.
Implementing Functions: Overview
Presentation transcript:

CMPE13Cyrus Bazeghi Chapter 14 Functions in C

CMPE13 2 Functions Smaller, simpler, subcomponents of programs Provide 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 of a particular type In other languages are called procedures, subroutines,...

CMPE13 Example of high-level structure main() { SetupBoard(); /* place pieces on board */ DetermineSides(); /* choose black/white */ /* Play game */ do { WhitesTurn(); BlacksTurn(); } while (NoOutcomeYet()); } Structure of program is evident, even without knowing implementation. 3

CMPE13 Functions in C Declaration (also called prototype) int Factorial(int n); Function call, used in expression a = x + Factorial(f + g); type of return value name of function types of all arguments 1. evaluate arguments 2, execute function 3. use return value in expression 4

CMPE13 Function definition State type, name, types of arguments –must match function declaration –give name to each argument (doesn't have to match declaration) gives control back to calling function and returns value int Factorial(int n) { int i; int result = 1; for (i = 1; i <= n; i++) result *= i; return(result); } 5

CMPE13 Why declaration? Since function definition also includes return and argument types, why is declaration needed? Use might be seen (in src file) before definition. Compiler needs to know return and arguments’ 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 6

CMPE13 double ValueInDollars(double amount, double rate); main() {... dollars = ValueInDollars(francs, DOLLARS_PER_FRANC); printf("%f francs equals %f dollars.\n", francs, dollars);... } double ValueInDollars(double amount, double rate) { return amount * rate; } Example declaration function call (invocation) definition 7

CMPE13 Implementing functions: Overview Activation record information about each function, including arguments and local variables stored on run-time stack Calling function push new activation record copy values into arguments call function get result from stack Called function push return values push local variables execute code put result in activation record pop activation record return 8

CMPE13 Implementing functions Use an activation record –information about each function –stored on run-time stack Each function needs to have: –value of function’s arguments –return values –information to be able to return to caller –function’s own local variables 9

CMPE13 Run-time stack (in LC-3) Recall that local variables are stored on the run-time stack in an activation record The 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. 10

CMPE13 Example of function call int main(int ac, char *av[]) { int a, b;... b = Watt(a); b = Volta(a, b); return 0; } int Volta(int q, int r) { int k; int m;... return k; } int Watt(int a) { int w;... w = Volta(w,10);... return w; } 11

CMPE13 Run-time stack main Memory R6 Watt Memory R6 main Memory main Before callDuring callAfter call R5 R6 R5 12

CMPE13 Activation record int Volta(int q, int r) { int k; int m;... return k; } int Watt(int a) { int w;... w = Volta(w, 10);... return w; } 10 value of w return value return address k m activation frame for Watt dynamic link R5 Symbol table NameType OffsetScope rint5Volta qint4Volta kint0Volta mintVolta 13

CMPE13 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 Dynamic link –caller’s frame pointer –used to pop this activation record from stack 14

CMPE13 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… 15

CMPE13 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 ; call subroutine JSR Volta q r w dyn link ret addr ret val a xFD00 new R6 Note: Caller needs to know number and type of arguments, doesn't know about local variables. R5 R6 16

CMPE13 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 fr. p) ADD R6, R6, #-1 STR R5, R6, #0 ; set new frame pointer ADD R5, R6, #-1 ; allocate space for locals ADD R6, R6, #-2 m k dyn link ret addr ret val q r w dyn link ret addr ret val a xFCFB x xFD00 new R6 new R5 R6 R5 17

CMPE13 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 m k dyn link ret addr ret val q r w dyn link ret addr ret val a xFCFB x xFD00 R6 R5 new R6 new R5 18

CMPE13 Resuming the Caller Function ;w = Volta(w,10); JSR Volta ; load return value (tos) LDR R0, R6, #0 ; perform assignment STR R0, R5, #0 ; pop return value ADD R6, R6, #1 ; pop arguments ADD R6, R6, #2 ret val q r w dyn link ret addr ret val a xFD00 R6 R5 new R6 19