Source: http://flint.cs.yale.edu/cs422/doc/art-of-asm/pdf/aoaTOC2.pdf