Resources:
MIPS Instruction Reference
MIPS Tutorial Part 5 (Ch 17 - Ch 20):
Week 4 examples
Appendix A.10 in the text
Two files to be submitted:
lab4a.s
lab4b.s
1. Declares an array to hold 30 integers.
2. Uses a loop to initialize the array with the first 30 odd integers.
3. Display the same values to the screen within the loop.
4. Uses a second loop to step through the array and display only those
integers that are evenly divisible by 3 or 7.
Sample output...
$ spim -f lab4b.s Loaded: /usr/share/spim/exceptions.s 1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 59 3 7 9 15 21 27 33 35 39 45 49 51 57 $
Do not display anything for the other values in the array. You will need to implement if-else control structures within your loops.
First look at
loops.s
for an example of an if-else control structure inside a loop.
Then look at
loops2.s
for an example of filling an array and then displaying the values
in the array.
(The loops2.s code is closer to what you want your solution to do.)
copy the files to your own 2240/4 directory like this:
from Odin
cp /home/fac/gordon/public_html/2240/code/lab4/* .
from local machine
scp odin.cs.csub.edu:/home/fac/gordon/public_html/2240/code/lab4/* .
Space
Reread lab 2 if you need a refresher on how to allocate arrays.
Note that an integer requires 4 bytes.
Psuedocode
Data segment: Allocate space for an array
Text segment: Fill an array with odd integers
and also iterate over the array and display the contents
Iterate over the array and display the elements divisible by 3 or 7
declare integer arr[30] declare integer i fill_top: i <-- 0 arr[i] <-- (i * 2 + 1) i <-- i + 1 if (i < 30) goto fill_top display_top: i <-- 0 print arr[i] i <-- i + 1 if (i < 30) goto display_top // //display numbers divisible by 3 or 7 i <-- 0 div37_top: a <-- arr[i] //divide by 3 and look at the remainder b <-- a / 3 if (remainder == 0) print arr[i] goto next_num //divide by 7 and look at the remainder b <-- a / 7 if (remainder == 0) print arr[i] next_num: i <-- i + 1 goto div37_top
$ spim -f lab4b.s . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ . @ @ @ @ @ @ @ @ @ @ @ .
Recommended:
Draft your algorithm in C first, then implement the algorithm in MIPS.
Review
https://www.cs.csub.edu/~gordon/2240/code/lab4/rectangle.s
for an example of a nested loop structure.
Files on Odin: 2240/4/lab4a.s 2240/4/lab4b.s