<< Basic Rubric & Common Mistakes for HW4 >> Below are what each problem was worth and what the common mistakes were. We have not given exact point values for certain mistakes. Some are more severe than others, and some problems (like #5) were graded more holistically. #1 ( 1 point ) - Use of invalid instructions or using instructions incorrectly. #2 ( 1 point ) - Not saving $ra in part a) before doing a 'jal sub' call. - People were not supposed to use the stack in part b). Since the function is inline, there should be no stack prologue/epilogue. This is why we save instructions from part a). #3 ( 3 points ) - Many people used the 'mult' instruction but did not use 'mflo' afterwards (minor error). - Many people did not realize that vectors was an array of pointers. This means we need to load each vector pointer, and then load x and y using this vector pointer. (i.e. this would require a total of 3 load instructions: The first load will contain a pointer to a vector, and the next two loads would use this result to get x and y). (This error was usually minus more points). - Some minor problems with register conventions (i.e. not using $a0, $a1 for vectors, len). (Minor error). #4 ( 3 points ) - The main issue was when people did not use 'jal' calls. The problem specified to use recursion, so simply using 'j' calls did not suffice. - Some people lost points due to lack of keeping with register conventions. - Getting remove right was worth more points than print. #5 ( 2 points ) This problem was graded holistically. 0-2 errors resulted in maximum points, 2-3 errors resulted in -0.5, etc…(note that the severity of the error also came into play; see below). - Some people did not convert the op code/function fields into decimal values (minor error). - The 'immediate' field for the 'beq' instruction caused the most problems. Common errors included simply making a mistake on the immediate (minor error) or not realizing that branch uses relative addressing (-0.5). Please e-mail your reader if you have any questions.