Upload
sergio-zuniga-quispe
View
215
Download
0
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: