A good answer might be:

sw   $t0,someWord   ==    lui  $1,0x1000

                          sw   $8,12( $1 )

It would be OK to say $t0 for $8 and $at for $1.

Example Program

Here is an example using the lw and sw instructions. The nop (no-operation) instructions are used to follow the rule that a mult instruction should not be started until two instructions after a mflo or mfhi instruction. (Usually our SPIM programs do not follow this rule because SPIM does not emulate that aspect of MIPS.)

## pseudoPoly.asm
## evaluate the polynomial ax2 + bx + c
##
        .text
        .globl  main

main:
        lw   $t3,x          # get x
        lw   $t0,a          # get a
        lw   $t1,bb         # get bb
        lw   $t2,c          # get c

        mult $t3,$t3        # x2
        mflo $t4            # $t4 = x2
        nop
        nop
        mult $t4,$t0        # low  = ax2
        mflo $t4            # $t4  = ax2
        nop
        nop

        mult $t1,$t3        # low  = bx
        mflo $t5            # $t5  = bx
        addu $t5,$t4,$t5    # $t5  = ax2 + bx

        addu $t5,$t5,$t2    # $t5 = ax2 + bx + c
        sw   $t5,value      # value = polynomial

        .data
x:      .word   4 
value:  .word   1 
a:      .word  20
bb:     .word  -2           # the SPIM assembler does not allow the label "b"
c:      .word   5
 
## end of pseudoPoly.asm

This is a straightforward evaluation of the polynomial. By using Horner's method, and by cleverly filling some of the no-ops with instructions, the program could be greatly improved.

QUESTION 22:

What big assumption was made in writing this program?