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