ì ¡ Computer ¡Systems ¡and ¡Networks ¡ ECPE ¡170 ¡– ¡Jeff ¡Shafer ¡– ¡University ¡of ¡the ¡Pacific ¡ MIPS ¡Assembly ¡ (FuncDons) ¡ Instructor: ¡Dr. ¡Vivek ¡Pallipuram ¡
2 ¡ Lab ¡Schedule ¡ AcDviDes ¡ Assignments ¡Due ¡ ì This ¡Week ¡ ì Lab ¡10 ¡ Lab ¡work ¡Dme ¡ Due ¡by ¡NOV ¡21 st ¡5:00am ¡ ì ì MIPS ¡funcDons ¡ ì ì Lab ¡11 ¡ MIPS ¡Random ¡Number ¡ ì Due ¡by ¡NOV ¡28 th ¡5:00am ¡ ì Generator ¡ ì Lab ¡12 ¡ Due ¡by ¡DEC ¡9 th ¡5:00am ¡ ì Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
3 ¡ ì ¡ MIPS ¡Functions ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
4 ¡ Function ¡Requirements? ¡ ì What ¡happens ¡when ¡we ¡call ¡a ¡funcJon? ¡ Place ¡funcDon ¡arguments ¡in ¡standard ¡locaDon ¡ 1. where ¡funcDon ¡can ¡find ¡them ¡ Save ¡current ¡program ¡locaDon ¡to ¡return ¡to ¡later ¡ 2. (the ¡“Program ¡Counter” ¡register) ¡ Jump ¡to ¡the ¡funcDon ¡locaDon ¡ 3. FuncDon ¡runs ¡using ¡provided ¡arguments ¡ 4. FuncDon ¡produces ¡output ¡(return ¡value) ¡and ¡saves ¡it ¡ 5. in ¡standard ¡locaDon ¡ Jump ¡to ¡original ¡program ¡locaDon ¡(return) ¡ 6. 1. Technically, ¡+1 ¡instruc3on ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
5 ¡ Function ¡Requirements ¡ ì Can ¡a ¡funcJon ¡change ¡local ¡variables ¡of ¡its ¡calling ¡ funcJon? ¡ ì No! ¡The ¡funcDon ¡operates ¡in ¡its ¡own ¡“bubble” ¡ ì What ¡happens ¡if ¡the ¡funcJon ¡changes ¡$s0 ¡which ¡ was ¡also ¡used ¡by ¡the ¡calling ¡funcJon? ¡ ì Problem! ¡Your ¡funcDon ¡has ¡corrupted ¡the ¡calling ¡ funcDon ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
6 ¡ Functions ¡in ¡Assembly ¡ In ¡assembly, ¡ you ¡must ¡do ¡all ¡the ¡background ¡ work ¡for ¡funcDons ¡that ¡the ¡compiler ¡did ¡ automaDcally ¡in ¡a ¡higher ¡level ¡language ¡ FuncDons ¡sDll ¡allow ¡for ¡ code ¡re-‑use ¡ (good!), ¡ but ¡they’re ¡more ¡complicated ¡than ¡in ¡C ¡or ¡C++ ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
7 ¡ Registers ¡ Name ¡ Use ¡ Constant ¡value: ¡ZERO ¡ $zero Local ¡variables ¡ $s0-$s7 (ConvenDon: ¡These ¡are ¡ saved ¡if ¡a ¡funcDon ¡needs ¡to ¡re-‑use ¡them) ¡ Temporary ¡results ¡ $t0-$t9 (ConvenDon: ¡These ¡are ¡ not ¡saved ¡if ¡a ¡funcDon ¡needs ¡to ¡re-‑use ¡them) ¡ Arguments ¡to ¡pass ¡to ¡funcDon ¡(max ¡of ¡4) ¡ $a0-$a3 Return ¡value ¡to ¡obtain ¡from ¡funcDon ¡(max ¡of ¡2) ¡ $v0-$v1 Return ¡address ¡of ¡funcDon ¡ $ra Stack ¡pointer ¡(current ¡top ¡of ¡stack) ¡ $sp Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
8 ¡ More ¡Jumps ¡ ì Jump ¡and ¡Link ¡ (side ¡effect: ¡ $ra ¡stores ¡address ¡of ¡next ¡instrucDon) ¡ jal <destination> Use ¡this ¡to ¡ call ¡a ¡funcDon! ¡ ì Jump ¡Register ¡ (desDnaDon ¡address ¡is ¡stored ¡in ¡<reg1> ¡ ¡ jr <reg1> Use ¡this ¡to ¡ return ¡from ¡ a ¡funcDon! ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
9 ¡ Task ¡: ¡Write ¡Code ¡ #include <stdio.h> ì Place ¡arguments ¡ ¡ in ¡ $a0-$a3 int function(int a); int main() ì Place ¡return ¡values ¡ { in ¡ $v0-$v1 int x=5; int y; ì Return ¡address ¡saved ¡ y = function(x); automaDcally ¡in ¡ $ra printf("y=%i\n", y); ì Ignore ¡the ¡stack ¡for ¡this ¡ return 0; example. ¡(Thus, ¡the ¡funcDon ¡ } will ¡destroy ¡registers ¡used ¡ int function(int a) by ¡calling ¡funcDon) ¡ { return 3*a+5; } Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
# Simple routine to demo functions # NOT using a stack in this example.Thus, the function does not preserve values 10 ¡ # of calling function! # ------------------------------------------------------------------ .text .globl main main: # Register assignments # $s0 = x # $s1 = y # Initialize registers lw $s0, x # Reg $s0 = x lw $s1, y # Reg $s1 = y # Call function move $a0, $s0 # Argument 1: x ($s0) jal fun # Save current PC in $ra, and jump to fun move $s1,$v0 # Return value saved in $v0. This is y ($s1) # Print msg1 li $v0, 4 # print_string syscall code = 4 la $a0, msg1 syscall # Print result (y) li $v0,1 # print_int syscall code = 1 move $a0, $s1 # Load integer to print in $a0 syscall # Print newline li $v0,4 # print_string syscall code = 4 la $a0, lf syscall # Exit li $v0,10 # exit Fall ¡2016 ¡ syscall
11 ¡ # ------------------------------------------------------------------ # FUNCTION: int fun(int a) # Arguments are stored in $a0 # Return value is stored in $v0 # Return address is stored in $ra (put there by jal instruction) # Typical function operation is: fun: # Do the function math li $s0, 3 mul $s1,$s0,$a0 # s1 = 3*$a0 (i.e. 3*a) addi $s1,$s1,5 # 3*a+5 # Save the return value in $v0 move $v0,$s1 # Return from function jr $ra # Jump to addr stored in $ra # ------------------------------------------------------------------ # Start .data segment (data!) .data x: .word 5 y: .word 0 msg1: .asciiz "y=" lf: .asciiz "\n" Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
12 ¡ Preserving ¡Registers ¡ ì What ¡if ¡we ¡don’t ¡want ¡to ¡destroy ¡registers ¡used ¡by ¡ the ¡calling ¡funcJon? ¡ ì Need ¡to ¡save ¡those ¡registers ¡somewhere ¡ ¡ while ¡our ¡funcDon ¡runs ¡(like ¡memory!) ¡ ì A ¡ stack ¡is ¡a ¡good ¡structure ¡for ¡this ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
13 ¡ The ¡Stack ¡ $sp Memory ¡ Stack ¡is ¡a ¡data ¡structure ¡stored ¡ ì in ¡memory ¡ $sp ¡(“Stack ¡Pointer”) ¡points ¡to ¡ ì top ¡of ¡stack ¡ But ¡stack ¡grows ¡ down ¡in ¡ ì memory! ¡ Example ¡ ì Push ¡4 ¡to ¡stack ¡ ì Push ¡5 ¡to ¡stack ¡ ì Pop ¡(5 ¡from ¡stack) ¡ ì Pop ¡(4 ¡from ¡stack) ¡ ì Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
14 ¡ The ¡Stack ¡ Memory ¡ Stack ¡is ¡a ¡data ¡structure ¡stored ¡ ì in ¡memory ¡ $sp 4 ¡ $sp ¡(“Stack ¡Pointer”) ¡points ¡to ¡ ì top ¡of ¡stack ¡ But ¡stack ¡grows ¡ down ¡in ¡ ì memory! ¡ Example ¡ ì Push ¡4 ¡to ¡stack ¡ ì Push ¡5 ¡to ¡stack ¡ ì Pop ¡(5 ¡from ¡stack) ¡ ì Pop ¡(4 ¡from ¡stack) ¡ ì Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
15 ¡ The ¡Stack ¡ Memory ¡ Stack ¡is ¡a ¡data ¡structure ¡stored ¡ ì in ¡memory ¡ 4 ¡ 5 ¡ $sp $sp ¡(“Stack ¡Pointer”) ¡points ¡to ¡ ì top ¡of ¡stack ¡ But ¡stack ¡grows ¡ down ¡in ¡ ì memory! ¡ Example ¡ ì Push ¡4 ¡to ¡stack ¡ ì Push ¡5 ¡to ¡stack ¡ ì Pop ¡(5 ¡from ¡stack) ¡ ì Pop ¡(4 ¡from ¡stack) ¡ ì Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
16 ¡ The ¡Stack ¡ Memory ¡ Stack ¡is ¡a ¡data ¡structure ¡stored ¡ ì in ¡memory ¡ $sp 4 ¡ $sp ¡(“Stack ¡Pointer”) ¡points ¡to ¡ ì top ¡of ¡stack ¡ But ¡stack ¡grows ¡ down ¡in ¡ ì memory! ¡ Example ¡ ì Push ¡4 ¡to ¡stack ¡ ì Push ¡5 ¡to ¡stack ¡ ì Pop ¡(5 ¡from ¡stack) ¡ ì Pop ¡(4 ¡from ¡stack) ¡ ì Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
17 ¡ The ¡Stack ¡ $sp Memory ¡ Stack ¡is ¡a ¡data ¡structure ¡stored ¡ ì in ¡memory ¡ $sp ¡(“Stack ¡Pointer”) ¡points ¡to ¡ ì top ¡of ¡stack ¡ But ¡stack ¡grows ¡ down ¡in ¡ ì memory! ¡ Example ¡ ì Add ¡4 ¡to ¡stack ¡ ì Add ¡5 ¡to ¡stack ¡ ì Pop ¡ ì Pop ¡ ì Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
18 ¡ The ¡Stack ¡ ì How ¡would ¡we ¡modify ¡previous ¡soluJon ¡to ¡use ¡a ¡ stack? ¡ Computer ¡Systems ¡and ¡Networks ¡ Fall ¡2016 ¡
Recommend
More recommend