1 / 22

ECE 445 – Computer Organization

The Stack Pointer and the Frame Pointer (Lecture #19). ECE 445 – Computer Organization. The slides included herein were taken from the materials accompanying Computer Organization and Design, 4 th Edition , by Patterson and Hennessey,

Download Presentation

ECE 445 – Computer Organization

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. The Stack Pointer and the Frame Pointer (Lecture #19) ECE 445 – Computer Organization The slides included herein were taken from the materials accompanying Computer Organization and Design, 4th Edition, by Patterson and Hennessey, and were used with permission from Morgan Kaufmann Publishers.

  2. Material to be covered ... Chapter 2: Sections 8 – 9

  3. ECE 445 - Computer Organization Some Basic Definitions Stack Pointer A value denoting the most recently allocated address in a stack that shows where registers should be spilled or where old register values can be found. Frame Pointer A value denoting the location of the saved registers and local variables for a given procedure. Procedure Frame (aka. Activation Record) The segment of the stack containing a procedure's saved registers and local variables. Caller: A program or function that calls a procedure Callee: The procedure that is called

  4. ECE 445 - Computer Organization Frame Pointer The frame pointer points to the highest address in the procedure frame (or activation record). The frame pointer remains fixed at this memory location for the duration of the procedure. Whereas, the stack pointer moves each time an element is added to or removed from the stack. The frame pointer must be preserved across procedure calls.

  5. ECE 445 - Computer Organization Stack Allocation and the Frame Pointer $fp points to the highest address of the procedure frame stack allocation when a procedure is called before procedure call after procedure call $sp points to the “top” of the stack Local data – stack space allocated by the called procedure

  6. ECE 445 - Computer Organization Example: Calling CalculateF

  7. ECE 445 - Computer Organization CalculateF: f = g*(a+b+c+d+e*2) main { .. f = CalculateF( a, b, c, d, e, g ); .. print( f ); } CalculateF( pa, pb, pc, pd, pe, pg ) { x = Sum2( a, b, c, d, e ); pf = Prod1( x, g ); return( pf ); } 1000 3000 Sum2( pa, pb, pc, pd, pe ) { px = pa + pb + pc + pd + pe*2; return( px ); } Prod1( px, pg ) { y = pg * px; return( y ); } 1024 3004 2000 4000 2004 4004

  8. ECE 445 - Computer Organization CalculateF: f = g*(a+b+c+d+e*2) • The main program calls CalculateF to carry out the arithmetic operation. • CalculateF calls Sum2 to carry out the addition. • CalculateF then calls Prod1 to carry out the multiplication. Main calls Before calling Sum2: 1. Save return address (of main) on the stack. 2. Save argument e on the stack. Before returning to Main: 1. Restore return address (of main) from the stack. 2. Restore stack (i.e. stack pointer). CalculateF f = g*(a+b+c+d+e*2) calls calls Sum2 f = (a+b+c+d+e*2) Prod1 f = g*(sum)

  9. ECE 445 - Computer Organization Main calls CalculateF Data local to Main function is pushed on the stack. Parameters to be passed to the called function are also pushed onto the stack. Stack Pointer points to the last element pushed onto the stack. Local Data Stack high address $fp data e main g $sp Saved arguments . . . jal CalculateF procedure call in Main low address

  10. ECE 445 - Computer Organization Main calls CalculateF Main program pushes arguments (e and g) onto the stack. Main function executes jal CalculateF $ra = return address of Main PC = CalculateF Stack high address $fp data e main $sp g Saved arguments from calling program . . . low address

  11. ECE 445 - Computer Organization Stack Usage by CalculateF addi $sp, $sp -4 sw $fp, 0($sp) add $fp, $sp, $zero • Frame pointer from Main pushed onto stack. • Frame pointer for CalculateF set equal to stack pointer • ($fp = $sp). • Stack pointer and Frame pointer now point to the highest address in the procedure frame for CalculateF. • All arguments are now relative to the frame pointer. Stack high address data e Main g $fp, $sp $fp (from Main) CalculateF . . . low address

  12. ECE 445 - Computer Organization Stack Usage byCalculateF Return address is pushed onto the stack. Stack pointer adjusted. It is now possible to call another function. Stack high address data e Main g $fp $fp (from Main) $sp $ra (from Main) CalculateF . . . addi $sp, $sp, -4 sw $ra, 0($sp) low address

  13. ECE 445 - Computer Organization Stack Usage by CalculateF Read argument e from stack. Multiply e by 2. Push value onto stack. Adjust stack pointer. lw $t0, 8($fp) sll $t0, $t0, 1 addi $sp, $sp, -4 sw $t0, 0($sp) Stack high address data e Main g $fp $fp (from Main) $ra (from Main) CalculateF $sp e * 2 . . . low address

  14. ECE 445 - Computer Organization CalculateF calls Sum2

  15. ECE 445 - Computer Organization CalculateF: f = g*(a+b+c+d+e*2) lw $t0, 0($sp) add $t0, $t0, $a0 add $t0, $t0, $a1 add $t0, $t0, $a2 add $t0, $t0, $a3 add $v0, $t0, $zero jr $ra • CalculateF calls Sum2 • Arguments passed to Sum2 a, b, c, d → $a0 - $a3 e*2 → last element on stack • Return address ($ra) for Main pushed onto stack before call • Value returned to CalculateF in register $v0 jal Sum2 procedure call in CalculateF Sum2: # f=(e*2) # f=(e*2)+a # f=(e*2)+a+b # f=(e*2)+a+b+c # f=(e*2)+a+b+c+d # return value # return control return value from Sum2

  16. ECE 445 - Computer Organization CalculateF calls Prod1

  17. ECE 445 - Computer Organization CalculateF: f = g*(a+b+c+d+e*2) add $a0, $v0, $zero lw $a1, 4($fp) jal Prod1 # sum from Sum2 # read g from stack # call Prod1 • CalculateF calls Prod1 • Arguments passed to Prod1 sum from Sum2 → $a0 g → $a1 • Return address ($ra) for Main pushed onto stack before call • Value returned to CalculateF in register $v0 passing the sum to Prod1 CalculateF: ... ... passing g to Prod1 procedure call to Prod1

  18. ECE 445 - Computer Organization CalculateF returns to Main

  19. ECE 445 - Computer Organization Restore $sp, $fp, $ra and Return Read $ra from stack. Restore $sp. Read $fp from stack. Return to main. lw $ra, -4($fp) add $sp, $fp, $zero lw $fp, 0($sp) addi $sp, $sp, 4 jr $ra Stack high address data e main g $fp $fp (from Main) $ra (from Main) CalculateF $sp e * 2 . . . low address

  20. ECE 445 - Computer Organization Memory Layout

  21. ECE 445 - Computer Organization Memory Layout Text: program code Static data: global variables e.g., static variables in C, constant arrays and strings $gp initialized to address allowing ±offsets into this segment Dynamic data: heap e.g., malloc in C, new in Java Stack: automatic storage Heap – memory allocated for dynamic data. The heap and stack grow towards each other in the same memory space.

  22. ECE 445 - Computer Organization Questions?

More Related