inst eecs berkeley edu cs61c su05 CS61C Machine Structures Lecture 8 MIPS Procedures 2005 06 30 CS 61C L08 MIPS Procedures 1 Andy Carle A Carle Summer 2005 UCB Topic Outline Functions More Logical Operations CS 61C L08 MIPS Procedures 2 A Carle Summer 2005 UCB C functions main int i j k m i mult j k m mult i i What information must compiler programmer keep track of 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 instructions can accomplish this CS 61C L08 MIPS Procedures 3 A Carle Summer 2005 UCB Function Call Bookkeeping What are the properties of a function Function call transfers control somewhere else and then returns Arguments Return Value Black box operation scoping Re entrance CS 61C L08 MIPS Procedures 4 A Carle Summer 2005 UCB 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 Local variables v0 v1 s0 s1 s7 The stack is also used more later CS 61C L08 MIPS Procedures 5 A Carle Summer 2005 UCB Instruction Support for Functions 1 6 C sum a b a b s0 s1 int sum int x int y return x y M address In MIPS all instructions I 1000 are 4 bytes and stored in 1004 P memory just like data So 1008 S 1012 here we show the 1016 addresses of where the 2000 programs are stored 2004 CS 61C L08 MIPS Procedures 6 A Carle Summer 2005 UCB Instruction Support for Functions 2 6 C sum a b a b s0 s1 int sum int x int y return x y M address I 1000 add a0 s0 zero x a P 1004 add a1 s1 zero y b 1008 addi ra zero 1016 ra 1016 S 1012 j sum jump to sum 1016 2000 sum add v0 a0 a1 2004 jr ra new instruction CS 61C L08 MIPS Procedures 7 A Carle Summer 2005 UCB Instruction Support for Functions 3 6 C sum a b a b s0 s1 int sum int x int y return x y M Question Why use jr here Why not simply use j I P Answer sum might be called by many functions so we can t return to a fixed S place The calling proc to sum must be able to say return here somehow 2000 sum add v0 a0 a1 2004 jr ra new instruction CS 61C L08 MIPS Procedures 8 A Carle Summer 2005 UCB Instruction Support for Functions 4 6 instruction to jump and save return Single address jump and link jal Before 1008 addi ra zero 1016 ra 1016 1012 j sum go to sum After 1008 jal sum ra 1012 go to 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 CS 61C L08 MIPS Procedures 9 A Carle Summer 2005 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 CS 61C L08 MIPS Procedures 10 A Carle Summer 2005 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 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 address CS 61C L08 MIPS Procedures 11 A Carle Summer 2005 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 CS 61C L08 MIPS Procedures 12 A Carle Summer 2005 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 Stack Space to be used by procedure during execution this is where we can save register values CS 61C L08 MIPS Procedures 13 A Carle Summer 2005 UCB C memory Allocation Address review Stack Space for saved procedure information sp stack pointer 0 Heap Explicitly created space e g malloc C pointers Static Variables declared once per program Code Program CS 61C L08 MIPS Procedures 14 A Carle Summer 2005 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 CS 61C L08 MIPS Procedures 15 A Carle Summer 2005 UCB Using the Stack 2 2 int Hand compile sumSquare int x int y return mult x x y sumSquare push 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 add v0 v0 a1 lw ra 4 sp pop addi sp sp 8 jr ra mult CS 61C L08 MIPS Procedures 16 restore y mult y get ret addr restore stack A Carle Summer 2005 UCB Steps for Making a Procedure Call 1 Save necessary values onto stack 2 Assign argument s if any 3 jal call 4 Restore values from stack CS 61C L08 MIPS Procedures 17 A Carle Summer 2005 UCB Rules for Procedures Called with a jal instruction returns with a jr ra Accepts up to 4 arguments in a0 a1 a2 and a3 Return value is always in v0 and if necessary in v1 Must follow register conventions even in functions that only you will call So what are they CS 61C L08 MIPS Procedures 18 A Carle Summer 2005 UCB MIPS Registers The constant 0 0 zero Reserved for Assembler 1 at Return Values 2 3 v0 v1 Arguments 4 7 a0 a3 Temporary 8 15 t0 t7 Saved 16 23 s0 s7 More Temporary 24 25 t8 t9 Used by Kernel 26 27 k0 k1 Global Pointer 28 gp Stack Pointer 29 sp Frame Pointer 30 fp Return Address 31 ra From COD 3rd Ed green insert Use names for registers code is clearer CS 61C L08 MIPS Procedures 19 A Carle Summer 2005 UCB …
View Full Document
Unlocking...