Answer from cs61c-ei (Jing Chen 16669246) for Question 2
The purpose of the muxes are so that any needed data can be forwarded from any pipeline register (to avoid data hazards). The three possible values come from either the register file values or one of the forwarded values (from EX/MEM or MEM/WB).  

add $s0, $t0, $0 
- $t0 would be read from the register file

add $t0, $t1, $t2
add $t2, $t0, $t0 
- The value of $t0 will be forwarded from EX/MEM. 

lw $t0, 0($t1)
sll $0, $0, 0         #nop
add $t1, $t0, $t0 
- The value of $t0 will be forwarded from MEM/WB 

