Final Exam Solution Spring 2007 - ECE 3035 1:00p.m Computing Mechanisms Spring 2007 5 problems 6 pages Final Exam Solutions 3 May 2007 Problem 1(1 part

Final Exam Solution Spring 2007 - ECE 3035 1:00p.m...

This preview shows page 1 - 3 out of 6 pages.

ECE 3035 1:00p.m. Computing Mechanisms Spring 2007 5 problems, 6 pages Final Exam Solutions 3 May 2007 1 Problem 1 (1 part, 2 points) Compiling MIPS Part A (20 points) Write an efficient MIPS program fragment that is equivalent to the C program fragment below. Place the output variable Sum in register $4 and use $3 for i . Use temporary registers as needed. int Array[] = {10, 20, 30, 40, 50, 60, 70}; int i, Sum = 0; for (i = 0; i < 7; i++) { if ((i % 2) == 0) continue; Sum =+ Array[i]; } Sum = Sum + 100; Assume Array has been declared as a label in the .data section as follows: Array: .word 10, 20, 30, 40, 50, 60, 70 label data/instruction comment add $4, $0, $0 # clear Sum add $3, $0, $0 # clear i Loop: slti $5, $3, 7 # is i < 7? beq $5, $0, End # if not, exit loop andi $5, $3, 1 # check last bit of i beq $5, $0, Continue # if it’s 0 then continue sll $5, $3, 2 # scale i by 4 lw $5, Array($5) # Lookup Array[i] add $4, $4, $5 # Sum =+ Array[i] Continue: addi $3, $3, 1 # i++ j Loop # loop back End: addi $4, $4, 100 # Sum = Sum + 100 Part B (10 points) Write an efficient MIPS program fragment that is equivalent to the C program fragment below. Assume X is in register $1 and Y is in register $2. Use temporary registers as needed. if (X < Y) X = Y - X; else Y = X - Y; label instruction comment slt $5, $1, $2 # is x < y? beq $5, $0, Else # if not, jump to Else sub $1, $2, $1 # X = Y – X j End # exit if-then-else Else: sub $2, $1, $2 # Y = X – Y End:
Image of page 1