Source: https://faculty.uml.edu/yluo/Teaching/MicroprocessorII/L03.8086Programming2.pdf