Source: https://www.cs.yale.edu/flint/cs422/doc/art-of-asm/pdf/CH06.PDF