MCS-388 Homework 5 (Spring 2000)

Due: April 28, 2000

Do Exercise 10.1 on pages 711-712 of the textbook. Assume that a, b, and c are indexed from 1 to n in each dimension. Decide whether you are going to treat n as a variable or as a name for a constant value. State your decision. If you decide it is a constant, you can just include n in your code to indicate that constant, or an arithmetic expression involving n to indicate another constant derived from it. You may use MIPS assembly language notation in place of the book's three-address intermediate code notation, if you are more comfortable with that. You should assume (in this case) that scalar variables live in registers. Either give me a table showing which register is used for which variable, or just use a notation like $i for the register containing the variable i. You can assume the existence of labels a, b, and c at the base of each array, and use the notation (a-4) to indicate the (constant) address four bytes before the start of a, etc. If you use the book's three-address intermediate code format, I would prefer that you not use the bracket notation, but rather did the address addition explicitly. If you use MIPS assembly language notation in place of the three-address intermediate code, again show the address addition explicitly, always using an offset of 0 in the lw and sw instructions (so that the base register has to contain the actual address). If you use MIPS code, you can skip parts b and h, which call for generating "target-machine code." If, on the other hand, you use three-address intermediate code, then go ahead and do parts b and h but using the MIPS as your target machine, rather than the one defined in the book.

Also, briefly describe any major opportunities for optimizing this routine that are not covered by the exercise. Keep in mind that on contemporary machines, it is memory accesses that are generally the most time consuming operations.

Course web site:
Instructor: Max Hailperin <>