PowerPoint PresentationAdministriviaExample: The C Switch Statement (3/3)C functionsFunction Call BookkeepingInstruction Support for Functions (1/6)Instruction Support for Functions (2/6)Instruction Support for Functions (3/6)Instruction Support for Functions (4/6)Instruction Support for Functions (5/6)Instruction Support for Functions (6/6)Nested Procedures (1/2)Nested Procedures (2/2)C memory Allocation reviewUsing the Stack (1/2)Using the Stack (2/2)Steps for Making a Procedure CallRules for ProceduresBasic Structure of a FunctionMIPS RegistersOther RegistersPeer InstructionSlide 24“And in Conclusion…”CS61C L11 Introduction to MIPS: Procedures I (1)Garcia © UCBLecturer PSOE Dan Garciawww.cs.berkeley.edu/~ddgarciainst.eecs.berkeley.edu/~cs61c CS61C : Machine Structures Lecture 11 – Introduction to MIPS Procedures I Smart crumble w/pressure A study showed that studentswith a “high working-memory [short-term] (HWM) capacity” (prob. most Cal students) crack under pressure, but LWM students didn’t. Under pressure, HWM = LWM. www.livescience.com/humanbiology/050209_under_pressure.htmlCS61C L11 Introduction to MIPS: Procedures I (2)Garcia © UCBAdministrivia•High-pressure midterm evaluations :-)•Review-Sun, 2005-03-06, 2pm @ 10 Evans•Midterm-Mon, 2005-03-07, 7-10pm @ 1 Le Conte•Dan’s before-class graphics videos: www.siggraph.org/publications/video-review/SVR.html•Project 1 out (make sure to work on it this weekend), due next Friday•An easy HW4 will follow, due Wed afterCS61C L11 Introduction to MIPS: Procedures I (4)Garcia © UCBExample: The C Switch Statement (3/3)•Final compiled MIPS code: bne $s5,$0,L1 # branch k!=0 add $s0,$s3,$s4 #k==0 so f=i+j j Exit # end of case so ExitL1: addi $t0,$s5,-1 # $t0=k-1 bne $t0,$0,L2 # branch k!=1 add $s0,$s1,$s2 #k==1 so f=g+h j Exit # end of case so ExitL2: addi $t0,$s5,-2 # $t0=k-2 bne $t0,$0,L3 # branch k!=2 sub $s0,$s1,$s2 #k==2 so f=g-h j Exit # end of case so ExitL3: addi $t0,$s5,-3 # $t0=k-3 bne $t0,$0,Exit # branch k!=3 sub $s0,$s3,$s4 #k==3 so f=i-j Exit:Removing breaks does NOT translate to removing jumps in this code… (my bad)CS61C L11 Introduction to MIPS: Procedures I (5)Garcia © UCBC functionsmain() {int i,j,k,m;...i = mult(j,k); ... m = mult(i,i); ...}/* really dumb mult function */int mult (int mcand, int mlier){int product; product = 0;while (mlier > 0) { product = product + mcand; mlier = mlier -1; }return product;}What information mustcompiler/programmer keep track of?What instructions can accomplish this?CS61C L11 Introduction to MIPS: Procedures I (6)Garcia © UCBFunction Call Bookkeeping•Registers play a major role in keeping track of information for function calls.•Register conventions:•Return address $ra•Arguments $a0, $a1, $a2, $a3•Return value $v0, $v1•Local variables $s0, $s1, … , $s7•The stack is also used; more later.CS61C L11 Introduction to MIPS: Procedures I (7)Garcia © UCBInstruction Support for Functions (1/6) ... sum(a,b);... /* a,b:$s0,$s1 */}int sum(int x, int y) {return x+y;} address1000 1004 1008 1012 1016 2000 2004CMIPSIn MIPS, all instructions are 4 bytes, and stored in memory just like data. So here we show the addresses of where the programs are stored.CS61C L11 Introduction to MIPS: Procedures I (8)Garcia © UCBInstruction Support for Functions (2/6) ... sum(a,b);... /* a,b:$s0,$s1 */}int sum(int x, int y) {return x+y;} address1000 add $a0,$s0,$zero # x = a1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 #$ra=10161012 j sum #jump to sum1016 ...2000 sum: add $v0,$a0,$a12004 jr $ra # new instructionCMIPSCS61C L11 Introduction to MIPS: Procedures I (9)Garcia © UCBInstruction Support for Functions (3/6) ... sum(a,b);... /* a,b:$s0,$s1 */}int sum(int x, int y) {return x+y;} 2000 sum: add $v0,$a0,$a12004 jr $ra # new instructionCMIPS•Question: Why use jr here? Why not simply use j?•Answer: sum might be called by many functions, so we can’t return to a fixed place. The calling proc to sum must be able to say “return here” somehow.CS61C L11 Introduction to MIPS: Procedures I (10)Garcia © UCBInstruction Support for Functions (4/6)•Single instruction to jump and save return address: jump and link (jal)•Before:1008 addi $ra,$zero,1016 #$ra=10161012 j sum #goto sum•After:1008 jal sum # $ra=1012,goto sum•Why have a jal? Make the common case fast: function calls are very common. Also, you don’t have to know where the code is loaded into memory with jal.CS61C L11 Introduction to MIPS: Procedures I (11)Garcia © UCBInstruction Support for Functions (5/6)•Syntax for jal (jump and link) is same as for j (jump):jal label• jal should really be called laj for “link and jump”:•Step 1 (link): Save address of next instruction into $ra (Why next instruction? Why not current one?)•Step 2 (jump): Jump to the given labelCS61C L11 Introduction to MIPS: Procedures I (12)Garcia © UCBInstruction Support for Functions (6/6)•Syntax for jr (jump register):jr register•Instead of providing a label to jump to, the jr instruction provides a register which contains an address to jump to.•Only useful if we know exact address to jump to.•Very useful for function calls:•jal stores return address in register ($ra)•jr $ra jumps back to that addressCS61C L11 Introduction to MIPS: Procedures I (13)Garcia © UCBNested Procedures (1/2)int sumSquare(int x, int y) {return mult(x,x)+ y;}•Something called sumSquare, now sumSquare is calling mult.•So there’s a value in $ra that sumSquare wants to jump back to, but this will be overwritten by the call to mult.•Need to save sumSquare return address before call to mult.CS61C L11 Introduction to MIPS: Procedures I (14)Garcia © UCBNested Procedures (2/2)•In general, may need to save some other info in addition to $ra.•When a C program is run, there are 3 important memory areas allocated:•Static: Variables declared once per program, cease to exist only after execution completes. E.g., C globals•Heap: Variables declared dynamically•Stack: Space to be used by procedure during execution; this is where we can save register valuesCS61C L11 Introduction to MIPS: Procedures I (15)Garcia © UCBC memory Allocation review0AddressCodeProgramStaticVariables declaredonce per programHeapExplicitly created space, e.g., malloc(); C pointersStackSpace for saved procedure information$sp
View Full Document