Let's start with the first task: 

- Your a) seems correct to me. 


- For b) I think it is meant, that the arrays A and D are located in the RAM and start at the addresses stored respectively in $9 and $10: so if you want to copy the value stored in A at the j-th position, multiplied by one million, in array D at the i-th position, this gets a bit trickier!

    1. First you have to take the value of j and multiply it with 4 (you need a byte offset for the memory: the numbering follows bytes and not words, so you have to take it four times if you want the j-th word (32 bit) and not byte (8 bit) in the array!).

    2. Now you add the absolute memory base adress of the array (stored in $9) to have the absolute adress of the data field we want to access.

    3. Then you take this value and fetch the data at this adress in memory; the command for this should be "lw $t, offset($s)", where $t represents a temporary register (e.g. $at), $s represents the absolute adress we just computed and offset nothing (i.e. zero, but you don't write it down). 

    4. This value then has to be shifted left six times (the command is "sll $d, $t, shamt" where shamt is a immediate - in our case six). 

    5. Now we have to compute the absolute adress of our destination data field in array D (just like with A). 

    6. And finally store our value at the correct adress in RAM with an operation very similiar to lw, "sw $t, offset($s)", that works just like lw (and we still don't need any immediate offset to be added to our adress). 


- For c) you have to access array A with a relative adress equivalent to the data stored in the array D at position 5 (i.e. 6th element), which should not be too difficult after having accomplished task b). 


I hope I could clear some things up in general, in addition to helping with this particular problem :)

*I didn't add the complete source code as I think it helps more to implement in on your own, and as you now have detailed instructions this shouldn't be too difficult. If you still have trouble don't be afraid of asking further help!*

Now let me just append some information about the offset: it is used if you want to statically access a predefined element in A, e.g. the fourth. Then you would use "lw" for example like this: "lw $at, 16($9)"..... Hang on a moment: Why 12, didn't we want the 4th element? Yes we did, but using 4 would just cause us to read the 2nd element (word) in the array, that is the 5th to 8th byte! 
Remember: memory is byte-adressed and not word-adressed.
(You can use this for task c), too, but it can be solved also without.)

**If there are mistakes in here please tell me!**