T23.MIPSArrays

Embed Size (px)

Citation preview

  • 8/14/2019 T23.MIPSArrays

    1/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    1Arrays

    First step is to reserve sufficient space for the array.

    . dat a

    l i s t : . wor d 2, 3, 5, 7, 11, 13, 17, 19, 23, 29si ze: . wor d 10. . .

    l w $t 3, si zel a $t 1, l i st # get ar r ay addr essl i $t 2, 0 # set l oop count er

    pr i nt _ l oop:beq $t 2, $t 3, pr i nt _l oop_end # check f or ar r ay end

    l w $a0, ( $t 1) # pr i nt val ue at t he ar r ay poi nt erl i $v0, 1

    syscal l

    addi $t 2, $t 2, 1 # advance l oop count eraddi $t 1, $t 1, 4 # advance ar r ay poi nt er

    j pr i nt _ l oop # r epeat t he l ooppr i nt _l oop_end:

    Array elements are accessed via their addresses in memory, which is convenient if youvegiven the . space directive a suitable label.

  • 8/14/2019 T23.MIPSArrays

    2/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    2Array Example

    This is part of the palindrome example from the course website:

    . dat a

    st r i ng_space: . space 1024

    . . .

    # pr i or t o t he l oop, $t 1 i s set t o t he addr ess of t he f i r st# char i n st r i ng_space, and $t 2 i s set t o t he l ast one

    t est _l oop:

    bge $t 1, $t 2, i s_pal i n # i f l ower poi nt er >= upper

    # poi nt er , yes

    l b $t 3, ( $t 1) # gr ab t he char at l ower pt r

    l b $t 4, ( $t 2) # gr ab t he char at upper pt r

    bne $t 3, $t 4, not _pal i n # i f di f f er ent , i t ' s not

    addi $t 1, $t 1, 1 # advance l ower pt r

    addi $t 2, $t 2, - 1 # advance upper pt r

    j t est _l oop # r epeat t he l oop

    . . .

  • 8/14/2019 T23.MIPSArrays

    3/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    3Example 1: Array Traversal in C

    / / Pr i nt Li st . c#i ncl ude

    i nt mai n( ) {i nt Sz = 10;i nt Ar r ay[ 10] = {1, 1, 2, 3, 5, 8, 13, 21, 34, 55};

    i nt Pos = 0;whi l e ( Pos < Sz ) {

    pr i nt f ( "%3d: %d\ n" , Pos, Ar r ay[ Pos] ) ;

    ++Pos;}}

  • 8/14/2019 T23.MIPSArrays

    4/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    4Example 1: Array Traversal in MIPS

    # Pr i nt Li st . asm. dat aSz: . wor d 10Ar r ay: . wor d 1, 1, 2, 3, 5, 8, 13, 21, 34, 55NL: . asci i z " \ n"

    . t ext

    mai n:l w $s7, Sz # get si ze of l i stmove $s1, $zero # set count er f or # of el ems pr i nt edmove $s2, $zer o # set of f set f r om Ar r ay

    pr i nt _l oop:

    bge $s1, $s7, pr i nt _ l oop_end # st op af t er l ast el em i s pr i nt ed

    l w $a0, Ar r ay( $s2) # pr i nt next val ue f r om t he l i stl i $v0, 1syscal ll a $a0, NL # pr i nt a newl i nel i $v0, 4syscal l

    addi $s1, $s1, 1 # i ncr ement t he l oop count eraddi $s2, $s2, 4 # st ep t o t he next ar r ay el em

    j pr i nt _l oop # r epeat t he l ooppr i nt _l oop_end:

  • 8/14/2019 T23.MIPSArrays

    5/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    5Example 2: C Bubblesort

    i nt mai n( ) {

    i nt Sz = 10;i nt Li st [ 10] = {17, 5, 92, 87, 41, 10, 23, 55, 72, 36};

    i nt St op, / / $s3: upper l i mi t f or pass

    Cur r , / / $s0: i ndex of cur r ent val ue i n compar i sonNext , / / $s1: i ndex of successor t o cur r ent val ue

    Temp; / / $s2: t emp st or age f or swap

    f or ( St op = Sz - 1; St op > 0; St op- - ) {

    f or ( Cur r = 0; Cur r < St op; Cur r ++) {Next = Cur r + 1;i f ( Li st [ Cur r ] > Li st [ Next ] ) {

    Temp = Li st [ Cur r ] ;Li st [ Cur r ] = Li st [ Next ] ;Li st [ Next ] = Temp;

    }}

    }}

  • 8/14/2019 T23.MIPSArrays

    6/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    6Example 2: Analysis

    i nt mai n( ) {. . .i nt St op,

    Cur r ,

    Next ,Temp;

    f or ( St op = Sz - 1; St op > 0; St op- - ) {

    f or ( Cur r = 0; Cur r < St op; Cur r ++) {

    Next = Cur r + 1;

    i f ( L[ Cur r ] > L[ Next ] ) {Temp = L[ Cur r ] ;L[ Cur r ] = L[ Next ] ;

    L[ Next ] = Temp;}

    }}

    }

    data declarations as before

    $s3: upper limit for pass

    $s0: counter for inner loop

    $s1: offset of current elem

    no need for these

    $t7: current value$t8: next value

    We need to map arguments and variables to registers,

    and identify any additional registers needed.

  • 8/14/2019 T23.MIPSArrays

    7/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    7Example 2: MIPS Bubblesort

    . dat aSz: . wor d 10Li st : . wor d 17, 5, 92, 87, 41, 30, 23, 55, 72, 36

    . t extmai n:

    #################################################### bubbl e_sor tl w $s3, Sz # set out er l oop l i mi taddi $s3, $s3, - 1

    out er : # out er bubbl e- sor t l oopbge $zero, $s3, out er _endl i $s0, 0 # set i nner l oop count erl i $s1, 0 # set cur r ent el ement of f set

    ## i nner l oop goes her e ##

    addi $s3, $s3, - 1 # decrement out er l oop l i mi tj out er # r est ar t out er l oop

    out er _end:

  • 8/14/2019 T23.MIPSArrays

    8/8

    CS@VT October 2009 2006-09 McQuain, Feng & Ribbens

    MIPS Arrays

    Computer Organization I

    8Example 2: MIPS Bubblesort

    ## see pr ecedi ng sl i de f or sur r oundi ng code

    i nner : # i nner bubbl e- sor t l oopbge $s0, $s3, i nner_end

    l w $t 7, Li st ( $s1) # get cur rent el ement

    l w $t 8, Li st + 4( $s1) # get next el ement

    bl e $t 7, $t 8, no_swapsw $t 8, Li st ( $s1)sw $t 7, Li st + 4( $s1)

    no_swap:addi $s1, $s1, 4addi $s0, $s0, 1 # i ncr ement i nner l oop count er

    j i nner # r est ar t i nner l oopi nner _end: