Source: http://faculty.uml.edu/yluo/Teaching/MicroprocessorI/chapter3.pdf