Transcript Procedures

COMPUTER ARCHITECTURE &
OPERATIONS I
Instructor: Yaohang Li
Review

Last Class




Procedure Call

Steps of procedure call

caller and callee
Branch Addressing
This Class

Leaf procedure

Quiz
Next Class

Non-leaf procedure
Procedure

Procedure (function)



A stored subroutine that performs a specific
task based on the parameters with which it is
provided
Important when writing a large program
Allow a programmer to focus on a specific
task
Procedure Calling

Steps required
1.
2.
3.
4.
5.
6.
Place parameters in registers
Transfer control to procedure
Acquire storage for procedure
Perform procedure’s operations
Place result in register for caller
Return to place of call
Caller and Callee

Caller


The program that instigates a procedure and
provides the necessary parameter values
Callee

A procedure that executes a series of stored
instructions based on parameters provided by
the caller and then returns control to the caller
Register Usage



$a0 – $a3: arguments (reg’s 4 – 7)
$v0, $v1: result values (reg’s 2 and 3)
$t0 – $t9: temporaries


$s0 – $s7: saved





Can be overwritten by callee
Must be saved/restored by callee
$gp: global pointer for static data (reg 28)
$sp: stack pointer (reg 29)
$fp: frame pointer (reg 30)
$ra: return address (reg 31)
Program Counter (PC)

Program Counter


A register in CPU
Containing the address of the instruction in
the program being executed
Stack

Stack


A last-in-first-out queue
Stack pointer



Push


$sp
Point to the address of the most recent element in
the stack
Add element onto the stack
Pop

Remove element from the stack
Procedure Call Instructions

Procedure call: jump and link
jal ProcedureLabel
 Address of following instruction put in $ra
 Jumps to target address

Procedure return: jump register
jr $ra
 Copies $ra to program counter
 Can also be used for computed jumps

e.g., for case/switch statements
Leaf Procedure and non-Leaf Procedure

Leaf Procedure


Procedures that do not call other procedures
Non-leaf Procedure

Procedures that call other procedures
Leaf Procedure Example

C code:
int leaf_example (int g, int h, int
i, int j)
{ int f;
f = (g + h) - (i + j);
return f;
}
 Arguments g, …, j in $a0, …, $a3
 f in $s0 (hence, need to save $s0 on stack)
 Result in $v0
Leaf Procedure Example

MIPS code: (leaf example)
addi $sp, $sp, -12
Save $s0, $t1, $t0 on stack
sw
sw
sw
$t1, 8($sp)
$t0, 4($sp)
$s0, 0($sp)
add
add
sub
$t0, $a0, $a1
$t1, $a2, $a3
$s0, $t0, $t1
Procedure body
add
$v0, $s0, $zero
Result
lw
lw
lw
addi
$s0,
$t0,
$t1,
$sp,
Restore $s0, $t1, $t0 from the stack
jr
$ra
0($sp)
4($sp)
8($sp)
$sp, 12
Return
Status of Stack
Temporary Registers
MIPS Assumption
$t0 – $t9: temporary registers that are not
preserved by the callee on a procedure call

$s0 – $s7: saved registers
Must be preserved by callee on a procedure call
If used, the callees saves and restores them
Simplified Leaf Procedure Example

MIPS code: (leaf example)
addi $sp, $sp, -4
sw
$s0, 0($sp)
Save $s0 on stack
add
add
sub
$t0, $a0, $a1
$t1, $a2, $a3
$s0, $t0, $t1
Procedure body
add
$v0, $s0, $zero
Result
lw
$s0, 0($sp)
addi $sp, $sp, 4
Restore $s0 from the stack
jr
Return
$ra
Summary

Procedure Call

Registers used

Stack

jal and jr

leaf and no-leaf procedure

Allocating space for new data on the heap
What I want you to do

Review Chapter 2