Peer review
Couple of issues. Firstly you are missing nop statements in your proc2 and proc3 functions after the jump to the store function. Without these nops bad things will happen in the delay slots :(
The bigger issue is this code, on line 225-228:
la $k0, curpcb
lw $k1, 0($k0)
mfc0 $k1, $14 # Load Program Counter
Problem is you load the address of curpcb into k0, then load the word there into k1, and then overwrite k1 again with the Program counter. This is not good. You want to overwrite the address in k0 instead. This is the code I think you wanted to write
la $k1, curpcb
lw $k0, 0($k1)
mfc0 $k1, $14 # Load Program Counter
With this simple switch of k1 and k0, your code works for me. Hopefully my explanation is understandable :|