DOC PREVIEW
Berkeley COMPSCI 61C - Introduction to MIPS Procedures I

This preview shows page 1 out of 4 pages.

Save
View full document
View full document
Premium Document
Do you want full access? Go Premium and unlock all 4 pages.
Access to all documents
Download any document
Ad free experience
Premium Document
Do you want full access? Go Premium and unlock all 4 pages.
Access to all documents
Download any document
Ad free experience

Unformatted text preview:

inst.eecs.berkeley.edu/~cs61c UCB CS61C : Machine Structures Lecture 11 – Introduction to MIPS Procedures I 2010-02-12 “Google is planning to launch an experiment that we hope will make Internet access better and faster for everyone. We plan to test 1 GB/s networks (100x faster) in one or more trial locations across the country, fiber-to-the-home connections. We'll offer service at a competitive price to at least 50,000 and potentially up to 500,000 people.” Lecturer SOE Dan Garcia www.google.com/appserve/fiberrfi CS61C L11 Introduction to MIPS : Procedures I (2) Garcia, Spring 2010 © UCB Review  In order to help the conditional branches make decisions concerning inequalities, we introduce a single instruction: “Set on Less Than” called slt, slti, sltu, sltiu  One can store and load (signed and unsigned) bytes as well as words  Unsigned add/sub don’t cause overflow  New MIPS Instructions: sll, srl, lb, sb slt, slti, sltu, sltiu addu, addiu, subu CS61C L11 Introduction to MIPS : Procedures I (3) Garcia, Spring 2010 © UCB C functions main() { 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 = 0; while (mlier > 0) { product = product + mcand; mlier = mlier -1; } return product; } What information must compiler/programmer keep track of? What instructions can accomplish this? 2010-02-01 @ Faculty Lunch CS10 : The Beauty and Joy of Computing http://inst.eecs.berkeley.edu/~cs39n/fa10/ Function 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 (5) Garcia, Spring 2010 © UCB Instruction Support for Functions (1/6) ... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } address (shown in decimal) 1000 1004 1008 1012 1016 … 2000 2004 C M I P S In 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 (6) Garcia, Spring 2010 © UCB Instruction Support for Functions (2/6) ... sum(a,b);... /* a,b:$s0,$s1 */ } int sum(int x, int y) { return x+y; } address (shown in decimal) 1000 add $a0,$s0,$zero # x = a 1004 add $a1,$s1,$zero # y = b 1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #jump to sum 1016 … 2000 sum: add $v0,$a0,$a1 2004 jr $ra # new instruction C M I P SCS61C L11 Introduction to MIPS : Procedures I (7) Garcia, Spring 2010 © UCB Instruction 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,$a1 2004 jr $ra # new instruction • Question: Why use jr here? Why not use j? • Answer: sum might be called by many places, so we can’t return to a fixed place. The calling proc to sum must be able to say “return here” somehow. C M I P S CS61C L11 Introduction to MIPS : Procedures I (8) Garcia, Spring 2010 © UCB Instruction Support for Functions (4/6)  Single instruction to jump and save return address: jump and link (jal)  Before: 1008 addi $ra,$zero,1016 #$ra=1016 1012 j sum #goto sum  After: 1008 jal sum # $ra=1012,goto sum  Why have a jal?  Make the common case fast: function calls very common.  Don’t have to know where code is in memory with jal! CS61C L11 Introduction to MIPS : Procedures I (9) Garcia, Spring 2010 © UCB Instruction 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 label CS61C L11 Introduction to MIPS : Procedures I (10) Garcia, Spring 2010 © UCB Instruction 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.  Very useful for function calls:  jal stores return address in register ($ra)  jr $ra jumps back to that address CS61C L11 Introduction to MIPS : Procedures I (11) Garcia, Spring 2010 © UCB Nested 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 (12) Garcia, Spring 2010 © UCB Nested 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 via malloc  Stack: Space to be used by procedure during execution; this is where we can save register valuesCS61C L11 Introduction to MIPS : Procedures I (13) Garcia, Spring 2010 © UCB C memory Allocation review 0 ∞"Address Code Program Static Variables declared once per program; e.g., globals Heap Explicitly created space, i.e., malloc() Stack Space for saved procedure information $sp stack pointer CS61C L11 Introduction to MIPS : Procedures I (14) Garcia, Spring 2010 © UCB Using the Stack (1/2)  So we have a register $sp which always points to the last used space in the stack.  To use stack, we decrement this pointer by the amount of space we need and then fill it with info.  So, how do we compile this? int sumSquare(int x, int y) { return mult(x,x)+ y; } CS61C L11 Introduction to MIPS : Procedures I (15) Garcia, Spring 2010 © UCB Using the Stack (2/2)  Hand-compile sumSquare: addi $sp,$sp,-8 # space on stack sw $ra, 4($sp) # save ret addr sw $a1, 0($sp) # save y add $a1,$a0,$zero # mult(x,x) jal mult # call mult lw $a1, 0($sp) # restore y add $v0,$v0,$a1 # mult()+y


View Full Document

Berkeley COMPSCI 61C - Introduction to MIPS Procedures I

Documents in this Course
SIMD II

SIMD II

8 pages

Midterm

Midterm

7 pages

Lecture 7

Lecture 7

31 pages

Caches

Caches

7 pages

Lecture 9

Lecture 9

24 pages

Lecture 1

Lecture 1

28 pages

Lecture 2

Lecture 2

25 pages

VM II

VM II

4 pages

Midterm

Midterm

10 pages

Load more
Download Introduction to MIPS Procedures I
Our administrator received your request to download this document. We will send you the file to your email shortly.
Loading Unlocking...
Login

Join to view Introduction to MIPS Procedures I and access 3M+ class-specific study document.

or
We will never post anything without your permission.
Don't have an account?
Sign Up

Join to view Introduction to MIPS Procedures I 2 2 and access 3M+ class-specific study document.

or

By creating an account you agree to our Privacy Policy and Terms Of Use

Already a member?