Lecture Introduction to computing systems (2/e): Chapter 14 - Yale N. Patt, Sanjay J. Patel

ppt
Số trang Lecture Introduction to computing systems (2/e): Chapter 14 - Yale N. Patt, Sanjay J. Patel 18 Cỡ tệp Lecture Introduction to computing systems (2/e): Chapter 14 - Yale N. Patt, Sanjay J. Patel 199 KB Lượt tải Lecture Introduction to computing systems (2/e): Chapter 14 - Yale N. Patt, Sanjay J. Patel 0 Lượt đọc Lecture Introduction to computing systems (2/e): Chapter 14 - Yale N. Patt, Sanjay J. Patel 0
Đánh giá Lecture Introduction to computing systems (2/e): Chapter 14 - Yale N. Patt, Sanjay J. Patel
4.9 ( 21 lượt)
Nhấn vào bên dưới để tải tài liệu
Để tải xuống xem đầy đủ hãy nhấn vào bên trên
Chủ đề liên quan

Nội dung

Chapter 14 Functions Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Function 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 a particular type In other languages, called procedures, subroutines, ... 14-2 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Example of High-Level Structure main() { SetupBoard(); /* place pieces on board */ DetermineSides(); /* choose black/white */ /* Play game */ Structure of program do { is evident, even without WhitesTurn(); knowing implementation. BlacksTurn(); } while (NoOutcomeYet()); } 14-3 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Functions in C Declaration (also called prototype) int Factorial(int n); type of return value name of function types of all arguments Function call -- used in expression a = x + Factorial(f + g); 1. evaluate arguments 2, execute function 3. use return value in expression 14-4 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Function Definition State type, name, types of arguments • must match function declaration • give name to each argument (doesn't have to match declaration) int Factorial(int n) { int i; int result = 1; for (i = 1; i <= n; i++) result *= i; gives control back to return result; calling function and } returns value 14-5 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 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 14-6 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Example double ValueInDollars(double amount, double rate); declaration main() { function call (invocation) ... dollars = ValueInDollars(francs, DOLLARS_PER_FRANC); printf("%f francs equals %f dollars.\n", francs, dollars); ... } definition double ValueInDollars(double amount, double rate) { return amount * rate; } 14-7 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. 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 execute code put result in activation record pop activation record from stack return 14-8 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Run-Time Stack Recall that local variables are stored on the run-time stack Stack pointer (R6) points to the beginning of a region of memory that stores local variables for the current function That region of memory is called an activation record 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-9 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Run-Time Stack Memory Memory Memory R6 main R6 main main R6 NoName Before call During call After call Note: Using R6 this way is incompatible with storing interrupt state on the stack. 14-10 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Activation Record int NoName(int a, int b) { int w, x, y; . bookkeeping . . return y; } locals Name a b w x y Type Offset Scope int int int int int 3 4 5 6 7 NoName NoName NoName NoName NoName return value return address dynamic link a b w x y args 14-11 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Activation Record Bookkeeping Return value • always first word in activation record • holds 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 • address of previous activation record • used to pop this activation record from stack 14-12 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Calling the Function b = NoName(a, 10); ; store a to 1st argument LDR R0, R6, #3 STR R0, R6, #8 ; store 10 to 2nd argument AND R0, R0, #0 ADD R0, R0, #10 STR R0, R6, #9 ; store R6 into dynamic link STR R6, R6, #7 ; move R6 to start of new record ADD R6, R6, #5 ; call subroutine JSR NoName x4100 R6 x3F00 13 x4100 13 10 Note: Caller needs to know number and type of arguments, doesn't know about local variables. ret val ret addr dyn link a b ret val ret addr dyn link a b w x y 14-13 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Starting the Callee Function ; store return address STR R7, R6, #1 x4100 x3F00 13 R6 x3100 x4100 13 10 ret val ret addr dyn link a b ret val ret addr dyn link a b w x y 14-14 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Ending the Callee Function return y; ; copy y into return value LDR R0, R6, #6 STR R0, R6, #0 ; load the return address LDR R7, R6, #1 ; load the dynamic link ; (pops the activation record) LDR R6, R6, #2 ; return control to caller RET x4100 x3F00 13 R6 40 x3100 x4100 13 10 20 30 40 ret val ret addr dyn link a b ret val ret addr dyn link a b w x y 14-15 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Resuming the Caller Function b = NoName(a,10); ; load return value LDR R0, R6, #5 ; store result into b STR R0, R6, #4 x4100 R6 x3F00 13 40 40 ret val ret addr dyn link a b ret val 14-16 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Example /* Function ToUpper: * If the argument is lower case, * return its upper case ASCII value */ char ToUpper(char inchar) { int outchar = inchar; if ('a' <= inchar && inchar <= 'z') outchar = inchar - ('a' - 'A'); return outchar; } Compile this function to LC-2 assembly language. 14-17 Copyright © The McGraw-Hill Companies, Inc. Permission required for reproduction or display. Example: LC-2 Code for ToUpper ToUpper FALSE STR LDR STR LD ADD BRn LD ADD BRp LD ADD STR LDR STR LDR LDR RET R7, R6, #1 ; save return addr R0, R6, #3 ; load parameter (inchar) R0, R6, #4 ; initialize outchar R1, neg_a ; load -'a' R1, R0, R1 ; inchar - 'a' FALSE ; br if inchar < 'a' R1, neg_z ; load -'z' R1, R0, R1 ; inchar - 'z' FALSE ; br if inchar > 'z' R1, neg_upper ; load -('a' - 'A') R0, R0, R1 ; inchar - ('a' - 'A') R0, R6, #4 ; store to outchar R0, R6, #4 ; load outchar R0, R6, #0 ; store in result R7, R6, #1 ; load return address R6, R6, #2 ; load dynamic link 14-18
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.