Download presentation
Presentation is loading. Please wait.
Published byBrett Stevens Modified over 6 years ago
1
Storage Classes There are three places in memory where data may be placed: In Data section declared with .data in assembly language in C - Static) On the run-time stack Automatic Variables "automatically" pushed and popped as a subroutine is entered and exited On the heap. Dynamic Variables
2
Frames in the Run Time Stack
In a high-level language a local variable is implemented as a location on the run-time stack. Each time a subroutine is activated, new locations for variables are pushed onto the stack. The section of the stack for each activation is called a stack frame or an activation record. When a subroutine returns to its caller the stack frame is popped from the stack. Thus, local variables only exist as memory locations while a subroutine is active.
3
Implementation of Local Variables
In this example, space is reserved in the stack for implementing four local variables a, b, i and j. In the picture, the space reserved for variable a is labeled "a", but of course what is in that space is the 32-bit pattern that the variable holds. The values stored in a variable may change as the program executes. A frame pointer holds the address of the stack frame for a subroutine.
4
$fp – is not changed. $sp – is changed
Register $30 is reserved, by software convention, for use as a frame pointer. When a subroutine starts running, the frame pointer and the stack pointer contain the same address. While the subroutine is active, the frame pointer, points at the top of the stack. (Doesn’t change). The stack pointer may be involved in pushing and popping values onto and off of the stack. (Changed)
5
Frame-based Linkage Convention
Calling a Subroutine (done by the caller): Push any registers $t0-$t9 that contain values that must be saved. Push the registers in numerical order. Put argument values into $a0-$a3. Call the subroutine using jal. Subroutine Prolog (done by the subroutine): Push $ra (always). Push the caller's frame pointer $fp. Push any of the registers $s0-$s7 that the subroutine might alter. Initialize the frame pointer: $fp = $sp - space_for_variables. Initialize the stack pointer: $sp = $fp.
6
Frame-based Linkage Convention
Body: Normal code, except it must follow these conventions if it calls another subroutine. T and A registers can be used freely, as can any S registers that were saved in the prolog. Variables on the stack are accessed using disp($fp). The subroutine may push and pop values on the stack using $sp.
7
Frame-based Linkage Convention
Epilog: Put return values in $v0-$v1 registers. $sp = $fp + space_for_variables. Pop into $s0-$s7 any values for them that were previously saved in the frame. Pop the caller's frame pointer into $fp. Pop $ra (always). Return to the caller using jr $ra. Regaining Control: Pop any registers $t0-$t9 that the caller previously pushed
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.