Source: http://www.sce.carleton.ca/courses/sysc-3006/s13/Lecture Notes/Part9-InstructionEncoding.pdf