(Stack) Frame MIPS Call-Return Linkage: Stack Frames

(Stack) Frame MIPS Call-Return Linkage: Stack Frames

Review: Procedure Call and Return Procedure Call Gap 0x10000 addi $a0,$0,43 int equal(int a1, int a2) 0x10004 addi $a1,$0,2 ISA Level { 0x10008 jal 0x30408 int tsame; 0x1000c ?? • Call and return instructions tsame = 0; C/C++ Level if (a1 == a2) 0x30408 addi $v0,$0,0 tsame = 1; 0x3040c bne $a0,$a1,4 • Local name scope return(tsame); 0x30410 addi $v0,$0,1 • Change tsame to same } 0x30414 jr $ra main() • Recursion { PC $ra=$31 0x10000 ?? • Arguments and return value (functions) int x,y,same; 0x10004 ?? Assembly Level x = 43; 0x10008 ?? y = 2; 0x30408 0x1000c • Must bridge gap between HLL and ISA same = equal(x,y); 0x3040c 0x1000c • Supporting local names // other computation 0x30410 0x1000c } 0x30414 0x1000c • Passing arguments (arbitrary number?) 0x1000c 0x1000c © 2012 Daniel J. Sorin 54 © 2012 Daniel J. Sorin 55 from Roth and Lebeck from Roth and Lebeck Review: Procedure Call (Stack) Frame MIPS Call-Return Linkage: Stack Frames • Procedures use a frame in the stack to: High Mem • Hold values passed to procedures as arguments Argument 6 Argument 5 Arguments and • Save registers that the callee procedure may modify, but which the local variables at procedure’s caller does not want changed FP fixed offset from FP Callee Save • To provide space for local variables Registers (variables with local scope) • To evaluate complex expressions (old FP, RA) Local Variables Grows and shrinks during Dynamic area expression evaluation SP Low Mem © 2012 Daniel J. Sorin 56 © 2012 Daniel J. Sorin 57 from Roth and Lebeck from Roth and Lebeck MIPS Register Naming Conventions MIPS/GCC Procedure Calling Conventions 0 zero constant 16 s0 callee saves Calling Procedure 1 at reserved for assembler . • Step-1: Pass the arguments 2 v0 expression evaluation & 23 s7 • First four arguments (arg0-arg3) are passed in registers $a0-$a3 3 v1 function results 24 t8 temporary (cont’d) • Remaining arguments are pushed onto the stack 4 a0 arguments 25 t9 (in reverse order, arg5 is at the top of the stack) 5 a1 26 k0 reserved for OS kernel • Step-2: Save caller-saved registers 6 a2 27 k1 • Save registers $t0-$t9 if they contain live values at the call site 7 a3 28 gp pointer to global area 8 t0 temporary: caller saves 29 sp Stack pointer • Step-3: Execute a jal instruction . 30 fp frame pointer 15 t7 31 ra return address © 2012 Daniel J. Sorin 58 © 2012 Daniel J. Sorin 59 from Roth and Lebeck from Roth and Lebeck MIPS/GCC Procedure Calling Conventions (cont.) MIPS/GCC Procedure Calling Conventions (cont.) Called Routine On return from a call • Step-1: Establish stack frame • Step-1: Put returned values in registers $v0 and $v1 • Subtract the frame size from the stack pointer (if values are returned) subiu $sp, $sp, <frame-size> • Step-2: Restore callee-saved registers • Typically, minimum frame size is 32 bytes (8 words) • Restore $fp and other saved registers: $ra, $s0 - $s7 • Step-2: Save callee saved registers in the frame • Step-3: Pop the stack • Register $fp is always saved (by convention) • Add the frame size to $sp • Register $ra is saved if routine makes a call addiu $sp, $sp, <frame-size> • Registers $s0-$s7 are saved if they are used • Step-4: Return • Step-3: Establish frame pointer • Jump to the address in $ra • Add the stack <frame size> - 4 to the address in $sp jr $ra addiu $fp, $sp, <frame-size> - 4 © 2012 Daniel J. Sorin 60 © 2012 Daniel J. Sorin 61 from Roth and Lebeck from Roth and Lebeck Example2 (will not cover in class) Example2 (cont.) # Main code segment # Program to add together list of 9 numbers .text # Code again: # Begin main loop .align 2 lw $t6, 0($s0) #\ .globl main addu $s1, $s1, $t6 #/ Actual "work" # SPIM I/O main: # MAIN procedure Entrance li $v0, 4 #\ subu $sp, 40 #\ Push the stack move $a0, $s2 # > Print a string sw $ra, 36($sp) # \ Save return address syscall #/ sw $s3, 32($sp) # \ li $v0, 1 #\ move $a0, $s1 # > Print a number sw $s2, 28($sp) # > Entry Housekeeping syscall #/ sw $s1, 24($sp) # / save registers on stack li $v0, 4 #\ sw $s0, 20($sp) # / la $a0, nln # > Print a string (eol) move $v0, $0 #/ initialize exit code to 0 syscall #/ move $s1, $0 #\ addu $s0, $s0, 4 #\ index update and la $s0, list # \ Initialization bne $s0, $s3, again #/ end of loop la $s2, msg # / la $s3, list+36 #/ © 2012 Daniel J. Sorin 62 © 2012 Daniel J. Sorin 63 from Roth and Lebeck from Roth and Lebeck Example2 (cont.) Some Details/Quirks of the MIPS ISA # Exit Code • Register zero always has the value zero move $v0, $0 #\ lw $s0, 20($sp) # \ • Even if you try to write it! lw $s1, 24($sp) # \ • jal puts the return address PC+4 into the link register ($ra) lw $s2, 28($sp) # \ Closing Housekeeping lw $s3, 32($sp) # / restore registers • All instructions change all 32 bits of the destination register lw $ra, 36($sp) # / load return address (lui, lb, lh) and read all 32 bits of sources (add, sub, and, or, addu $sp, 40 # / Pop the stack jr $ra #/ exit(0) ; …) .end main # end of program • Immediate arithmetic and logical instructions are extended # Data Segment as follows: • logical immediates are zero-extended to 32 bits .data # Start of data segment • arithmetic immediates are sign-extended to 32 bits list: .word 35, 16, 42, 19, 55, 91, 24, 61, 53 msg: .asciiz "The sum is " • lb and lh extend data as follows: nln: .asciiz "\n" • lbu, lhu are zero extended • lb, lh are sign extended © 2012 Daniel J. Sorin 64 © 2012 Daniel J. Sorin 65 from Roth and Lebeck from Roth and Lebeck .

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    3 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us