Source: https://www.cs.csub.edu/~eddie/cmps2240/doc/britton-mips-text.pdf