SHOW:
|
|
- or go back to the newest paste.
1 | ############################################################################### | |
2 | ############################## DATA SECTION ################################### | |
3 | ############################################################################### | |
4 | .data | |
5 | datalen: | |
6 | .word 0x0010 # 16 | |
7 | data: | |
8 | .word 0xffff7e81 | |
9 | .word 0x00000001 | |
10 | .word 0x00000002 | |
11 | .word 0xffff0001 | |
12 | .word 0x00000000 | |
13 | .word 0x00000001 | |
14 | .word 0xffffffff | |
15 | .word 0x00000000 | |
16 | .word 0xe3456687 | |
17 | .word 0xa001aa88 | |
18 | .word 0xf0e159ea | |
19 | .word 0x9152137b | |
20 | .word 0xaab385a1 | |
21 | .word 0x31093c54 | |
22 | .word 0x42102f37 | |
23 | .word 0x00ee655b | |
24 | .word 0,0 # padding.... This shoulrd not be needed... | |
25 | ||
26 | .data | |
27 | newline: | |
28 | .word 0x0a | |
29 | ||
30 | ############################################################################### | |
31 | ############################# PROGRAM SECTION ################################# | |
32 | ############################################################################### | |
33 | .text | |
34 | main: | |
35 | ## | |
36 | # $s1 addres to data arry | |
37 | # $s2 data arry length | |
38 | # | |
39 | # $s3 inner loop itterator -- i | |
40 | # $s4 outer loop itterator -- j | |
41 | # | |
42 | # $s5 indexOfLastLowValue | |
43 | # $s6 lastLowValue | |
44 | # | |
45 | # $t9 innerloop slt -- set to one if innerloop has reached the end. | |
46 | # Do Not Change... | |
47 | - | # $t8 outerloop slt -- set to one if outerlaap has reached the end. |
47 | + | # $t9 outerloop slt -- set to one if outerlaap has reached the end. |
48 | # Do Not Change... | |
49 | ||
50 | la $s1, data # addres to data | |
51 | lw $s2, datalen # datalen | |
52 | nop | |
53 | addi $s2, $s2, -1 # WHY?!?!?!? | |
54 | ||
55 | ######## Print the array before sortig | |
56 | printa: | |
57 | slt $t9, $s2, $s3 | |
58 | seq $t9, $s2, $s3 | |
59 | nop | |
60 | # print number | |
61 | sll $t3, $s3, 2 | |
62 | add $t3, $t3, $s1 | |
63 | nop | |
64 | lw $a0, ($t3) | |
65 | li $v0, 1 | |
66 | nop | |
67 | syscall | |
68 | nop | |
69 | # print newline | |
70 | la $a0, newline | |
71 | li $v0, 4 | |
72 | nop | |
73 | syscall | |
74 | nop | |
75 | addi $s3, $s3 ,1 | |
76 | beqz $t9, printa | |
77 | nop | |
78 | add $t9, $zero, $zero | |
79 | # print newline | |
80 | la $a0, newline | |
81 | li $v0, 4 | |
82 | nop | |
83 | syscall | |
84 | nop | |
85 | ############# END Print the array before sortig | |
86 | ||
87 | ||
88 | add $s3, $zero, $zero # i | |
89 | add $s4, $zero, $zero # j | |
90 | ||
91 | add $s5, $zero, $zero # indexOfLastLow | |
92 | add $s6, $zero, $zero # lastLowValue | |
93 | ||
94 | add $t9, $zero, $zero # set to one if i >= datalen | |
95 | add $t8, $zero, $zero # set to one if j >= datalen | |
96 | ||
97 | outerloop: | |
98 | seq $t9, $s2, $s3 | |
99 | slt $t9, $s2, $s3 # if datalen < i | |
100 | # j = i + 1 | |
101 | addi $s4, $s3, 1 | |
102 | # indexOfLastLow = i | |
103 | add $s5, $s3, $zero | |
104 | # lastLowValue = data[i] | |
105 | sll $t4, $s3, 2 # t4 = t4 * 4 -- so it becames a word counter | |
106 | nop | |
107 | add $t4, $t4, $s1 # t4 = t4 + *data -- so that t4 poins to the | |
108 | nop # address of the element | |
109 | lw $s6, ($t4) # load the element into lastLowValue | |
110 | ||
111 | innerloop: | |
112 | seq $t8, $s2, $s4 | |
113 | slt $t8, $s2, $s4 # if datalen < j | |
114 | # if array[j] < lastLowValue | |
115 | sll $t5, $s4, 2 | |
116 | nop | |
117 | add $t5, $t5, $s1 | |
118 | nop | |
119 | lw $t5, ($t5) | |
120 | nop | |
121 | blt $s6, $t5, endinnerloop # if lastLowValue is bigger then data[j] | |
122 | nop | |
123 | add $s6, $t5, $zero | |
124 | add $s5, $s4, $zero | |
125 | nop | |
126 | ||
127 | endinnerloop: | |
128 | # jump to innerloop if datalen >= j | |
129 | addi $s4, $s4, 1 | |
130 | beqz $t8 innerloop | |
131 | nop | |
132 | # end of innerloop | |
133 | ||
134 | #### Swap elements | |
135 | nop | |
136 | # reset j | |
137 | add $s4, $zero, $zero | |
138 | nop | |
139 | #loads data[i] | |
140 | sll $t7, $s3, 2 | |
141 | add $t7, $s1, $t7 | |
142 | lw $t5, ($t7) | |
143 | nop | |
144 | # loads data[inderOfLastLow] | |
145 | sll $t3, $s5, 2 | |
146 | nop | |
147 | add $t3, $s1, $t3 | |
148 | nop | |
149 | lw $t6, ($t3) | |
150 | nop | |
151 | # Does the swap | |
152 | sw $t5, ($t3) | |
153 | sw $t6, ($t7) | |
154 | nop | |
155 | ### end swap elements | |
156 | # Reset j | |
157 | add $s4, $zero, $zero | |
158 | addi $s3, $s3, 1 | |
159 | nop | |
160 | # jump back | |
161 | beqz $t9, outerloop | |
162 | ##### end of outerloop | |
163 | nop | |
164 | add $s3, $zero, $zero | |
165 | add $t9, $zero, $zero | |
166 | nop | |
167 | #Print the sortetd array | |
168 | print: | |
169 | seq $t9, $s2, $s3 | |
170 | slt $t9, $s2, $s3 | |
171 | nop | |
172 | # print number | |
173 | sll $t3, $s3, 2 | |
174 | add $t3, $t3, $s1 | |
175 | nop | |
176 | lw $a0, ($t3) | |
177 | li $v0, 1 | |
178 | nop | |
179 | syscall | |
180 | nop | |
181 | # print newline | |
182 | la $a0, newline | |
183 | li $v0, 4 | |
184 | nop | |
185 | syscall | |
186 | nop | |
187 | addi $s3, $s3 ,1 | |
188 | beqz $t9, print | |
189 | nop | |
190 | exit: | |
191 | li $v0, 10 | |
192 | syscall | |
193 | nop | |
194 | # |