You are given extra two days to do the problems. Submitting assembly programs, and report some of your test outputs. First problem comes from textbook, page 162.

- (3.33) [30] Write a function string2int in MIPS
assembly language to
convert an ASCII string of digits to an integer. For example,
if the input to the procedure is the string "1024",
the return value should be the integer 1024. Your program should
expect register $4 to hold the address of a null-terminated string
containing some combination of the digit characters '0' through
'9'. Your
program should compute the integer value equivalent to this string of
digits, then place the number in register $2. Your program need
not handle negative numbers. If a non-digit character appears
anywhere in the string, your program should stop with the value -1
in register $2. For example, if register $4 points to a sequence of
three bytes 50_{ten}, 52_{ten}, 0_{ten} (the null-terminated
string "24". Check the ASCII table for the encoding),
then when the program stops, register $2 should
contain the value 24_{ten}. Hint: use Horner's method of
polynomial evaluation. Note that given the digits, 1, 3, 7, the
number 137 can be computed as
(((0 + 1) x 10 + 3 ) x 10 + 7).

Test your procedure by writing a main program in MIPS assembly language, follow closely the MIPS register/stack usage convention.

- [30] Write a procedure, P, in MIPS assembly
language to compute the value of Legendre polynomials defined
recursively as
P(x, 0) = 1, P(x, 1) = x, P(x, n) = x (2 - 1/n) P(x, n-1) - (1 - 1/n) P(x, n-2). n>1.

The function P(x,n) takes two arguments. The first argument is a real number. We use double precision for x. The second argument is an integer. The return value should be double. Use the double precision floating point instructions add.d, sub.d, mul.d, div.d, li.d (load immediate double), l.d (load double), s.d (store double), and mov.d (move double). To convert an integer value in a CPU register, say, $6, to a floating point number of the same value, in FPU register $f8, (e.g., converting integer 3 to floating 3.0), you need the following instruction sequencemtc1 $6, $f10 # move the bit pattern to FPU reg $f10 cvt.d.w $f8, $f10 # convert integer to double, result in $f8

Follow closely the MIPS argument passing/stack usage convention. In particular, the argument x should be passed in $f12, and the second argument n should be passed in $6, and the return value should be in $f0. Test your assembly program with an interactive main program. Compute and report the following values P(0.0, 2), P(0.5, 3), and P(0.25, 5). How do you know that your answers are correct?